>> [Speel van musiek]
>> DOUG LLOYD: Alle reg, so laat praat oor command-line argumente.
So, tot dusver in die kursus mooi veel van al jou programme
het waarskynlik begin soos this-- int main nietig.
Ons het al die invordering toevoer van die gebruiker as ons dit nodig het
in ons programme, soos die Mario program, byvoorbeeld,
deur in-program aanwysings.
Ons het nie nodig om te verander die verklaring van die belangrikste,
want in plaas van die belangrikste wat ons in net sê, kan jy dit noem om int kry.
Hoe groot wil jy die piramide te wees?
Of jy kan noem dit te kry float-- hoeveel verandering
sou ek uitset na die gebruiker?
>> Daar is nog 'n manier om al, en as ons wil ons gebruikers
in staat wees om voorsiening te maak data om ons program
tydens looptyd plaas van, terwyl die program word uitgevoer,
'n subtiele onderskeid, maar soms 'n baie nuttige een
Ons moet 'n nuwe vorm van verklaar belangrikste.
Ons kan nie gebruik int main nietig indien ons wil ander data in te samel by die opdrag-lyn
wanneer die gebruiker die program, vandaar opdrag-lyn argumente.
>> Om hierdie opdrag-lyn te samel argumente van die gebruiker,
verander jou verklaring van hoof te lyk soos this-- int
hoof, oop hakie, int argc, komma, string argv, vierkantige hakies,
en dan oop krullerige brace.
So wat beteken dit al?
Wel, ons is verby in twee parameters, of argumente, of insette na.
Een, 'n heelgetal genoem argc, en die ander is wat?
Dit is 'n verskeidenheid van snare, reg?
Ons sien dat vierkante hakienotasie.
Dit is 'n verskeidenheid van snare.
Dit is nie 'n individu string, dit is 'n verskeidenheid van snare.
En hierdie twee argumente, argc en argv, in staat stel om te weet wat die gebruiker data
voorsien het by die opdrag-lyn en hoe baie dinge hulle
wat aan die opdrag-lyn.
Pretty nuttige dinge om te werk met.
>> Argc staan ​​vir argument tel, en jy moet weet, op die pad,
dat jy kan noem argc alles wat jy wil hê.
Jy kan alles wat jy wou argv noem.
Dit is net 'n konvensionele name wat ons gebruik vir them-- argument tel,
en soos ons sal sien in 'n tweede, argument vektor, argv.
Maar jy hoef nie om hulle te bel argc en argv as jy nie wil nie,
maar konvensioneel, dit is wat ons doen.
>> So anyway, argc, die telling argument.
Dit is 'n heelgetal-tipe veranderlike en so, soos jy kan verwag, as ons twee dinge
dat ons gaan om te vind uit te vind wat dit is getik
en hoeveel dinge die gebruiker getik, argc is
gaan om ons te vertel hoeveel stop die gebruiker getik.
So dit gee jou 'n aantal opdrag-lyn argumente gebruiker
getik wanneer die program uitgevoer word.
So as jou program is hardloop dot streep gulsig,
en binnekant van jou gulsig Programmeer jou hooffunksie
het die verklaring int main int argc, string argv vierkantige hakies, dan
argc in daardie geval is een.
Nou sien ons dit nie doen nie tel hoeveel dinge
die gebruiker getik na die naam program.
Die naam program self tel as 'n opdrag-lyn argument.
>> So dot streep gulsig, in daardie geval, argc is een.
As die gebruiker getik slash gulsig 1024 CS50 by die opdrag-lyn, argc in daardie geval
sou drie wees.
En ons weet dit omdat die pad dat die skeiding tussen die snare
bespeur is of daar is 'n ruimte, of 'n blad,
of iets soos dit tussen hulle.
So 'n bedrag van wit spasie, sogenaamde, tussen die waardes getik opdrag-lyn
dui aan hoeveel daar is.
So dot streep gulsige ruimte ruimte 1024 CS50, argc, in daardie geval, is drie.
>> Argv is die argument vektor.
Vektor, op die pad, is net 'n ander woord vir 'n skikking,
en dit is 'n skikking wat winkels snare.
Een string per element, wat die snare wat die gebruiker eintlik
getik by die opdrag-lyn Wanneer die program uitgevoer is.
Nou, as dit die geval is met enige skikking, as jy
onthou van ons bespreking van skikkings, die eerste element van argv
is altyd iets te vinde op argv vierkante bracket nul.
Dit is die eerste indeks van die argv skikking.
Sodat will-- en in werklikheid, dit sal die naam van die program altyd,
sal altyd geleë op argv vierkante bracket nul.
>> Die laaste element van argv is altyd op argv vierkantige hakies argc minus een.
Sien jy hoekom?
Onthou hoeveel elemente bestaan ​​in hierdie reeks.
Wel, ons weet dit is that-- argc aantal elemente.
As die gebruiker drie dinge getik die opdrag-lyn, argc is drie.
Maar omdat in c, wanneer ons werk met skikkings, elke element van die skikking,
of eerder die indekse van die skikking, begin by nul.
As ons drie elemente in ons skikking, ons het 'n element by argv nul,
'n element by argv een en 'n element by argv twee.
Daar is geen element by argv drie en 'n verskeidenheid van grootte drie.
So dit is waarom die laaste element van argv kan altyd
gevind word by argv vierkante hakies argc minus een.
>> So laat ons veronderstel die gebruiker voer hulle die gulsige program as follows--
as hulle tik in die opdrag-lyn dot streep gulsige ruimte 1024 ruimte CS50,
en om watter rede ons het reeds ons gulsig program voorberei
om te weet en te werk met hierdie opdrag-lyn argumente.
Ons het nie voorheen toe ons gewerk op dit vir die gulsige probleem
maar laat ons sê ons het nou verander dit so dat ons die proses te doen
die opdrag-lyn argumente in een of ander manier.
In hierdie geval, argv nul is dot streep gulsig.
Wat is argv een?
Wel, dit is 1024, reg?
Dit is 1024, maar hier is 'n werklik belangrik distinction--
onthou jy die data tipe argv?
>> Dit slaan snare, reg?
Maar dit lyk asof 1024 'n heelgetal waarde.
Dit is 'n baie belangrike onderskeid, en is eintlik
gaan iets geword dat jy kan teëkom in later probleme.
Alles in argv is gestoor as 'n string.
So argv mens se inhoud is die string een, nul, twee, vier,
bestaande uit die vier karakters.
Dit is asof die gebruiker getik een, nul, twee, vier
as individuele briewe of karakters.
Dit is nie die heelgetal 1024, en so kan jy nie direk
werk met dit deur te sê int 1000, of eerder int x is gelyk aan een argv minus 24.
>> Intuïtief, kan jy dink van daardie as, OK, goed dit is 1024 minus 24,
so x is gelyk aan 1000.
Maar in werklikheid, dit is nie die geval nie, omdat argv een is 'n string.
Die string 1024.
Nou is daar 'n funksie wat gebruik kan word gebruik om snare te skakel na heelgetalle.
Ek sal nie bederf dit vir jou nou, maar ek is seker Zamyla
sal gelukkig wees om jou te vertel oor dit in die walkthrough vir 'n toekomstige probleem.
Maar jy kan ook vind probleme like-- verskoning
My funksies wat sou doen dit in die verwysing 50,
as jy gaan na die verwysing gids jy kan 'n funksie vind dat
sal hierdie omskakeling maak vir jou.
Maar weereens, in die walkthrough vir 'n toekomstige probleem
Zamyla sal gelukkig wees om jy watter funksie vertel
Dit is wat sal omskep die string 1024 om die heelgetal 1024.
>> Alle reg, sodat beweeg op.
Ons het ons argv nul gedek, ons het gedek argv een.
Wat is in argv twee?
CS50.
Dat 'n mens is waarskynlik nogal selfverduidelikend.
Wat is in argv drie?
Weer goed, ons weet nie regtig nie, reg?
Ons het 'n verskeidenheid van grootte drie dit is hoe baie elemente van die gebruiker
getik by die opdrag-lyn, so as ons na drie argv,
ons nou te ver die grense van ons verskeidenheid.
Die samesteller sal laat ons dit doen, daar is geen probleem met dit intuïtief,
maar in terme van die werklikheid wat gaan gebeur, het ons nie regtig weet.
Dit hang af van wat is geleë op die geheue waar
argv drie verwag sou word om te wees.
En so kan ons uiteindelik wegkom skotvry.
Meer geneig as nie, veral wanneer jy werk met argv teenstelling
aan enige ander array dit is in ons program,
ons is waarskynlik gaan om te ly 'n segmentering skuld. So weer,
Maak seker om nie die grense oorskry jou skikkings, veral argv,
gegewe sy hoë mate van belangrikheid in jou programme.
>> Ek is Doug Lloyd.
Dit is CS50.