1 00:00:00,000 --> 00:00:02,480 >> [REPRODUCCIÓN DE MÚSICA] 2 00:00:02,480 --> 00:00:06,460 3 00:00:06,460 --> 00:00:09,350 >> DOUG LLOYD: Muy bien, así que vamos a hablar de argumentos de la línea de comandos. 4 00:00:09,350 --> 00:00:11,800 Así que, hasta el momento en el curso bastante mucho todos tus programas 5 00:00:11,800 --> 00:00:16,360 probablemente han comenzado así- void main int. 6 00:00:16,360 --> 00:00:18,310 Hemos estado recolectando entrada del usuario si lo necesitamos 7 00:00:18,310 --> 00:00:21,080 en nuestros programas, como el Mario programa, por ejemplo, 8 00:00:21,080 --> 00:00:22,990 por instrucciones de programa. 9 00:00:22,990 --> 00:00:25,190 No hemos necesitado modificar la declaración del principal, 10 00:00:25,190 --> 00:00:30,684 porque en lugar dentro de nosotros principal a decir, usted puede llamar para obtener int. 11 00:00:30,684 --> 00:00:32,350 ¿Qué tan grande es lo que quieres de la pirámide sea? 12 00:00:32,350 --> 00:00:34,455 O usted puede llamar para obtener float-- cuánto cambio 13 00:00:34,455 --> 00:00:36,400 debo de salida para el usuario? 14 00:00:36,400 --> 00:00:38,630 >> Hay otra manera sin embargo, y si queremos que nuestros usuarios 15 00:00:38,630 --> 00:00:40,580 para ser capaz de proporcionar datos a nuestro programa 16 00:00:40,580 --> 00:00:43,320 en tiempo de ejecución en lugar del tiempo el programa se está ejecutando, 17 00:00:43,320 --> 00:00:45,910 una distinción sutil pero a veces una muy útil, 18 00:00:45,910 --> 00:00:48,120 necesitamos una nueva forma de declarar principal. 19 00:00:48,120 --> 00:00:53,320 No podemos usar void main int si queremos recopilar otros datos en la línea de comandos 20 00:00:53,320 --> 00:00:57,540 cuando el usuario ejecuta el programa, por lo tanto, los argumentos de línea de comandos. 21 00:00:57,540 --> 00:00:59,810 >> Para recoger estos de línea de comandos argumentos por parte del usuario, 22 00:00:59,810 --> 00:01:03,140 cambiar su declaración de principal para parecerse a esto-- int 23 00:01:03,140 --> 00:01:10,450 principales, paren abiertas, int argc, coma, argv cuerda, entre corchetes, 24 00:01:10,450 --> 00:01:12,670 y luego abrir corchete. 25 00:01:12,670 --> 00:01:14,415 Entonces, ¿qué significa eso ya? 26 00:01:14,415 --> 00:01:19,410 Bueno, estamos pasando en dos parámetros, o argumentos, o entradas al principal. 27 00:01:19,410 --> 00:01:23,800 Uno, llamado un número entero argc, y el otro es lo que? 28 00:01:23,800 --> 00:01:26,430 29 00:01:26,430 --> 00:01:29,640 Es una matriz de cadenas, ¿verdad? 30 00:01:29,640 --> 00:01:31,140 Vemos que la notación de corchetes. 31 00:01:31,140 --> 00:01:32,181 Es una matriz de cadenas. 32 00:01:32,181 --> 00:01:35,110 No es una cadena individual, es una matriz de cadenas. 33 00:01:35,110 --> 00:01:39,640 Y estos dos argumentos, argc y argv, le permiten conocer los datos del usuario 34 00:01:39,640 --> 00:01:42,912 ha proporcionado a la línea de comandos y cuántas cosas 35 00:01:42,912 --> 00:01:44,120 proporcionada en la línea de comandos. 36 00:01:44,120 --> 00:01:46,570 Cosas muy útiles para trabajar. 37 00:01:46,570 --> 00:01:50,310 >> Argc significa recuento argumento, y usted debe saber, por cierto, 38 00:01:50,310 --> 00:01:52,600 que se podría llamar argc lo que tú quieras. 39 00:01:52,600 --> 00:01:54,710 Usted puede llamar argv lo que querías. 40 00:01:54,710 --> 00:01:58,740 Estos son nombres simplemente convencionales que utilizamos para ellos-- recuento argumento, 41 00:01:58,740 --> 00:02:00,907 y como veremos en un segundo, argumento vector, argv. 42 00:02:00,907 --> 00:02:03,698 Pero usted no tiene que llamarlos argc y argv si usted no quiere, 43 00:02:03,698 --> 00:02:05,570 pero convencionalmente, eso es lo que hacemos. 44 00:02:05,570 --> 00:02:07,500 >> Así que de todos modos, argc, el recuento argumento. 45 00:02:07,500 --> 00:02:11,569 Es una variable de tipo entero y por eso, como es de esperar, si tenemos dos cosas 46 00:02:11,569 --> 00:02:13,860 que vamos a encontrar lo que éstos se escriben 47 00:02:13,860 --> 00:02:16,070 y la cantidad de cosas la usuario escribió, argc es 48 00:02:16,070 --> 00:02:18,559 nos va a decir cuánto rellenar el usuario escribió. 49 00:02:18,559 --> 00:02:20,850 Por lo que le da un número de argumentos de línea de comando de usuario 50 00:02:20,850 --> 00:02:22,470 escrito en que se ejecuta el programa. 51 00:02:22,470 --> 00:02:25,780 Así que si su programa es ejecutar dot recortar codicioso, 52 00:02:25,780 --> 00:02:28,670 y en el interior de su codicioso programar su función principal 53 00:02:28,670 --> 00:02:34,800 tiene la declaración int int main argc, cadena argv corchetes, a continuación, 54 00:02:34,800 --> 00:02:37,950 argc en ese caso es uno. 55 00:02:37,950 --> 00:02:40,200 Ahora notamos no lo hacemos contar cuántas cosas 56 00:02:40,200 --> 00:02:42,590 el usuario escribió después de que el nombre del programa. 57 00:02:42,590 --> 00:02:46,710 El propio nombre del programa cuenta como un argumento de línea de comandos. 58 00:02:46,710 --> 00:02:51,770 >> Así dot recortar codicioso, en ese caso, argc es uno. 59 00:02:51,770 --> 00:02:57,910 Si el usuario escribió barra codiciosos 1024 CS50 en la línea de comandos, argc en ese caso 60 00:02:57,910 --> 00:02:59,520 serían tres. 61 00:02:59,520 --> 00:03:03,720 Y lo sabemos porque el camino que la división entre las cuerdas 62 00:03:03,720 --> 00:03:06,030 se detecta es si hay un espacio o una ficha, 63 00:03:06,030 --> 00:03:08,230 o algo así entre ellos. 64 00:03:08,230 --> 00:03:13,860 Por lo que cualquier cantidad de espacio en blanco, así llamado, entre los valores con tipo de línea de comandos 65 00:03:13,860 --> 00:03:15,720 indica cuántos hay. 66 00:03:15,720 --> 00:03:24,040 Así dot recortar espacio codiciosos 1024 espacio CS50, argc, en ese caso, es de tres. 67 00:03:24,040 --> 00:03:26,600 >> Argv es el vector argumento. 68 00:03:26,600 --> 00:03:29,240 Vector, por cierto, es sólo otra palabra para una matriz, 69 00:03:29,240 --> 00:03:31,510 y esto es una matriz que almacena cadenas. 70 00:03:31,510 --> 00:03:35,540 Una cadena por elemento, que es las cadenas que el usuario realmente 71 00:03:35,540 --> 00:03:39,230 escrito en la línea de comandos cuando se ejecuta el programa. 72 00:03:39,230 --> 00:03:40,990 Ahora, como es el caso con cualquier matriz, si 73 00:03:40,990 --> 00:03:44,380 recordar de nuestra discusión de arrays, el primer elemento de argv 74 00:03:44,380 --> 00:03:49,150 Siempre va a ser encontrado en argv corchete cero. 75 00:03:49,150 --> 00:03:51,800 Ese es el primer índice de la matriz argv. 76 00:03:51,800 --> 00:03:55,720 Así que Voluntad-- y, de hecho, que la voluntad siempre será el nombre del programa, 77 00:03:55,720 --> 00:03:59,730 siempre será situado en argv corchete cero. 78 00:03:59,730 --> 00:04:08,590 >> El último elemento de argv siempre se encuentra en argv corchetes argc menos uno. 79 00:04:08,590 --> 00:04:10,300 ¿Ve usted por qué? 80 00:04:10,300 --> 00:04:14,180 Recuerda cuántos elementos existir en esta matriz. 81 00:04:14,180 --> 00:04:16,660 Bueno, sabemos que es que-- número argc de elementos. 82 00:04:16,660 --> 00:04:21,279 Si el usuario escribió tres cosas a la la línea de comandos, argc es de tres. 83 00:04:21,279 --> 00:04:27,070 Pero debido a que en c, cuando estamos trabajando con matrices, cada elemento de la matriz, 84 00:04:27,070 --> 00:04:30,190 o más bien los índices de la matriz, comenzar en cero. 85 00:04:30,190 --> 00:04:34,000 Si tenemos tres elementos en nuestra matriz, tenemos un elemento en argv cero, 86 00:04:34,000 --> 00:04:37,930 un elemento en argv uno, y un elemento de argv dos. 87 00:04:37,930 --> 00:04:41,700 No hay ningún elemento en argv tres, y una matriz de tamaño tres. 88 00:04:41,700 --> 00:04:43,990 Así que por eso la última elemento de argv siempre puede 89 00:04:43,990 --> 00:04:49,510 se encuentra en la plaza argv argc soportes menos uno. 90 00:04:49,510 --> 00:04:52,420 >> Así que supongamos que se ejecuta el usuario el programa codiciosos como follows-- 91 00:04:52,420 --> 00:04:57,970 si escribe en el punto de línea de comandos slash codiciosos espacio de 1.024 espacio CS50, 92 00:04:57,970 --> 00:05:00,720 y por alguna razón que hemos ya preparado nuestro programa codiciosos 93 00:05:00,720 --> 00:05:04,050 de conocer y trabajar con ellos argumentos de la línea de comandos. 94 00:05:04,050 --> 00:05:07,030 Nosotros no lo hicimos anteriormente cuando trabajamos en él para el problema codicioso, 95 00:05:07,030 --> 00:05:09,660 pero digamos que ahora hemos modificado de manera que lo hacemos proceso 96 00:05:09,660 --> 00:05:11,480 los argumentos de línea de comandos de alguna manera. 97 00:05:11,480 --> 00:05:15,720 En este caso, argv cero es slash dot codicioso. 98 00:05:15,720 --> 00:05:17,042 ¿Qué hay argv uno? 99 00:05:17,042 --> 00:05:19,030 Bueno, es 1024, ¿verdad? 100 00:05:19,030 --> 00:05:22,620 Es 1024, pero aquí hay un realmente importante distinction-- 101 00:05:22,620 --> 00:05:26,410 ¿te acuerdas del tipo de datos de argv? 102 00:05:26,410 --> 00:05:31,020 >> Almacena cuerdas, ¿verdad? 103 00:05:31,020 --> 00:05:34,140 Pero parece que 1024 es un valor entero. 104 00:05:34,140 --> 00:05:36,530 Este es un muy importante distinción, y es en realidad 105 00:05:36,530 --> 00:05:40,200 va a ser algo que usted podría encontrarse en problemas posteriores. 106 00:05:40,200 --> 00:05:43,770 Todo en argv es almacenado como una cadena. 107 00:05:43,770 --> 00:05:48,775 Así contenidos de argv uno son los cadena de uno, cero, dos, cuatro, 108 00:05:48,775 --> 00:05:50,275 compuesta por los cuatro personajes. 109 00:05:50,275 --> 00:05:53,870 Es como si el usuario escribió uno, cero, dos, cuatro 110 00:05:53,870 --> 00:05:56,680 como letras o caracteres individuales. 111 00:05:56,680 --> 00:06:00,730 No es el número entero 1 024, y por lo que no puede directamente 112 00:06:00,730 --> 00:06:11,580 trabajar con él diciendo int 1000, o en lugar int x es igual argv uno menos 24. 113 00:06:11,580 --> 00:06:15,550 >> Intuitivamente, se podría pensar de esa como, OK, así que es 1024, menos de 24 años, 114 00:06:15,550 --> 00:06:17,920 por lo que x es igual a 1,000. 115 00:06:17,920 --> 00:06:22,020 Pero, en realidad, eso no es el caso, porque argv es una cadena. 116 00:06:22,020 --> 00:06:23,940 La cadena 1024. 117 00:06:23,940 --> 00:06:28,739 Ahora hay una función que se puede utilizado para convertir cadenas a enteros. 118 00:06:28,739 --> 00:06:30,780 No voy a estropear por usted ahora, pero estoy seguro de Zamyla 119 00:06:30,780 --> 00:06:34,380 estará feliz de poder decir acerca de ello en el paso a paso para un problema futuro. 120 00:06:34,380 --> 00:06:36,390 Pero también se puede encontrar problemas como-- excusa 121 00:06:36,390 --> 00:06:39,921 mí, funciones que haría hacer esto en referencia 50, 122 00:06:39,921 --> 00:06:42,462 si vas a la guía de referencia se puede encontrar una función que 123 00:06:42,462 --> 00:06:43,820 hará esta conversión para usted. 124 00:06:43,820 --> 00:06:45,980 Pero, de nuevo, en el tutorial para un problema futuro, 125 00:06:45,980 --> 00:06:48,290 Zamyla estará encantado qué función decirle 126 00:06:48,290 --> 00:06:53,280 es que va a convertir el string 1024 al entero 1024. 127 00:06:53,280 --> 00:06:54,560 >> Muy bien, por lo que seguir adelante. 128 00:06:54,560 --> 00:06:56,726 Hemos cubierto nuestra cero argv, hemos cubierto argv una. 129 00:06:56,726 --> 00:06:58,000 ¿Qué hay en argv dos? 130 00:06:58,000 --> 00:06:58,620 CS50. 131 00:06:58,620 --> 00:07:01,350 Ese es probablemente explica por sí mismo bonito. 132 00:07:01,350 --> 00:07:02,950 ¿Qué hay en argv tres? 133 00:07:02,950 --> 00:07:04,970 Pues de nuevo, no lo sabemos, ¿no? 134 00:07:04,970 --> 00:07:08,060 Tenemos una gran variedad de tamaño tres, así es como muchos de los elementos que el usuario 135 00:07:08,060 --> 00:07:11,610 escrito en la línea de comandos, así que si vamos a argv tres, 136 00:07:11,610 --> 00:07:14,660 ahora estamos sobrepasando los límites de nuestra matriz. 137 00:07:14,660 --> 00:07:18,570 El compilador hagamos esto, no hay problema intuitiva con él, 138 00:07:18,570 --> 00:07:22,890 pero en términos de realidad lo que está pasando a suceder, no se sabe muy bien. 139 00:07:22,890 --> 00:07:25,380 Depende de lo que es ubicada en la memoria donde 140 00:07:25,380 --> 00:07:28,060 argv tres serían espera que sea. 141 00:07:28,060 --> 00:07:30,716 Y así podríamos terminar alejarse impunes. 142 00:07:30,716 --> 00:07:33,840 Lo más probable es que no, sobre todo cuando está trabajando con argv en oposición 143 00:07:33,840 --> 00:07:35,548 a cualquier otra matriz eso es en nuestro programa, 144 00:07:35,548 --> 00:07:38,660 probablemente vamos a sufrir un fallo de segmentación. Así que de nuevo, 145 00:07:38,660 --> 00:07:42,756 Asegúrese de no sobrepasar los límites de sus matrices, en particular argv, 146 00:07:42,756 --> 00:07:47,170 dado su alto grado de importancia en sus programas. 147 00:07:47,170 --> 00:07:48,100 >> Soy Doug Lloyd. 148 00:07:48,100 --> 00:07:50,170 Esto es CS50. 149 00:07:50,170 --> 00:07:51,457