[RIPRODUZIONE DI BRANI MUSICALI] DOUG LLOYD: Va bene, quindi cerchiamo di parlare di argomenti della riga di comando. Così, finora nel corso pretty gran parte tutti i programmi probabilmente hanno iniziato come questo-- int void main. Abbiamo raccogliendo l'input dell'utente, se ne abbiamo bisogno nei nostri programmi, come la Mario programma, per esempio, da prompt in programma. Non abbiamo bisogno di modificare la dichiarazione di principale, perché invece dentro di noi principale solo che, si può chiamare per ottenere int. Quanto grande vuoi la piramide di essere? Oppure si può chiamare per ottenere float-- quanto cambiamento dovrei output per l'utente? C'è un altro modo, però, e se vogliamo che i nostri utenti essere in grado di fornire dati al nostro programma in fase di esecuzione anziché mentre il programma è in esecuzione, una distinzione sottile ma talvolta molto utile, abbiamo bisogno di una nuova forma di dichiarazione principale. Non possiamo usare int void main se vogliamo raccogliere altri dati a riga di comando quando l'utente esegue il programma, quindi gli argomenti della riga di comando. Per raccogliere questi riga di comando argomenti da parte dell'utente, modificare la dichiarazione di principale a guardare come questo-- int principali, paren aperti, int argc, virgola, stringa argv, parentesi quadre, e quindi aprire parentesi graffa. Quindi, che cosa significa già? Beh, stiamo passando a due parametri, o argomenti, o ingressi principale. Uno, un intero chiamato argc, e l'altro è quello che? Si tratta di un array di stringhe, giusto? Vediamo che la notazione parentesi quadra. Si tratta di un array di stringhe. Non è una stringa individuale, si tratta di un array di stringhe. E questi due argomenti, argc e argv, consentono di sapere quali dati dell'Utente ha fornito alla riga di comando e quante cose fornito al-riga di comando. Cose molto utile con cui lavorare. Argc sta per numero di argomenti, e si dovrebbe sapere, tra l'altro, che si potrebbe chiamare argc quello che vuoi. È possibile chiamare argv tutto quello che volevamo. Questi sono i nomi solo convenzionali che usiamo per them-- numero di argomenti, e come vedremo in un secondo, argomento vettore, argv. Ma non c'è bisogno di chiamarli argc e argv se non si vuole, ma convenzionalmente, questo è quello che facciamo. Comunque, argc, il numero di argomenti. Si tratta di una variabile intera di tipo e così, come ci si potrebbe aspettare, se abbiamo due cose che stiamo andando a trovare che cosa questi vengono digitati e quanta roba la utente ha digitato, argc è andando a dirci quanto roba l'utente ha digitato. Così ti dà un certo numero di utente argomenti della riga di comando digitato quando il programma è stato eseguito. Così, se il programma è eseguire puntino tagliare avidi, e all'interno della vostra goloso programmare il vostro funzione principale ha la dichiarazione int int main argc, stringa argv parentesi quadre, quindi argc in questo caso è uno. Ora notiamo noi no contare quante cose l'utente ha digitato dopo il nome del programma. Il nome del programma in sé conta come un argomento della riga di comando. Così dot tagliare avidi, in questo caso, argc è uno. Se l'utente ha digitato barra avido 1024 CS50 alla riga di comando, argc in quel caso sarebbe tre. E noi sappiamo perché il modo in cui che la divisione tra le corde viene rilevato è se vi è uno spazio o una scheda, o qualcosa di simile tra di loro. Quindi, qualsiasi quantità di spazio bianco, cosiddetto, tra i valori digitato da riga di comando indica quanti ce ne sono. Così dot tagliare spazio goloso 1024 spazio CS50, argc, in questo caso, è di tre. Argv è l'argomento vettore. Vettore, tra l'altro, è solo un'altra parola per un array, e questo è un array che memorizza le stringhe. Una corda per elemento, che è le stringhe che l'utente effettivamente digitato la riga di comando quando il programma è stato eseguito. Ora, come è il caso con qualsiasi array, se ricorderete dalla nostra discussione array, il primo elemento di argv sta andando sempre da trovare a argv piazza staffa a zero. Questo è il primo indice dell'array argv. Sicché will-- ed infatti, che la volontà sempre il nome del programma, sarà sempre situato argv parentesi quadra zero. L'ultimo elemento di argv è sempre trovato a argv parentesi quadre argc meno uno. Capite perché? Ricordate come molti elementi esistono in questo array. Beh, sappiamo che è che-- Numero argc di elementi. Se l'utente ha digitato tre cose a la riga di comando, argc è tre. Ma perché in c, quando stiamo lavorando con array, ogni elemento della matrice, ovvero gli indici di la matrice, iniziare da zero. Se abbiamo tre elementi in nostro array, abbiamo un elemento di argv pari a zero, un elemento di argv uno, ed un elemento a argv due. Non vi è alcun elemento a argv tre, e una serie di tre dimensioni. Ecco, questo è il motivo per cui l'ultimo elemento di argv può sempre sono disponibili all'indirizzo argv piazza staffe argc meno uno. Quindi supponiamo che le esegue utente il programma avido come follows-- se si digita il punto della riga di comando tagliare avido spazio 1024 spazio CS50, e per qualsiasi motivo abbiamo già preparato il nostro programma di avido di conoscere e lavorare con questi argomenti della riga di comando. Non abbiamo fatto in precedenza quando abbiamo lavorato su di esso per il problema avidi, ma diciamo che ora abbiamo modificato in modo che facciamo processo gli argomenti della riga di comando, in qualche modo. In questo caso, lo zero argv è barra dot avidi. Qual è argv uno? Beh, e '1024, giusto? Si tratta di 1024, ma qui è un veramente importante distinction-- vi ricordate il tipo di dati di argv? Memorizza stringhe, giusto? Ma sembra che 1024 è un valore intero. Questo è un molto importante distinzione, ed è in realtà andando a diventare qualcosa che si potrebbe incontrare problemi successivi. Tutto in argv è memorizzato come una stringa. Così il contenuto di uno argv sono il stringa di uno, zero, due, quattro, costituita da quei quattro caratteri. E 'come se l'utente ha digitato uno, zero, due, quattro come singole lettere o caratteri. Non è il numero intero 1024 e così non si può direttamente lavorare con esso dicendo int 1000, o piuttosto int x è uguale a meno uno argv 24. Intuitivamente, si potrebbe pensare di quel come, OK, bene è 1.024 meno 24, quindi x è pari a 1.000. Ma in realtà, che non è il caso, perché argv uno è una stringa. La stringa 1024. Ora c'è una funzione che può essere utilizzato per convertire le stringhe in numeri interi. Non voglio rovinare per voi ora, ma sono sicuro Zamyla saranno lieti di raccontarvi in la procedura dettagliata per un problema futuro. Ma si possono anche trovare problemi like-- scusa me, funzioni che avrebbe fate questo in riferimento 50, se si va per la guida di riferimento è possibile trovare una funzione che renderà questa conversione per te. Ma ancora una volta, nel walkthrough per un futuro problema, Zamyla sarà felice di voi quale funzione dire è che convertirà la stringa 1024 all'intero 1024. Va bene, così andare avanti. Abbiamo coperto il nostro a zero argv, abbiamo trattato argv uno. Cosa c'è in argv due? CS50. Quello è probabilmente piuttosto auto-esplicativo. Cosa c'è nella argv tre? Bene ancora una volta, noi non conosciamo veramente, giusto? Abbiamo una vasta gamma di dimensioni tre, è così che molti elementi l'utente digitato la riga di comando, quindi se andiamo a argv tre, ora stiamo superamento i limiti della nostra matrice. Il compilatore ci permetterà di fare questo, non c'è nessun problema intuitivo con esso, ma in termini di realtà ciò che sta succedendo per accadere, noi non lo sappiamo. Dipende da ciò che è situato alla memoria in cui argv tre ci si aspetta di essere. E così potremmo finire allontanarsi scot libero. Più probabile che no, soprattutto quando si sta lavorando con argv al contrario a qualsiasi altra matrice che è nel nostro programma, stiamo probabilmente andando a soffrire un segmentation fault. Quindi, di nuovo, Fare attenzione a non oltrepassare i limiti di array, particolarmente argv, dato il suo elevato grado di importanza nei vostri programmi. Sono Doug Lloyd. Questo è CS50.