[Música tocando] Doug LLOYD: Todo ben, entón imos falar argumentos de liña de comandos. Así, ata o momento no curso fermosa moi todos os seus programas Probablemente xa comezou como isto-- void main int. Temos benvida a recoller entrada do usuario se necesitamos nos nosos programas, como o Mario programa, por exemplo, por prompts no programa. Non necesitamos modificar a declaración de inicio, porque en vez dentro de nós principal só dicir, pode chamalo para int. Que o tamaño que quere que a pirámide de ser? Ou pode chamalo de obter float-- canta cambio eu debería saída ao usuario? Hai outro camiño, pero, e se queremos que os nosos usuarios para poder ofrecer datos para o noso programa en tempo de execución en vez de mentres o programa está en execución, unha distinción sutil pero ás veces, unha forma moi útil, necesitamos unha nova forma de declarar principal. Non podemos usar void main int se queremos recoller outros datos na liña de comandos cando o usuario executa o programa, polo tanto, argumentos de liña de comandos. Para recoller estes liña de comandos argumentos do usuario, cambiar a súa declaración de principal para ollar como isto-- int principais, paréntese aberta, int argc, coma, corda argv, corchetes, e logo abra chaveta. Entón, o que iso significa xa? Ben, nós estamos pasando en dous parámetros, ou argumentos, ou entradas para principal. Un deles, un número enteiro chamada argc, eo outro é o que? É unha matriz de secuencias, non? Vemos que a notación paréntese. É unha matriz de cadeas. Non é unha cadea individual, é unha matriz de cadeas. E estes dous argumentos, argc e argv, permiten que para saber o que o usuario de datos proporcionou na liña de comandos e cantas cousas proporcionada na liña de comandos. Cousas moi útiles para traballar. Argc significa conta de argumento, e ten que saber, a propósito, que podería chamar argc o que queira que o quere. Pode chamar argv o que quería. Estes son só nomes convencionais que usan para eles-- conta de argumento, e, como veremos nun segundo, argumento vector, argv. Pero non ten que chamalos argc e argv se non quere, pero convencionalmente, que é o que facemos. Entón, de calquera xeito, argc, a conta de argumento. É unha variable de tipo enteiro e así, como podería esperar, se temos dúas cousas que imos estar atopando o que estes son escritas e canta cousa a usuario escribiu, argc é nos dicir o que encher o usuario escribiu. Por iso, dálle un número de argumentos da liña de comandos de usuario ingresaran cando o programa foi executado. Polo tanto, se o seu programa é executar dot cortar ganancioso, e dentro do seu ganancioso programar a súa función principal ten a declaración int main int argc, corda argv corchetes, a continuación, argc, nese caso, é unha delas. Agora conta que non facer contar cantas cousas o usuario introduciu despois do nome do programa. O propio nome do programa conta como un argumento de liña de comandos. Entón dot cortar ganancioso, en Nese caso, é un argc. Se o usuario introduciu barra ganancioso 1024 CS50 na liña de comandos, ARGC, nese caso, sería tres. E sabemos diso porque o camiño que a división entre as cordas é ser detectada existe un espazo, ou unha ficha ou algo así entre eles. Así, calquera cantidade de espazo baleiro, así chamado, entre os valores tecleados de liña de comandos indica cantas existen. Entón dot cortar espazo ganancioso 1.024 espazo CS50, argc, nese caso, é de tres. Argv é o vector de argumento. Vector, por certo, non é máis que outra palabra para unha matriz, e isto é unha matriz que almacena cordas. Unha secuencia de caracteres elemento, que é as cadeas de caracteres que o usuario realmente ingresaran na liña de comandos cando o programa foi executado. Agora, como é o caso con calquera array, se lembrar da nosa discusión de matrices, o primeiro elemento de argv sempre vai atopar en argv paréntese cero. Ese é o primeiro índice da matriz argv. Así que will-- e, de feito, que a vontade ser sempre o nome do programa, será sempre situado no argv paréntese cero. O último elemento de argv sempre atopou en argv cadrado corchetes argc menos un. Entender por que? Teña en conta que de cantos elementos existen nesta matriz. Ben, nós sabemos que é que-- argc número de elementos. Se o usuario introduciu tres cousas á a liña de comandos, argc é tres. Senón porque en c, cando estamos a traballar con matrices, cada elemento da matriz, ou mellor, os índices de a matriz, comezan en cero. Se temos tres elementos na nosa array, temos un elemento en argv cero, un elemento en argv un, e un elemento en argv dous. Non hai ningún elemento en argv tres, e unha matriz de tamaño tres. É por iso que a última elemento de argv poderá pode atopar na Praza argv argc soportes menos un. Entón imos supor que as executa usuario o programa ganancioso como follows-- se escribir na liña de comandos dot cortar ganancioso espazo 1,024 espazo CS50, e por calquera motivo temos xa preparado o noso programa ganancioso de coñecer e traballar con estes liña de comandos argumentos. Non fixo anteriormente cando traballabamos nel ao problema ganancioso, pero imos dicir que temos agora modificado Lo para que nós facemos proceso os argumentos da liña de comandos de algunha maneira. Neste caso, de cero argv é barra dot ganancioso. ¿Que é un argv? Ben, é de 1024, non? É 1024, pero aquí está unha distinction-- realmente importante se lembra do tipo de argv datos? El almacena secuencias, non? Pero parece que 1024 é un valor enteiro. Este é realmente un importante distinción, e é, de feito, vai facer algo que pode atopar en problemas posteriores. Todo en argv é almacenado como unha cadea. Así contido dun argv son o secuencia un, cero, dous, catro, composta polos catro personaxes. É coma se o usuario introduciu un, cero, dous, catro como letras individuais ou caracteres. Non é o número enteiro 1024, e por iso non pode directamente traballar con el dicindo int 1000, ou no canto int x é igual a un menos 24 argv. Intuitivamente, pode pensar que como, OK, ben, é 1024 menos 24, de xeito que x é igual a 1,000. Pero, en realidade, iso non é o caso, porque argv é un cadea. A secuencia de 1024. Agora, hai unha función que se pode usado para converter secuencias de números enteiros. Non vou desperdicialas la para ti agora, pero eu estou seguro Zamyla será feliz para falar sobre iso en o paso a paso para un problema futuro. Pero tamén pode atopar problemas como-- escusa me, funcións que faría facelo en referencia 50, se vai para a guía de referencia podes atopar unha función que vai facer esta conversión a vostede. Pero, de novo, no paso a paso un problema para o futuro, Zamyla terá o pracer de dicirlle que a función é o que vai converter secuencia de 1024 a 1024 o número enteiro. Todo ben, entón seguir adiante. Nós Cubrimos a nosa cero, argv, nós Cubrimos argv un. O que está en argv dous? CS50. Aquela pode ser bastante auto-explicativo. O que está en argv tres? Ben, de novo, nós realmente non sei, non? Temos unha matriz de tamaño tres, é así que moitos elementos do usuario ingresaran na liña de comandos, polo que se imos a argv tres, agora estamos superando os límites da nosa matriz. O compilador vai deixar-nos facelo, non hai ningún problema intuitiva con el, pero en termos de realmente o que está pasando a acontecer, nós realmente non sabemos. Depende do que é situado na memoria onde argv tres sería esperado para ser. E así poderiamos acabar estar lonxe scot libre. Máis probable que non, sobre todo cando se está a traballar con argv en oposición para calquera outra matriz que está no noso programa, nós probablemente vai sufrir un fallo de segmento. Entón, de novo, ser-se de non superar os límites das súas matrices, particularmente argv, dado o seu elevado grao de importancia nos seus programas. Eu son Doug Lloyd. Este é CS50.