>> [REPRODUCCIÓN DE MÚSICA]
>> DOUG LLOYD: Muy bien, así que vamos a hablar de argumentos de la línea de comandos.
Así que, hasta el momento en el curso bastante mucho todos tus programas
probablemente han comenzado así- void main int.
Hemos estado recolectando entrada del usuario si lo necesitamos
en nuestros programas, como el Mario programa, por ejemplo,
por instrucciones de programa.
No hemos necesitado modificar la declaración del principal,
porque en lugar dentro de nosotros principal a decir, usted puede llamar para obtener int.
¿Qué tan grande es lo que quieres de la pirámide sea?
O usted puede llamar para obtener float-- cuánto cambio
debo de salida para el usuario?
>> Hay otra manera sin embargo, y si queremos que nuestros usuarios
para ser capaz de proporcionar datos a nuestro programa
en tiempo de ejecución en lugar del tiempo el programa se está ejecutando,
una distinción sutil pero a veces una muy útil,
necesitamos una nueva forma de declarar principal.
No podemos usar void main int si queremos recopilar otros datos en la línea de comandos
cuando el usuario ejecuta el programa, por lo tanto, los argumentos de línea de comandos.
>> Para recoger estos de línea de comandos argumentos por parte del usuario,
cambiar su declaración de principal para parecerse a esto-- int
principales, paren abiertas, int argc, coma, argv cuerda, entre corchetes,
y luego abrir corchete.
Entonces, ¿qué significa eso ya?
Bueno, estamos pasando en dos parámetros, o argumentos, o entradas al principal.
Uno, llamado un número entero argc, y el otro es lo que?
Es una matriz de cadenas, ¿verdad?
Vemos que la notación de corchetes.
Es una matriz de cadenas.
No es una cadena individual, es una matriz de cadenas.
Y estos dos argumentos, argc y argv, le permiten conocer los datos del usuario
ha proporcionado a la línea de comandos y cuántas cosas
proporcionada en la línea de comandos.
Cosas muy útiles para trabajar.
>> Argc significa recuento argumento, y usted debe saber, por cierto,
que se podría llamar argc lo que tú quieras.
Usted puede llamar argv lo que querías.
Estos son nombres simplemente convencionales que utilizamos para ellos-- recuento argumento,
y como veremos en un segundo, argumento vector, argv.
Pero usted no tiene que llamarlos argc y argv si usted no quiere,
pero convencionalmente, eso es lo que hacemos.
>> Así que de todos modos, argc, el recuento argumento.
Es una variable de tipo entero y por eso, como es de esperar, si tenemos dos cosas
que vamos a encontrar lo que éstos se escriben
y la cantidad de cosas la usuario escribió, argc es
nos va a decir cuánto rellenar el usuario escribió.
Por lo que le da un número de argumentos de línea de comando de usuario
escrito en que se ejecuta el programa.
Así que si su programa es ejecutar dot recortar codicioso,
y en el interior de su codicioso programar su función principal
tiene la declaración int int main argc, cadena argv corchetes, a continuación,
argc en ese caso es uno.
Ahora notamos no lo hacemos contar cuántas cosas
el usuario escribió después de que el nombre del programa.
El propio nombre del programa cuenta como un argumento de línea de comandos.
>> Así dot recortar codicioso, en ese caso, argc es uno.
Si el usuario escribió barra codiciosos 1024 CS50 en la línea de comandos, argc en ese caso
serían tres.
Y lo sabemos porque el camino que la división entre las cuerdas
se detecta es si hay un espacio o una ficha,
o algo así entre ellos.
Por lo que cualquier cantidad de espacio en blanco, así llamado, entre los valores con tipo de línea de comandos
indica cuántos hay.
Así dot recortar espacio codiciosos 1024 espacio CS50, argc, en ese caso, es de tres.
>> Argv es el vector argumento.
Vector, por cierto, es sólo otra palabra para una matriz,
y esto es una matriz que almacena cadenas.
Una cadena por elemento, que es las cadenas que el usuario realmente
escrito en la línea de comandos cuando se ejecuta el programa.
Ahora, como es el caso con cualquier matriz, si
recordar de nuestra discusión de arrays, el primer elemento de argv
Siempre va a ser encontrado en argv corchete cero.
Ese es el primer índice de la matriz argv.
Así que Voluntad-- y, de hecho, que la voluntad siempre será el nombre del programa,
siempre será situado en argv corchete cero.
>> El último elemento de argv siempre se encuentra en argv corchetes argc menos uno.
¿Ve usted por qué?
Recuerda cuántos elementos existir en esta matriz.
Bueno, sabemos que es que-- número argc de elementos.
Si el usuario escribió tres cosas a la la línea de comandos, argc es de tres.
Pero debido a que en c, cuando estamos trabajando con matrices, cada elemento de la matriz,
o más bien los índices de la matriz, comenzar en cero.
Si tenemos tres elementos en nuestra matriz, tenemos un elemento en argv cero,
un elemento en argv uno, y un elemento de argv dos.
No hay ningún elemento en argv tres, y una matriz de tamaño tres.
Así que por eso la última elemento de argv siempre puede
se encuentra en la plaza argv argc soportes menos uno.
>> Así que supongamos que se ejecuta el usuario el programa codiciosos como follows--
si escribe en el punto de línea de comandos slash codiciosos espacio de 1.024 espacio CS50,
y por alguna razón que hemos ya preparado nuestro programa codiciosos
de conocer y trabajar con ellos argumentos de la línea de comandos.
Nosotros no lo hicimos anteriormente cuando trabajamos en él para el problema codicioso,
pero digamos que ahora hemos modificado de manera que lo hacemos proceso
los argumentos de línea de comandos de alguna manera.
En este caso, argv cero es slash dot codicioso.
¿Qué hay argv uno?
Bueno, es 1024, ¿verdad?
Es 1024, pero aquí hay un realmente importante distinction--
¿te acuerdas del tipo de datos de argv?
>> Almacena cuerdas, ¿verdad?
Pero parece que 1024 es un valor entero.
Este es un muy importante distinción, y es en realidad
va a ser algo que usted podría encontrarse en problemas posteriores.
Todo en argv es almacenado como una cadena.
Así contenidos de argv uno son los cadena de uno, cero, dos, cuatro,
compuesta por los cuatro personajes.
Es como si el usuario escribió uno, cero, dos, cuatro
como letras o caracteres individuales.
No es el número entero 1 024, y por lo que no puede directamente
trabajar con él diciendo int 1000, o en lugar int x es igual argv uno menos 24.
>> Intuitivamente, se podría pensar de esa como, OK, así que es 1024, menos de 24 años,
por lo que x es igual a 1,000.
Pero, en realidad, eso no es el caso, porque argv es una cadena.
La cadena 1024.
Ahora hay una función que se puede utilizado para convertir cadenas a enteros.
No voy a estropear por usted ahora, pero estoy seguro de Zamyla
estará feliz de poder decir acerca de ello en el paso a paso para un problema futuro.
Pero también se puede encontrar problemas como-- excusa
mí, funciones que haría hacer esto en referencia 50,
si vas a la guía de referencia se puede encontrar una función que
hará esta conversión para usted.
Pero, de nuevo, en el tutorial para un problema futuro,
Zamyla estará encantado qué función decirle
es que va a convertir el string 1024 al entero 1024.
>> Muy bien, por lo que seguir adelante.
Hemos cubierto nuestra cero argv, hemos cubierto argv una.
¿Qué hay en argv dos?
CS50.
Ese es probablemente explica por sí mismo bonito.
¿Qué hay en argv tres?
Pues de nuevo, no lo sabemos, ¿no?
Tenemos una gran variedad de tamaño tres, así es como muchos de los elementos que el usuario
escrito en la línea de comandos, así que si vamos a argv tres,
ahora estamos sobrepasando los límites de nuestra matriz.
El compilador hagamos esto, no hay problema intuitiva con él,
pero en términos de realidad lo que está pasando a suceder, no se sabe muy bien.
Depende de lo que es ubicada en la memoria donde
argv tres serían espera que sea.
Y así podríamos terminar alejarse impunes.
Lo más probable es que no, sobre todo cuando está trabajando con argv en oposición
a cualquier otra matriz eso es en nuestro programa,
probablemente vamos a sufrir un fallo de segmentación. Así que de nuevo,
Asegúrese de no sobrepasar los límites de sus matrices, en particular argv,
dado su alto grado de importancia en sus programas.
>> Soy Doug Lloyd.
Esto es CS50.