>> [Přehrávání hudby]
>> DOUG LLOYD: Dobře, tak pojďme mluvit o argumenty příkazového řádku.
Tak, tak daleko v průběhu docela hodně všech vašich programů
pravděpodobně zahájena jako tohle-- int main prázdnoty.
Byli jsme sbírání Uživatel vstup, pokud ji potřebujeme
v našich programech, jako je například Program Mario, například,
in-programu výzev.
Ještě jsme potřebovali upravit prohlášení o hlavních,
protože místo uvnitř hlavní my jen říct, můžete volat to dostat int.
Jak velké chcete pyramida být?
Nebo můžete zavolat k získání float-- jak velké změny
měl výstup I pro uživatele?
>> K dispozici je další způsob, i když, a pokud chceme našim uživatelům
aby bylo možné poskytnout data do našeho programu
při běhu namísto chvíli program běží,
jemný rozdíl, ale někdy velmi užitečná jedním,
Potřebujeme novou formu prohlásit hlavní.
Nemůžeme použít int main prázdno, pokud chceme shromažďovat další data na příkazovém řádku
když uživatel spustí program, tím i argumenty příkazového řádku.
>> Sbírat tyto příkazového řádku argumenty od uživatele,
změnit prohlášení Hlavním vypadat jako tohle-- int
Hlavní, otevřené paren, int argc, čárka, string argv, hranaté závorky,
a pak otevřete složená závorka.
Tak co to znamená už?
No, my se kolem ve dvou parametrech, nebo argumenty, nebo vstupy do hlavní.
Jeden z nich, celé číslo s názvem argc, a druhý je co?
Je to pole řetězců, že jo?
Vidíme, že hranaté závorky notace.
Je to pole řetězců.
Není to individuální řetězec, je to pole řetězců.
A tyto dva argumenty, argc a argv, vám umožní vědět, co dat uživatelské
poskytl na příkazovém řádku a jak mnoho
pokud na příkazovém řádku.
Docela užitečné věci s ním pracovat.
>> Argc představuje počet argumentu, a měli byste vědět, mimochodem,
že byste mohli zavolat argc co budete chtít.
Můžete volat argv, co jste chtěli.
To jsou jen konvenční jména že jsme se použít pro them-- počet argumentu,
a jak uvidíme v druhé, Argument vektoru, argv.
Ale nemusíte je nazývat argc a argv, pokud nechcete,
ale konvenčně, to je to, co děláme.
>> Tak jako tak, argc, hrabě argument.
Je to celé číslo typu proměnné, a tak, jak je se dalo očekávat, pokud budeme mít dvě věci
že budeme třeba najít out, co to jsou zadány
a kolik vycpat uživatel napsal, argc je
bude nám říct, jak moc nacpat uživatele zadaný.
Tak to vám dává řadu argumenty příkazového řádku uživatel
zadali, když byl popraven programu.
Takže pokud je váš program spustit tečka lomítko chamtivý,
a uvnitř váš chamtivý naprogramovat hlavní funkce
má prohlášení int main int argc, string argv hranaté závorky, pak
argc v tomto případě je jeden.
Teď si všimnout my ne Spočítejte, kolik věcí
uživatel napsal za jménem programu.
Jméno Samotný program počítá jako argument příkazového řádku.
>> Takže dot lomítko chamtivý, v že případ, argc je jeden.
Pokud uživatel napsal lomítko chamtivý 1024 CS50 na příkazovém řádku, argc v tomto případě
by měly být tři.
A víme, že to proto, že způsob, jakým že rozdíl mezi strunami
se detekuje, zda tam je prostor, nebo karta,
nebo něco podobného, ​​že mezi nimi.
Takže jakékoli množství bílé místo, takzvané, mezi hodnotami zadali příkazového řádku
ukazuje, kolik jich je.
Takže dot lomítko chamtivý prostory v lukrativní 1024 prostor CS50, argc, v tomto případě, je tři.
>> Argv je argument vektor.
Vector, mimochodem, je jen jiné slovo pro pole,
a to je pole která ukládá řetězce.
Jeden řetězec za prvek, který je řetězce, že uživatel skutečně
zadali na příkazovém řádku když se vykonávání programu.
Nyní, stejně jako v případě s jakýmkoliv pole, pokud jste
vzpomínám z naší diskuse o pole, první prvek argv
je vždy bude nalezen na argv hranatých závorkách nulové.
To je první index z argv pole.
Takže will-- a ve skutečnosti, že vůle Vždy být název programu,
bude vždy umístěn na argv hranatou závorku nula.
>> Posledním prvkem argv se vždy našel na argv hranatých závorkách argc mínus jedna.
Vidíte, proč?
Vzpomeňte si, jak mnoho prvků vyskytujících se na tomto poli.
No, víme, že je to that-- argc počet prvků.
Pokud uživatel napsal tři věci na příkazového řádku, argc je tři.
Ale protože v c, když pracujeme s poli, každý prvek pole,
nebo spíše indexy pole, začínají nulou.
Pokud budeme mít tři prvky v naší pole, máme prvek na argv nula,
prvek na argv jednom, a prvek na argv dva.
Neexistuje žádný prvek v argv tři, a řadu velikosti tři.
Takže to je důvod, proč poslední prvek argv může vždy
lze nalézt na argv náměstí držáky argc mínus jedna.
>> Takže pojďme se předpokládat, že Uživatel provede chamtivý programu jako follows--
pokud zadejte do příkazového řádku dot lomítko chamtivý prostor 1024 prostor CS50,
a z jakéhokoli důvodu máme již připraven náš chamtivý programu
poznat a pracovat s nimi argumenty příkazového řádku.
Udělali jsme to dříve, když jsme pracovali na ní chamtivý problému,
ale řekněme, že jsme nyní upraven to tak, že my proces
příkazového řádku argumenty nějakým způsobem.
V tomto případě, argv nula je tečka lomítko chamtivý.
Co je argv z nich?
No, je to 1024, ne?
Je to 1024, ale tady je to opravdu důležité distinction--
Vzpomínáte si na datový typ argv?
>> Ukládá řetězců, že jo?
Ale vypadá to, že 1024 je celé číslo.
To je opravdu důležité rozdíl, a je vlastně
stane něco, co vás se mohou vyskytnout v dalších problémů.
Vše v argv je uloženy jako řetězec.
Takže obsah argv něčí jsou string jedním, nula, dvě, čtyři,
skládající se z těchto čtyř znaků.
Je to, jako by zadali uživatel jedním, nula, dvě, čtyři
as jednotlivými písmeny nebo znaky.
Není to celé číslo 1.024, a proto nelze přímo
pracovat s ním tím, že říká int 1000, nebo spíše int x rovná argv jeden minus 24.
>> Intuitivně, možná si myslíte o tom as, OK, no to je 1024 minus 24,
takže x se rovná 1,000.
Ale ve skutečnosti, že to není tento případ, protože argv jeden je řetězec.
Řetězec 1024.
Nyní je funkce, která může být slouží k převodu řetězců na celá čísla.
Nebudu zkazit to pro vás teď, ale jsem si jistý, Zamyla
Bude rád, že ti o tom v návod pro budoucí problém.
Ale můžete také najít Problémy s jako-- výmluva
mi, že by funkce to udělat v odkazu 50,
pokud jdete do referenční příručky najdete funkci, která
bude tento převod za vás.
Ale opět, v průvodci pro budoucí problém,
Zamyla rádi ti, co funkce
to je, že se převádějí string 1024 na celé číslo 1024.
>> Dobře, tak dál.
Jsme probrali naše argv nulu, jsme probrali argv jeden.
Co je v argv dvěma?
CS50.
Že jeden je pravděpodobně docela samo-vysvětlující.
Co je v argv tři?
No opět, my opravdu nevím, že jo?
Máme pole o velikosti tři, to je, jak mnoho prvků uživatele
zadali na příkazovém řádku, takže když jsme šli do argv tři,
Nyní překročení meze naší pole.
Kompilátor bude nám to, není intuitivní problém s tím,
ale pokud jde o skutečně co se děje se tak stalo, jsme opravdu nevím.
Záleží na tom, co je se nachází na paměti, kde
argv tři by se očekávat, že bude.
A tak bychom mohli skončit dostat pryč scot zdarma.
Více než pravděpodobné, zvláště když pracujete s argv jako protiklad
k jinému poli to je v našem programu,
budeme pravděpodobně bude trpět chyba segmentace. Takže znovu,
Dbejte na to, aby nepřekročil meze ze svých polí, zejména argv,
vzhledem k jeho vysokému stupni význam ve svých programech.
>> Jsem Doug Lloyd.
To je CS50.