>> [MUZIKO Ludante]
>> DOUG LLOYD: Bone, do ni paroli pri komand-linio argumentoj.
Do, ĝis nun en la kurso bela multa ĉiuj viaj programoj
verŝajne komenciĝis kiel this-- int main malplenon.
Ni estis kolektado Uzanta enigo se ni bezonas ĝin
en niaj programoj, kiel ekzemple la Mario programo, ekzemple,
per en-programo instigas.
Ni ne bezonis modifi la deklaro de ĉefa,
ĉar anstataŭ ene de ĉefa ni nur diru, nomu tion atingi int.
Kiom granda vi volas ke la piramido estu?
Aŭ nomu tion atingi float-- kiom ŝanĝo
do mi eligo al la uzanto?
>> Estas alia vojo tamen, kaj se ni volas niajn uzantojn
povi havigi datumoj por nia programo
je ekzekuto anstataŭ dum la programo kuras,
subtila distingo sed foje tre utila,
Ni bezonas novan formon de deklarante ĉefa.
Ni ne povas uzi int main malplenon se ni volas kolekti aliajn datumojn ĉe la komandlinion
kiam la uzanto kuras la programon, tial komand-linio argumentoj.
>> Kolekti tiujn komandlinion argumentoj de la uzanto,
ŝanĝi viajn deklaron de ĉefa simili this-- int
ĉefa, malfermita paren, int argc, komo, string argv, rektaj krampoj,
kaj tiam malfermu buklaj krampoj.
Do kion tio signifas jam?
Nu, ni pasas en du parametrojn, aŭ argumentoj, aŭ enigaĵoj al ĉefa.
Unu, entjero nomata argc, kaj la alia estas kio?
Ĝi estas tabelo de kordoj, dekstra?
Ni vidas ke kvadrata krampo skribmaniero.
Ĝi estas tabelo de kordoj.
Ĝi ne estas individuo kordoj, ĝi estas tabelo de kordoj.
Kaj tiuj du argumentoj, argc kaj argv, ebligas vin scii kion datumoj la uzanto
havigis ĉe la komandlinion kaj kiom da aferoj oni
provizita je la komandlinion.
Sufiĉe utila aferoj por labori kun.
>> Argc staras por argumento grafo, kaj vi sciu, cetere,
ke vi povis nomi argc ajn vi volas.
Vi povas nomi argv ajn vi deziris.
Tiuj estas nur konvenciaj nomoj ke ni uzos por them-- argumento grafo,
kaj kiel ni vidos en dua, argumento vektoro, argv.
Sed vi ne devas nomi ilin argc kaj argv se vi ne volas,
sed konvencie, tion ni faros.
>> Do ĉiuokaze, argc, la argumento grafo.
Ĝi estas entjero-tipo variablo kaj tial, vi povus atendi, se ni havas du aferoj
ke ni tuj povas trovi el kio tio estas tajpita
kaj kiom la havajxoj uzanto tajpita, argc estas
tuj rakontos nin kiel multe plenigos la uzanto tajpas.
Do ĝi donas al vi kelkajn komand-linio argumentoj uzanto
tajpita kiam la programo estis ekzekutita.
Do se via programo estas kuri dot oblikvo avida,
kaj ene de via avida plani via ĉefa funkcio
havas la deklaron int ĉefa int argc, string argv kvadrataj krampoj, do
argc en tiu kazo estas unu.
Nun rimarki ni ne kalkuli kiom da aferoj
la uzanto tajpita post la programo nomo.
La programo nomo mem rakontas kiel komandlinion argumento.
>> Do dot oblikvo avida, en Tiukaze, argc estas unu.
Se la uzanto tajpas oblikvo avidaj 1024 CS50 ĉe la komandlinion, argc tiukaze
estus tri.
Kaj ni scias tion ĉar la vojo ke la divido inter la kordoj
estas detektita estas se estas spaco aŭ langeto,
aŭ io simila inter ili.
Do ajna kvanto de blanka spaco, tiel nomita, inter la valoroj tajpita komandlinion
indikas kiom da ekzistas.
Do dot oblikvo avidaj spaco 1024 spaco CS50, argc, en tiu kazo, estas tri.
>> Argv estas la argumento vektoro.
Vektoraj, parenteze, estas nur alia vorto por tabelo,
kaj tio estas tabelo kiu stokas kordoj.
Unu kordo po elemento, kiu estas la kordojn, ke la uzanto reale
tajpita ĉe la komandlinion kiam la programo estis ekzekutita.
Nun, kiel estas la kazo kun ajna tabelo, se vi
memoras de nia diskuto de sensilo, la unua elemento de argv
ĉiam tuj trovebla ĉe argv kvadrata krampo nulo.
Tio estas la unua indico de la argv tabelo.
Por ke will-- kaj fakte, ke volo ĉiam estos la nomo de la programo,
ĉiam estos lokita ĉe argv kvadrata krampo nulo.
>> La lasta ero de argv ĉiam trovita ĉe argv kvadrataj krampoj argc minus unu.
Ĉu vi komprenas kial?
Rememoru kiom da elementoj ekzisti en tiu tabelo.
Nu, ni scias that-- estas argc nombro de elementoj.
Se la uzanto tajpas tri aferojn la komandlinion, argc estas tri.
Sed ĉar en C, kiam ni laboras kun sensilo, ĉiu elemento de la array,
aŭ prefere la indicoj de la tabelo, komenci ĉe nulo.
Se ni havas tri elementoj en nia tabelo, ni havas elementon en argv nulo,
ero ĉe argv unu, kaj elemento en argv du.
Ne estas ero en argv tri, kaj tabelo de grandeco tri.
Do jen kial la lasta elementon de argv povas ĉiam
troveblas ĉe argv kvadrataj krampoj argc minus unu.
>> Do ni supozu la uzanto ekzekutas la avidaj programon kiel follows--
se ili tajpi en la komandlinion skalara oblikvo avidaj spaco 1024 spacon CS50,
kaj ial ajn ni havas jam preparis nian avidaj programo
scii kaj labori kun tiuj komand-linio argumentoj.
Ni faris ne antaŭe kiam ni laboris sur ĝin por la avidaj problemo,
sed diru ni nun modifita ĝi tiel ke ni faru procezo
la komand-linio argumentoj iel.
En tiu kazo, argv nulo estas dot oblikvo avidaj.
Kio argv unu?
Nu, estas 1024, dekstra?
Ĝi estas 1024, sed jen vere grava distinction--
ĉu vi memoras la datumtipo de argv?
>> Ĝi stokas kordoj, dekstra?
Sed ĝi aspektas kiel 1024 estas entjero valoro.
Jen vere grava distingo, kaj estas reale
okazos al iu kiu vi eble renkontos en postaj problemoj.
Ĉio en argv estas stokitaj kiel ŝnuro.
Do argv onia enhavo estas la string unu, nulo, du, kvar,
konsistanta el tiuj kvar karakteroj.
Estas kvazaŭ la uzanto tajpas unu, nulo, du, kvar
kiel individuaj leteroj aŭ karakteroj.
Tio ne estas entjero 1024, kaj tial vi ne povas rekte
labori kun ĝi dirante int 1,000, aŭ prefere int x egalas argv unu minus 24.
>> Intuicie, vi povus pensi de tiu kiel, OK, bone ĝi estas 1.024 minus 24,
tiel x estas egala al 1.000.
Sed fakte, tio ne estas la kazo, ĉar argv unu estas ĉeno.
La kordoj 1024.
Nun tie estas funkcio kiu povas esti uzita transformi kordojn al entjeroj.
Mi ne difekti ĝin por vi nun, sed mi certas Zamyla
estos feliĉa por diri al vi pri ĝi en la walkthrough por estonta problemo.
Sed vi povas ankaŭ trovi problemoj like-- ekskuzo
Mi, funkcioj kiuj farus fari tion en referenco 50,
se vi iras al la referenco gvidas vi povas trovi funkcio kiu
faros ĉi konvertiĝo por vi.
Sed denove, en la walkthrough por estonta problemo,
Zamyla estos feliĉaj Jen kion funkcio
ĝi estas ke igos la kordo 1024 al la entjero 1024.
>> Bone, do pluiri.
Ni kovris niajn argv nulo, ni kovrita argv unu.
Kio estas en argv du?
CS50.
Tiu estas verŝajne bela memo-klariga.
Kio estas en argv tri?
Nu denove, ni ne vere scias, ĉu ne?
Ni havas tabelo de grandeco tri, jen kiom da elementoj la uzanto
tajpita ĉe la komandlinion, do se ni iras al argv tri,
ni nun overstepping la limojn de nia tabelo.
La tradukilo ni fari tion, ekzistas neniu intuicia problemo kun ĝi,
sed en terminoj de vere kio okazas okazi, ni ne vere scias.
Ĝi dependas sur kio estas lokita en la memoro kie
argv tri estus atendita esti.
Kaj tiel ni povus fini ricevas for Scot libera.
Pli verŝajne ol ne, precipe kiam vi laboras kun argv kontraste
al ajna alia tabelo jen en nia programo,
verŝajne ni suferi segmentación kulpo. Do denove,
Nepre ne transpasante la limojn de via arrays, aparte argv,
donita lia alta grado de graveco en viaj programoj.
>> Mi Doug Lloyd.
Jen CS50.