[Musik spiller] DOUG LLOYD: Okay, så lad os taler om kommandolinje-argumenter. Så indtil videre i løbet temmelig meget alle dine programmer har sikkert begyndt ligesom denne-- int main tomrum. Vi har været at indsamle brugerinput, hvis vi har brug for det i vores programmer, såsom Mario program, for eksempel af in-program prompter. Vi har ikke nødvendigt at ændre erklæringen om vigtigste, fordi i stedet inde i vigtigste, vi bare sige, du kan kalde det for at få int. Hvor stor vil du have pyramiden være? Eller du kan kalde det for at få float-- hvor meget forandring skal jeg output til brugeren? Der er en anden måde selv, og hvis vi ønsker, at vores brugere at kunne tilvejebringe data til vores program på runtime i stedet for, mens programmet kører, en subtil forskel, men undertiden en meget nyttig, vi har brug for en ny form for erklære vigtigste. Vi kan ikke bruge int main ugyldige, hvis vi ønsker at indsamle andre data på kommandolinjen når brugeren kører programmet, dermed kommandolinjeargumenter. At indsamle disse kommandolinjen argumenter fra brugeren, ændre din erklæring om vigtigste at ligne denne-- int vigtigste, åbne parentes, int argc, komma, string argv, kantede parenteser, og derefter åbne krøllet tandbøjle. Så hvad betyder det allerede? Nå, vi passerer i to parametre, eller argumenter, eller input til vigtigste. One, et helt tal kaldes argc, og den anden er hvad? Det er en bred vifte af strenge, ikke? Vi ser, at firkantede beslag notation. Det er en bred vifte af strenge. Det er ikke en individuel streng, Det er en bred vifte af strenge. Og disse to argumenter, argc og argv, gøre det muligt for dig at vide, hvilke data brugeren har givet på kommandolinjen og hvor mange ting, de leveres på kommandolinjen. Temmelig nyttige ting at arbejde med. Argc står for argument tæller, og du skal vide, ved den måde, at man kunne kalde argc uanset hvad du ønsker det. Du kan ringe til argv hvad du ville. Disse er blot konventionelle navne som vi bruger til them-- argument tæller, og som vi vil se i en anden, argument vektor, argv. Men du behøver ikke at kalde dem argc og argv, hvis du ikke vil, men konventionelt, det er hvad vi gør. Så alligevel, argc, argumentet tæller. Det er et heltal-typen variabel og så, som man kunne forvente, hvis vi har to ting at vi kommer til at være at finde ud af, hvad disse er indtastet og hvor meget stuff bruger skrevet, argc er vil fortælle os, hvor meget kram brugeren har skrevet. Så det giver dig en række kommandolinjeargumenter bruger indtastet, da programmet blev henrettet. Så hvis dit program er køre prik skråstreg grådige, og indersiden af ​​din grådige programmere din vigtigste funktion har erklæringen int vigtigste int argc, snor argv firkantede parenteser, så argc i dette tilfælde er en. Nu opdager vi ikke tælle, hvor mange ting brugeren har skrevet efter navnet programmet. Programnavnet selv tæller som en kommando-linje argument. Så dot skråstreg grådige, i så fald argc er én. Hvis brugeren har skrevet skråstreg grådige 1024 CS50 på kommandolinjen, argc i dette tilfælde ville være tre. Og vi ved dette, fordi den måde, at opdelingen mellem strengene detekteres, om der er et mellemrum, eller en fane, eller sådan noget mellem dem. Så enhver mængde hvidt rum, såkaldte, mellem værdierne indtastet kommando-linje angiver, hvor mange der er. Så dot skråstreg grådige plads 1024 plads CS50, argc, i dette tilfælde, er tre. Argv er vektoren argument. Vector, ved den måde, er bare et andet ord for et array, og dette er et array der gemmer strenge. En streng pr element, som er strengene at brugeren rent faktisk indtastes på kommandolinjen da programmet blev henrettet. Nu som det er tilfældet med enhver matrix, hvis du husker fra vores diskussion af arrays, det første element i argv vil altid findes ved argv firkantet beslag nul. Det er den første indeks af argv array. Således at will-- og i virkeligheden, vil altid være navnet på programmet, vil altid være placeret på argv firkantede beslag nul. Det sidste element i argv er altid fundet ved argv firkantet parentes argc minus en. Kan du se hvorfor? Husk, hvor mange elementer findes i denne række. Tja, vi ved at-- det er argc række elementer. Hvis brugeren har skrevet tre ting på kommandolinjen, argc er tre. Men fordi i C, når vi arbejder med arrays, hvert element i array, eller rettere indeksene for array, starter ved nul. Hvis vi har tre elementer i vores array, har vi et element på argv nul, et element på argv én, og et element i argv to. Der er ingen elementer i argv tre, og en bred vifte af størrelse tre. Så det er derfor det sidste element i argv kan altid findes på argv firkantet parentes argc minus en. Så lad os antage brugeren Udfører den grådige program follows-- hvis de skriver i kommandolinjen prik skråstreg grådige plads 1024 plads CS50, og uanset af hvilken grund vi har allerede forberedt vores grådige program at kende og arbejde med disse kommandolinjeargumenter. Vi gjorde ikke tidligere, da vi arbejdede på det for den grådige problem, men lad os sige, vi har nu ændret det, så vi gør processen de kommandolinje-argumenter i nogle måde. I dette tilfælde, argv nul er dot skråstreg grådige. Hvad er argv en? Tja, det er 1024, ikke? Det er 1024, men her er en virkelig vigtigt distinction-- husker du datatypen for argv? Den gemmer strygere, ikke? Men det ligner 1024 er en heltalsværdi. Dette er en virkelig vigtig forskel, og er faktisk kommer til at blive noget, som du kan komme i senere problemer. Alt i argv er lagres som en streng. Så argv ens indholdet er det string én, nul, to, fire, bestående af de fire karakterer. Det er som om brugeren har indtastet en, nul, to, fire som enkelte bogstaver eller tegn. Det er ikke det hele tal 1024, og så kan du ikke direkte arbejde med det ved at sige int 1000, eller snarere int x lig argv én minus 24. Intuitivt, kunne man tro på, at som, OK, godt det er 1.024 minus 24, så x er lig med 1.000. Men i virkeligheden, det er ikke tilfældet, fordi argv ene er en streng. Strengen 1024. Nu er der en funktion, der kan være anvendes til at konvertere strenge til heltal. Jeg vil ikke ødelægge det for dig nu, men jeg er sikker på Zamyla vil være glade for at fortælle dig om det i walkthrough for en fremtidig problem. Men du kan også finde problemer like-- undskyldning mig, funktioner, der ville gøre dette i henvisning 50, Hvis du går til reference guide du kan finde en funktion, vil gøre denne konvertering for dig. Men igen, i walkthrough for en fremtidig problem, Zamyla vil være glade for fortælle dig, hvad funktion det er, vil konvertere string 1024 til heltal 1024. Okay, så går videre. Vi har dækket vores argv nul, Vi har dækket argv én. Hvad der er i argv to? CS50. At man er nok temmelig selvforklarende. Hvad der er i argv tre? Nå igen, vi ved ikke rigtig, vel? Vi har en bred vifte af størrelse tre, det er, hvor mange elementer brugeren indtastes på kommandolinjen, så hvis vi går til argv tre, vi nu overskride grænserne for vores matrix. Den compiler vil lade os gøre det, der er ikke noget intuitivt problem med det, men i form af faktisk, hvad der foregår til at ske, vi ikke rigtig kender. Det afhænger af, hvad der er placeret på den hukommelse, hvor argv tre ville forventes at være. Og så vi kunne ende komme væk scot gratis. Mere sandsynligt end ikke, især når du arbejder med argv i modsætning til en anden matrix der er i vores program, vi formentlig kommer til at lide en segmentering fejl. Så igen, være sikker på ikke at overskride grænserne af dine arrays, især argv, da de i høj grad af betydning i dine programmer. Jeg er Doug Lloyd. Det er CS50.