[Přehrávání hudby] DAVID Malan: Dobře. To je CS50, a to je konec týdne 2. Je mi to tak líto, že jsem nemohl být tam s vámi všechno dnes, ale vy jste ve velmi dobrých rukou. Dovolte mi představit CS50 vlastní Rob Bowden. ROB BOWDEN: A samozřejmě, pak musíme dělat si legraci z faktu že nám poslal vertikální video a ukázat to. [VIDEOPŘEHRÁVÁNÍ] [Přehrávání hudby] [Stopách] -Tento Video ne se dívat takhle. To by bylo možné předejít. Řekni ne na vertikální videa. -Vertikální Videa stane, když vás držet váš fotoaparát na špatnou cestu. Vaše video skončí vypadat jako hovno. - [GRUNT] -Existuje Více a více lidé závislí k tomu, že svislé videa každý den. Není to bezva, nebo nic, ale je to stále opravdu špatné. Existují dva různé druhy lidé, kteří jsou postiženi VVS. První skupina léčí Videa se střílet jako obrazy. Oni neznamenají žádnou škodu. Oni prostě nechápou, že zatímco vy můžete otočit obrázek, můžete opravdu otočit video. [CRASH] - [MONKEY SOUNDS] -The Jiná skupina jsou lidé, kteří nedávají [pípnutí]. -Vertikální Video syndrom je nebezpečné. Filmy mají vždy ve vodorovné poloze. Na pokojích je televize jsou ve vodorovné poloze. Počítačové obrazovky jsou ve vodorovné poloze. Lidské oči jsou ve vodorovné poloze. Nejsme postavena tak, aby sledovat vertikální videa. -I Láska vertikální videa. -Nobody Se stará o vás. -Pokud Tento problém je neřešení, i vy se začne ukazovat čtyři videa najednou jen proto, aby uložit šířku pásma. -Letterboxed Vertikální videa by být velikost poštovní známky. -A To bude šířit všude. Filmové obrazovky mají vždy ve vodorovné poloze. Pokud vertikální videa stanou přijata, kina budou muset být vysoký a hubený. -A Všechny kin by muset dostat zbořen a přestavěn. A v době, kdy byly přestavěny, Mila Kunis by byla stará a ošklivá. -Birds Se zhroutí do nich a zemřít. -We'll Všichni si tuhý krky od vzhlédl. -A Nikdo sedět v přední řadě někdy znovu. -George Lucas bude re-release hvězda Wars again-- hubený vydání. -Byl Jsem nikdy schopen říct příběh, který jsem chtěl říct. To byl velký šanci pro mě experimentovat s novou technologií. -Jsi Trhnout. -Every Time mobilní zařízení se používá k nahrávat video, pokušení je tam. Stačí říct ne. Řekni ne na George Lucase. Řekni ne na staré Mila Kunis. Řekni ne na vertikální videa. -A Když vidíte to někdo dělá, řekněme, "nejste natáčení tu správnou figuríny!" [Přehrávání hudby] [END Přehrávání] [APPLAUSE] [AUDIO OUT] ROB BOWDEN: --simple Forma kryptografie, který je v podstatě šifrování a dešifrování tajných zpráv. Takže tady máme velmi jednoduchou hračku. A tato myšlenka je vnější kroužek se otáčí kolem vnitřního kroužku. A můžete vidět, možná kdybych zoom in, that-- je těžké vidět. Avšak, stejně jako počet 1-- dobře, že se stěhoval. Číslo 1 mapuje na dopis X, číslo 2 mapy do písmene J. velmi složité ne pro přeskok vpřed. Dopis 2 mapuje J. Číslo 3 mapuje D. So s tímto kroužkem můžete dát někdo zprávu 1, 2, 3. Z nějakého důvodu chci jim říct XJD. Ale můžete dát některé zprávy z čísel, a tak dlouho, jak mají tento kroužek, se může dešifrovat, co se snažíte říct. Takže jste mohli vidět to Konkrétním příkladem kryptografie Než-li kolem Vánoc jste sledovali Vánoční příběh. Pokud jste nikdy neviděli to dříve, pak jen zapnout TBS na doslovně kdykoli na Štědrý den, protože oni jen ukázat ho zády k sobě se zády k sobě k sobě celý den. A příslušná video je to. [VIDEOPŘEHRÁVÁNÍ] -BE Je známo, že všechny a různé že Ralph Parker je tímto jmenován členem Little Orphan Annie Secret Circle a má právo na všechny vyznamenání a výhody dochází k němu. Podepsáno Malý sirotek Annie. Spolupodepsán Pierre André inkoustem! Vyznamenání a výhody Již ve věku devíti! [Křičí od rádia] -No tak. Pojďme se do toho. Nepotřebuji všechen ten jazz o pašeráků a pirátů. Poslouchej zítra večer s závěrečná dobrodružství Černé pirátské lodi. Teď je čas na Annie tajnou zprávu pro Vás členové Tajemství kruhu. Pamatujte si, děti pouze členové Annie Secret Circle umí dekódovat Annie tajnou zprávu. Pamatujte si, že Annie závisí na vás. Nastavte si kolíky do B2. Zde je zpráva. 12. 11. 2. -I Jsem ve svém prvním tajné schůzce. -25. 14. 11. 18. 16. Oh, Pierre je ve velkém hlasové večer. Mohl bych říct, že dnes večer se Zpráva byla opravdu důležité. -3. 25. To je zpráva od Annie sama. Pamatujte si, že nikomu to neříkejte. -Five Sekund později, já jsem v jediný místnost v domě, kde chlapec devíti mohli sedět v soukromí a dekódovat. Aha! B! Šel jsem na další. E. První slovo je "být." S. Přicházelo to nyní snazší. U. 25. To je R. No tak, Ralphie! Musím jít! -Budu Hned dolů, Ma! Gee svist. T. O. "Ujistěte se, že" - ujistěte se, že to, co? Co bylo Malý sirotek Annie snaží říct? Ujistěte se, k čemu? -Randy Má jít! Byste prosím vyjít? -Dobře, Mami! Hned jsem venku! Byl jsem stále blíž. Napětí bylo hrozné. Co to bylo? Osud planety může viset na vlásku! -Ralphie, Randy musím jít! -Budu Mít pravdu ven, proboha! Skoro tam! Prsty letěl. Moje mysl byla ocelová past. Každý pórů vibroval. Bylo skoro jasno! Ano. Ano. Ano. Ano. Ujistěte se, že pít Ovaltine. Ovaltine? Mizerná reklama? Ten hajzl. [END Přehrávání] ROB BOWDEN: Tak to je, jak Ovaltine se vztahuje na kryptografii. V podstatě CS50 jen inzeroval Ovaltine, takže jsme mohli Mizerná být reklama pro Ovaltine. Dobře. Takže teď skutečná počítačová věda. Pamatujte si, v pondělí jsme přestali potápění hlouběji do řetězců. Takže jsme se zabývali řetězec "Zamyla." A my jsme se rozpoznávat skutečnost, že můžeme léčit "Zamyla" jako řada znaků. A pamatujte, že jsme se dozvěděli, držák notace. Takže pokud to byly uloženy v řetězci "s", pak pokud bychom řekli s konzola 0, by to uveďte dopis kapitálu Z. A pokud bychom řekli s držák 1, že naznačují první malými písmeny A, a tak dále až do s držákem 5, což by naznačovalo LAST. Nyní si uvědomit, že Délka tohoto řetězce je 6, ale indexy do řetězce jsou 0 až 5, Z přes to trvat. Tak to teď vejde do větší obrázek paměti počítače, paměti RAM. Takže někde program, který vedete svůj počítač je třeba mít na paměti, Zamyla někde v paměti. Takže můžu mít dobrovolníka? Ano prosím. A jak se jmenuješ? Dean: Dean. ROB BOWDEN: Dean? Těší mě, Deane. Tak pojď sem, a budeme muset kreslení na našem pěkném šikovný uspořádání paměti. Teď bych si myslel, paměti jako jeden dlouhý pruh bajtů, ale jen pro účely zobrazení my budeme Jen si zleva doprava, shora dolů. DOBŘE? Takže jsem se ukázat program-- Getstrings.c. A tak všechno je tento program dělá požaduje čtyři řetězce od uživatele s GetString a pak tisk co to jako první řetězec vstoupil byl. Jsme ignorovat dva přes čtyři. DOBŘE. Tak tady, když now-- I první žádost S1. Tak vy jste počítač. A jste se provádí getString. Takže budete požadovat řetězec z mě, a já říkám, v pořádku, Deane. Dejte řetězec "Dean." Takže někde v paměti budete mít na paměti, "Dean." Tak napište ho do paměti někam. Perfektní. DOBŘE. Takže teď jsme se S2. A s2 bude žádost o getString. Takže budu zadat řetězec. Chystám se vstoupit do "Hannah." Tak zadejte "Hannah" někam do paměti. To jo. A-H. OK, tak teď s3. A to bude další požádat getString. A tak nyní zadat "Marii." Dobře. A pak je tu ještě jedna poslední Žádost o getString, S4. Takže, já nevím. Co takhle jdeme s antidisestablishmentarianism. Vstupte proto, že do paměti. To jo. Takže prostě "Rob." DOBŘE. Takže teď explain-- proč necháte tyto prostory? Proč máte toto prázdné prostor tady, tady a tady? Ano. Takže si všimnout, když jdu tisknout s1-- takže pokud Měl běh "Hannah" hned se vedle "Dean" jak víme, kdy řetězec "děkan" končí? Takže tisk řetězec s1, může mít Jen tištěný "DeanHannahMariaRob" pokud to nemá žádné ponětí kdy "Dean" skutečně končí. Dobře. Takže v paměti tak, jak jsme vlastně představují Tento konec řetězce je s zpětné lomítko nula. Takže tento prostor je přesně to, co jsme chtěli. To by mělo být zpětné lomítko nula. To bude zpětné lomítko nula, a to bude zpětné lomítko nula. A můžete mít vynikající cenu za to, že perfektní dobrovolník. Pak se stres míček! DOBŘE. Takže tento znak zpětné lomítko nula Jak jsme se označují konec řetězce. Je to, jak při jakémkoli programu chce vytisknout řetězec, Pamatuji si, že je to how-- jsme se dozvěděli, Funkce strlen minulý týden? Délka řetězce? Je to, jak délka řetězce je schopno určit, jak dlouho je řetězec. Je to prostě pořád iterace přes znaky až se najde zpětná lomítka nulovou charakter. Takže důležité si uvědomit o zpětné lomítko znak nula Je to zastoupena všech nul v bitech. Tak si všimnout, že toto je odlišná od nulového charakteru. Takže znak nula, pokud si vzpomenete V příkladu, který dal na konci přednášky, kde na mapě charaktery to-- jako jsou mapy kapitálu do 65 let. Malá písmena a mapy 97. Malá písmena b by byla 98. Takže číslo 0 mapy to-- vůbec se mi nelíbí znát z vrcholu mé hlavy. 44 nebo 45. Někde v tomto regionu. Takže znak 0 je skutečný počet. Ale zpětné lomítko nula mapy do všech nulových bitů. Takže tam je rozdíl mezi zpětné lomítko nula, který zavoláme null zakončení. Tam je rozdíl mezi zpětné lomítko nula a znak nula. Dobře. Tak mluví o něco více o řetězcích. Takže vidíme, zde je to, jak to by být uloženy v paměti. Takže tato myšlenka řetězců jako sekvence z characters-- takže oficiální počítač sciency termín pro posloupnost je pole. Takže bychom nazvali řetězec řada znaků. A tam jsou vlastně další data typy, které můžeme dělat pole ven. Takže motivovat to, podívejte se na příklad. Budeme říkat ages0.c budu zkopírujte a vložte naše šablony. DOBŘE. Takže v tomto programu to, co jsme chcete udělat, je chytit věku ze v průběhu tří studentů. Takže víme, že int age-- a teď jsem chtěl říct 0. Takže budete chtít říct age1, ale pro účely uvidíme velmi brzy, Řeknu int age0 rovná GetInt. Takže stejné volání GetInt že jsme byli pomocí I nestane se dotazování říkat, "dej mi věk." Ale jen o to požádá. A age1 rovná GetInt. A int age2 rovná GetInt. Takže, opět tři studenti, ale nakonec variabilní indexy jsou age0 přes age2. DOBŘE. Takže tento program bude dělat, co chceme s age0, age1 a age2, ale tento program nakonec pracuje pro tři studenty. DOBŘE. Takže co teď, když chci čtyři studenti? No, budu muset jít zpátky do mého kódu, změňte komentář, a teď máme int age3 rovná GetInt. DOBŘE. Takže, kdo vidí tu problém? Co je za problém s tímto druhem nastavení? To jo. To jo. Takže jsme vytváříte proměnná pro každého studenta. Nyní, že funguje, ale nakonec co kdybych teď říkat, "já chci chytit věku osm studenti nebo 16 studentů nebo se nicméně mnoho studentů stovky studentů v CS50 nebo tisíce studentů na akademické půdě nebo miliardy lidí na světě? Takže nakonec to není udržitelný. Kdykoli vidíte sami kopírování a vkládání kódu takhle, měli byste cítit celkově že existuje lepší způsob. Takže tohle je místo, kde jsme zavedli deklarace pole. Takže když deklarujete pole, To je to, co obecný formát bude vypadat. Chystáme se říct typu. a pak budeme uveďte jméno této řady, stejně jako my definovat libovolné dané proměnné. A pak konečně jsme pomocí opět držák zápis ale v jiném kontextu z jak jsme používali dřív. Tak tady to vypadá jako normální deklarace proměnných, které jsme viděli. Takže jsme neviděli int x středník. No teď bychom mohli něco vidět jako int x závorkách 5. A tuto myšlenku uvedení do GetInt program, který jsme have-- takže můžeme realizovat to stejným způsobem. Řekněme, že v CS máme tendenci používat n jako počet něco. Tak tady budeme uložit čtyři studenty. A nyní můžeme říci, int věk držák n- ne tak docela si to yet-- deklarovat řadu čtyř studentů. Tak, jak to bude vypadat v Paměť bude podobná této. Zrušte to. A budeme muset někam v memory-- Dám to tam. Takže někde v paměti. Jedna dva tři čtyři. Máme čtyři celá čísla v řadě pro toto pole čtyř celých čísel. Takže, v současné době, co je velikost jednoho z těchto polí? To jo. To je čtyři bajty. Je to 32 bitů. Takže teď tohle je něco jiného z pole, které jsme viděli dříve, pole znaků. V řetězci každý box byl pouze jeden byte, proto, že znak je pouze jeden byte. Ale s pole celých čísel, z nichž každý box musí být čtyři byty za účelem aby se vešly celé číslo. Takže tohle je to, co řada Čtyři ints bude vypadat. A pak zpátky do kódu. Teď chceme skutečně obchod celá čísla do tohoto pole. Takže teď je to velmi, velmi, velmi společný vzor, ​​který bude v určitém okamžiku stát se svalová paměť. Takže int i = 0. i menší než n. i a a. Věkové skupiny i rovná GetInt. Takže to pro smyčce, tento formát, měli byste si velmi zvyklí. Tak to je obecně, jak budeme iteraci přes téměř všechny pole. Nyní si všimnout tento druh vysvětluje, proč od začátku jsme neměli pro smyčky jít na int i se rovná 1, i menší než nebo roven 10. Důvodem je, že se vychází z nula dělá tuto práci dobře s poli. Takže pole jsou nulové indexovány. Je-li tato pole je o délce 4, indexy jsou 0 až 3. Takže přes první iterace tohoto cyklu for budeme se nastavení věk držák 0 rovná volání GetInt. Tak co jsem se stalo pro vstup na klávesnici. Ve druhém průchodu, my jsme nastavení age1 rovná GetInt. Za třetí průchod, age2. Finální přihrávka age3. Takže pokud se v prvním průchodu smyčky I zadejte číslo 4 na klávesnici, pak budeme vložte 4 zde. Pokud se na druhém průchodu I vstoupí 50, budeme dát 50 sem. Na třetím průchodu bych mohl zadejte negativní 1 negativní 1, a nakonec, když jsem se vstoupit 0-- a Nyní si uvědomit, že to byl index tři. Poté, co jsme smyčky záda, i je bude zvýšen na 4. i již není menší než n, což je 4. A my jsme se vymanily ze smyčky. Takže co by bylo špatného? [Neslyšitelných]? Diváků: [Neslyšitelné] Ano. Takže pole má pouze čtyři místa, což znamená, že jako indexy 0 až 3. Takže pokud tomu tak bylo, tak bych vzít na hodnotě 4 v určitém okamžiku. věková skupina 4 bude nastavení ať se stane cokoli, aby sem na to, co musím říct, zadejte 6. To bude možné toto nastavení změnit na 6. Ale my nevíme, co je to tady. To není paměť že jsme měli přístup k. Takže pokud si pamatujete z předchozí přednáška, byl vytisknout hodnoty Zamyla a v určitém okamžiku narazil tuto segmentaci porucha. Takže budete pravděpodobně vidět Mnoho segmentace chyby, jak si implementovat některé z problémových sad. Ale to je jeden ze způsobů, kterými můžete setkat s segmentace chyba, když začnete přístupu paměť způsobem, který byste neměli být. Takže jsme neměli přístup k toto umístění, a to je chyba. Tak to je lepší. Teď tam je ještě malý Problém s tímto kódem. A to je v podstatě, že jsme zamrzla na čtyři studenty. Teď, když chci použít osm studentů, OK. Není to tak velký obchod. Můžu jít dovnitř, změňte komentovat, a změňte n. Teď to bude fungovat s osmi studenty. Pokud bych to kompilace a spustit to, bude to show me-- to bude požadovat celá čísla pro osm studenti a to bude prostě fungovat. Ale je to méně než ideální muset překompilovat programu, pokaždé Chci změnit počet studentů že chci vstoupit věky pro. Takže konečný zlepšení na to, jak uvidíme here-- jsme chystá požádat o počtu lidí. Tady máme řadu lidí v pokojích nebo jakékoliv věkové kategorie lidí v místnosti. Ale budeme požadovat číslo lidí v místnosti od uživatele. Tak to je přesně stejný do-while smyčky, že jsme neviděli. Je to ten samý do-while, který jste může být provádění na problém sadě. Tak dlouho, jak jsou Zadání n menší než 1, takže to musí být na Nejméně jedna osoba v místnosti. Tak dlouho, jak jsou Zadání n menší než 1, pak budeme mít znovu ptát. Prosím, zadejte číslo lidí v místnosti. Nyní, jakmile budeme mít číslo lidí v room-- takže jsem mohl dostat, že existuje jsou 200 lidí v této místnosti. Pak tady budeme přijít a deklarovat pole o velikosti 200. Jsme deklarování pole, které je dost velká držet 200 věkové kategorie. Coming dolů, je to pro smyčce že se dostanete velmi zvyklí. Takže iterace nad tímto polem, přiřazení ke každému umístění se tím, že pole celé číslo, a pak nakonec tady jsme jen na to příklad iterace během tohoto pole, ne přiřadit hodnoty, ale aby přístup k hodnotám. Takže tady vidíme, že říkají, o rok později, osoba% budu% i let, kde i je i plus 1 první%. Tak jsem je tento index variabilní. A druhá% i bude, že je hodnota uložená v věků poli plus 1. Tak tohle plus 1 je jen proto, že jsme saying-- tento plus 1, věku I s 1. Toto plus 1 je jen proto, že jsme řka: Ode dneška za rok na osobu bude tento starý. Tak proč je to i plus 1? Proč máme plus 1 tam? To jo. Ano. Takže pamatujte pole jsou indexovány nula. Takže pokud budeme tisku toto ven pro někdo jen číst výstup, pak nejspíš chtějí vidět něco jako je člověk jeden, osoba číslo jedna, bude 20 let. Osoba číslo dvě bude 15 let. Raději ne vidět osobu číslo nula je 15 let. Takže kompilace toto a vidí to, co právě to vypadá jako-- vytvořit nějaký prostor. Proveďte věku od kompiluje. Běh věkové kategorie. Vidíme, počet lidí v místnosti. Tak jsem si řekl, že jsou tři lidé v místnosti. Age of osoba číslo jedna, řekněme, 15, 20, 25. A teď budu říkat za rok od Nyní budou 16, 21, 26. Podívejme se, že to funguje s n, který není rovno 3. Takže když řeknu, že počet lidí, kteří je 5, jedním, dva, tři, dva, jedna, o rok později oni budou dvě, tři, čtyři, tři, dva let. Takže jsem mohl, stejně jako snadno n být 10,000. Teď budu sedět tady docela chvíli vstupu do stáří, ale to funguje. Takže teď jsme někde v paměti mají celou řadu velikosti 10,000, tak nakonec 40.000 bajtů, protože tam jsou čtyři byty pro každou z těchto celých čísel. Takže je tu řada velikost 10,000 kde můžeme uložit věk těch 10.000 lidí. Dobře. Otázky týkající se něco z toho? To jo. Co když jste dal záporné číslo? Podívejme se, co se stane. Takže v tomto konkrétním číslem case-- lidí v místnosti, negativního. Odmítl, že, protože tady žijeme k manipulaci s tím, že pokud n je menší než jedna, že budeme znovu ptát. Pokusíte-li se vyhlásit pole negativní velikosti, to obecně nefunguje. Takže pojďme zkusit. Pojďme ignorovat cokoli hodnota se vstup pro n a jen říct, int věku od negativní jeden. Uvidíme, jestli to vůbec sestavuje. Nejsem si jistý. Ne. Takže věku je deklarován jako pole s negativním velikosti. Takže předem uznává pole nemůže mít negativní velikosti a odmítá ji. Teď, když jsme neměli zacházet Tento Do-while správně, pokud jsme nebyli kontrolu pokud n je menší než 1-- Řekněme, že právě ani to mít vůbec a místo toho jsme se jen chytit celé číslo. Bez ohledu na to, co to je celé číslo, prohlašujeme pole této velikosti. Takže kompilátor nemůže možná teď stěžují. Pokud bych sestavit tohle-- takže nemůže stěžovat, protože to nemůže vědět, že jsem chystá vstoupit záporné číslo, které by mohly být neplatné. Pro všechny to ví, možná zadejte kladné číslo, což je naprosto v pořádku. Tak jsem si představit, když jsem zadat záporné 1 lidé v místnosti, segmentace chybu. Tak dobře. Takže pojďme se přidat tento zpět jen aby to, co to původně bylo. Tak, aby věkové kategorie. A teď, když chci zkusit Negativní age-- Takže pojďme říkají, že pět lidí v místnosti. Age of osoba číslo jedna je negativní 4, člověk tří je nula, člověk three-- OK. Takže tady, o rok později, osoba číslo z nich bude negativní, 3 let. Takže asi nemá smysl. Ale to je jen proto, že hledáte na kód všechno děláme žádá GetInt. Teď, když jsme se měl Funkce GetPositiveInt nebo jsme prostě jen udělal druh stejného cyklu while tam dole, pak by to fungovat naprosto v pořádku. Ale v tomto konkrétním případ, my prostě nemají stalo, že se manipulace záporné hodnoty. Jakékoliv další otázky týkající se polí? DOBŘE. Takže jsme teď viděli pole. A budeme muset použít to pro argumenty příkazového řádku. Takže problém nastavit two-- Vím, že mnozí z vás by mohlo být stále pracuje na problému set člověk, ale problém nastavit dvě se blíží. V problém nastavit dvě, budete je třeba zabývat s řetězci, poli, a argumenty příkazového řádku. Takže jaké jsou argumenty příkazového řádku? Nyní můžete vidět tady dole malý teaser přesně to, co je bude děje. Vidíme int main, INC argc, string argv závorkách. Takže nejprve pojďme se snaží interpretovat co to se snaží říct. A teď, OK. Takže na příkazovém řádku, měli byste být zvyknout si na některé z těchto příkazů teď, a pravděpodobně jste spuštění CD v terminálu před. Takže když řekneme cd pset1, víte, že by se mění do adresáře pset1. Nyní si všimněte, že jste nikdy napsal program, jako je tento předtím. Každý program, který jste napsali, byste spustit, řekněme, tečka lomítko Mario, dot lomítko chamtivý, a pak ji Možná výzvu pro vstup. No, to není to, co Změňte adresář dělá. Při spuštění cd, není pak říká, které adresáře chcete cd do? Místo toho, stačí říct, cd pset1, a to jen jde do adresáře pset1. Takže podobně máme další příklady. aby ahoj. Při spuštění provést, není pak říká, program, který byste chtěli dělat? Stačí říct, u příkazový řádek, aby ahoj. Move je dalším příkladem. Ten jsme se pohybem mario.c souboru o jednu úroveň. Takže teď víme, že s tímto příkladem Jsme opravdu kolem dva argumenty. Tam je mario.c jako první argument, a dot dot je druhý argument. A pak, když spustit, aby vás, vidět, že opravdu dlouhou příkaz line-- že opravdu dlouho povel tištěný na příkazovém řádku. Tak dlouho command-- tento je jen kousek část, ale teď máme tři argumenty příkazového řádku. Dot pomlčka nula, ahoj, a hello.c. Tak to jsou příkazového řádku argumenty, argumenty že jste kolem u příkazového řádku, takže to nemusí být výzva při spuštění programu. Bylo by to frustrující, když při jste spustili zvonit to řekl: "OK, který program-- který Soubor jste kompilaci? Hello.c. Co byste vlajky chtěli vstoupit? pomlčka o. Co byste rád soubor být nazýván? Ahoj. Ne, stačí spustit řinčení pomlčka o ahoj hello.c. Takže se ohlédl na to. Nyní argc-- argc je argument počítá. Je to počet příkazového řádku Argumenty vstoupil na příkazovém řádku. No, technicky argv-- tlačítka v znamená vektor, což v podstatě znamená, že pole. Ale můžete ignorovat. Argv-- máme řetězec argv, takže řetězec argv závorkách. Takže to je další forma brackets jste ještě neviděli. Takže jsme viděli držák notace, když jsme řekli, jako, string s rovná Zamyla. s konzola 0 přistupuje znak Z. Také jsme viděli, když držáky jsme si řekli, int věku bracketing 5. Ten deklaroval pole o velikosti 5. Takže tady je verze z konzoly jsme ještě neviděli. Takže tento druh řetězce argv, který by bylo zcela obeznámeni že by to prostě být řetězec. Nyní závorkách že se jedná o pole. Takže string argv držáky prostředky že argv je pole řetězců. Teď technicky řetězec je pole znaků. Takže toto je nyní pole z pole znaků. Ale je to mnohem snazší přemýšlet o tom, to jen jako pole řetězců. Tak proč by mohlo být prázdné závorky? Stejně jako, proč nemůžeme říci, držák 5, držák n? To jo. To jo. Nevíme, kolik vstupy tam jsou bude. Takže pokud se podíváme na zvonění příklad, říkáme zvonit pomlčku o ahoj hello.c. V tomto konkrétním případě, že se stalo být tři argumenty příkazového řádku. A tak brackets-- uvidíme ve druhé nebylo by to tři. Technicky by to čtyři. Ale konzoly, že bychom řekněme, jsou tři. Ale teď, když jsme se podívali na cestách mario.c dot dot, závorky bychom chtěli dát dva v nich. A existuje mnoho příkazů, které mají různý počet příkazové řádky argumenty. Takže to, co tato verze držák notace označuje je to, že argv je pole řetězců. Ale my nevíme, kolik řetězce jsou v tomto poli. A jak pak víte, jak mnoho řetězců jsou v poli? To je celý smysl argc. argc nám říká, jak dlouho argv je. Takže poslední věc, kterou byste měli mít na mysl je to, technicky, příkaz sám se počítá jako jeden o argumenty příkazového řádku. Takže cd pset1, jsou tam dva argumenty příkazového řádku. Program sám o sobě, CD, a poté skutečný argument, část, pset1. Jakýkoliv program, který jste napsali tak daleko bylo jednou z příkazového řádku argument-- tečku lomítko Mario. To je jediný argument příkazového řádku. Takže nyní podíváme na zazvoněním pomlčka o ahoj hello.c. Takže to, co je argc? 4. Takže argc je 4. Clang, takže argv držák 0 řinčení. argv držák 1 je pomlčka 0. argv držák 2 je ahoj, a argv konzola 3 je hello.c. Ok, tak otázky týkající se to, a pak se podívejte se na některé programové příklady. DOBŘE. Takže se budeme se podívat na hello3.c. Tak to by mělo být známý z jeden z prvních příkladů c jsme měli kde bychom jen říct, ahoj svět, ale teď je to obecnější. Tak tady říkáme ahoj % s zpětné lomítko n argv držák 1. Notice-- tak až do tohoto bodu, to je jaký soubor má šablona vypadá. Měl jsem int main (void), a pak bych něco v hlavní funkce. Nyní místo, jakmile začneme zabývat s argumenty příkazového řádku, musíme státu A různá forma main. Takže při pohledu na hello3 Opět platí, že hlavní děje aby se dva argumenty now-- int argc, počet argumenty příkazového řádku, a string argv závorce, skutečná řetězce zadán na příkazovém řádku. Takže jsem to nezmění šablona, ​​aby odrážel tuto skutečnost. Nyní, kdykoli budete psát programu, pokud nemáte třeba žádného zvláštního příkazového řádku argumenty, pak stačí použít int main (void). Ale teď, když píšete Argument programy příkazového řádku, které budete dělat o problému nastavit two-- takže teď, že jste běží programy, které potřebují, aby se argumenty příkazového řádku, musíte mít hlavní tohoto formuláře. Takže here-- to je velká použití o argument příkazového řádku. Takže tisku argv 1. OK, takže pojďme kompilovat a spustit tento program. Udělat hello3. Sestavuje. Dot lomítko hello3. A řekněme, "Rob." Dobrý den, Rob. Když řeknu, "ahoj Maria:" Ahoj Maria. Dobrý den, Maria. Hannah stále říká, "ahoj Maria, "protože já nejsem dělat něco s naším argv 2. Argv 2 nyní bude "Hannah." Argc by být 3. Co když jsem to udělal? Tak ahoj null. On stručně dotkl na skutečnosti, že technicky, GetString může vrátit null, ale budeme dostat mnohem víc do toho, co null ve skutečnosti je. Ale vezměte si ji jako věc Skutečnost, že ne je obecně špatná. Udělali jsme něco špatného, ​​pokud je to tisk "ahoj null." A důvod, proč jsme to udělali něco špatně je-- dobře, když jsem běžel dot lomítko hello3, argc byl 1. Tak, že znamená, že délka argv byla 1. Pokud je pole je o délce 1, jedinou platnou index je nulová. A tak tady argv 1 je venku rozsah tohoto pole. Bylo to podobné jako předtím, když jsem se snažil pro uložení 6 mimo konce pole. Takže se snažím přistupovat něco mimo argv počítá, a my jsme stále null. Takže lepší verze to, zlepšení, je výslovně kontrola argc. Takže pokud argc rovná 2, to znamená, že jsme běželi něco jako tečka lomítko hello3 Rob. A to bude tisknout "ahoj Rob." Pokud argc není rovno 2, pak je to jen bude ignorovat, co jste dal Na argument příkazového řádku jako argumenty příkazového řádku. Nebo pokud jste si ho nedali vůbec žádné, je to jen tak ignorovat to a jen říct, "Ahoj." Takže sestavování tohle. Udělat hello4. A běh hello4. Running to takhle, co by mělo být vytištěny? "Ahoj." Ahoj. Co hello4 Rob? "Dobrý den, Rob." A konečně, ahoj Rob Maria je jen "ahoj Ty" znovu, proto, že jste se opravdu vstoupit něco, co se očekává. Zadali jste více jmen , než to mohl zvládnout, tak to prostě převezme ahoj jste chování. Takže otázky, týkající tohle? Nebo argumenty příkazového řádku? OK, takže při pohledu na pár dalších příkladů použití příkazového řádku arguments-- nejprve jsme argv pomlčka 1 bod c. Takže komentáře dát pryč, co tento program by měl dělat. Nevšimnout now-- to pro smyčce, to přesně odpovídá vzoru Jsem říkal předtím. Právě jsme se stalo, že se za použití argc místo n. Nyní argc je opravdu n. Je to délka argv pole. Takže jsou iterace přes argv array printf-ing každou argv hodnotu. Takže když jsem se, aby to. Proveďte argv 1. To kompiluje. Dot lomítko argv 1. Právě běží to, ho postery dot lomítko argv 1 protože to byl jediný příkazového řádku argument-- název programu. Tam bude vždy na least-- argc nesmí být menší než jedna, protože tam bude vždy alespoň je název programu spustit. Takže argv 1 Rob bude tisknout argv 1 a pak se na novém řádku "Rob." Takže v první iteraci této smyčky, i je 0. Argv 0 je název programu. Dot lomítko argv 1. A pak argv 1 je můj první argument příkazového řádku, který je Rob. V tomto bodě, jsme se rovnají argc. Lámeme ze smyčky a budeme hotovi. Takže to bude fungovat pro libovolný Počet argumenty příkazového řádku. Všimněte si, že vytiskne argv 0, argv 1, argv 2, argv 3, argv 4. A není argv 5. argc je rovno 5,. Takže na argc-- na i rovná 5, lámeme ze smyčky. DOBŘE. Takže otázky, týkající že předtím, než jsme podívejte se na více komplexní příklad? Takže argv 2. Dobře. Takže jsme pořád tisk příkazového řádku argumenty. Ale teď musíme všimnout vnořené pro smyčku. Takže to, co se to dělá? Takže první smyčka dělá přesně to, co dělal předtím. Jsme stále více než cyklování každý argument příkazového řádku, ale nyní tento druhý loop-- máme Také viděl něco takového předtím. Když byl iterace nad Zamyla vytisknout Z-A-M-Y-L-A. Takže to druhá smyčka pro int j rovná 0, n se rovná strlen z argv držáku i. Takže pojďme se nejprve, že pro the-- pojďme projít. Pojďme si, že to, co by počítač dělat, když jsem běžel tento program jako právě dot lomítko argv pomlčka 2. Takže když jsem běžel tento kód, a pak argc bude roven 1. A string argv-- existuje pouze bude jedním index v argv, a že to bude rovnat dot lomítko argv 2-- název programu. OK, tak teď jsem se rovná 0, i méně než 1, i a plus pro int j = 0, n se rovná strlen z argv držáku 0, tak v První iterace této smyčky. argv Držák 0 tečka lomítko argv 2. Takže to, co je délka tohoto řetězce? No, dot lomítko a-R-G-V pomlčka 2. Tak strlen toho bude 8. Tak j rovná 0, n se rovná 8. Tak dlouho, jak j je menší než 8, j ++. A s tím budeme mít tisk jeden znak, který je argv držák i bracketing j. Takže jediný i je nula. Stále jen mít jeden argument příkazového řádku. V této první iteraci z cyklu for, my jsme Bude tisk argv držák 0 držák 0. A pak j se chystá zvýšit. A jdeme do tisku argv držák 0 držák 1. A pak argv držák 0 držák 2. Tak toto je naše první setkání multi-rozměrné pole. Pamatujte si, že jsem řekl dříve, že argv je technicky řada pole znaků. Tak tady, když jsem řekl něco jako string s rovná argv držák i, a pak jsem řekl, s držák j, to by bylo dosažení totéž. Nyní, když jste viděl s držák j. To je jen přístup k j-tého charakter tohoto řetězce. Takže s tím, jsme se dostat to j-tý charakter i-tého argv. Takže to, co by měl tento nakonec výstup? Proveďte argv 2. To kompiluje. Dot lomítko argv 2. "Rob Maria Hannah," a dej nám nějaký prostor. Takže vidíme, že je to výstupu tečka na samostatném řádku a lomítko na vlastní čarou a na vlastním řádku. Je vytištění každý individuální charakter každý argument příkazového řádku. A pak se mezi nimi, díky této nové linky jsme tisk tady dole, v mezi nimi to bude tisknout nový řádek. Takže je to podobné předchozí argv pomlčka 1, který tištěný každý argument příkazového řádku, ale teď jsme tisk příkazového řádku argumenty a pak iteraci každý charakter každého argument příkazového řádku aby si tento výstup. DOBŘE? Takže otázky, týkající tohle? Jedna věc k poznámce je, že příkazového řádku arguments-- tak oni jsou odděleny mezerami, jako Vás by přirozeně očekávat, že budou. Takže řetězec může mít mezery v něm. Není to výborný důležité, ale pokud já Chtěl třetí argument příkazového řádku mít místo v něm, pak jsem Dalo by se říci něco takového. DOBŘE? Tak to teď ještě má jen tři příkazového řádku arguments-- dobře 4. Dot lomítko argv pomlčka 2, Rob, Maria, a Hannah Bloomberg. DOBŘE. Dotazy na to? Na tom není nic zvláštního o kosmickém charakteru. Prostě se to stane, že je, že příkazového řádku zachází znak mezery jak jste oddělit jednotlivé argument. Dobře. Takže Problém set two-- budete mít při pohledu na tajemství-klíč kryptografie. Tak, podobně jako v tomto příkladu jsme viděli od A Christmas Story, budete se provádějí některá algoritmy, že vzhledem zprávu, budete mít možnost zašifrovat tu zprávu že jen někdo s tímto tajemstvím klíč, s tím dekodéru kroužkem, by měl být schopen dešifrovat. Takže to je standardní vydání. Budeš se prováděcí dvě různé verze. Pokud jste náhodou se podívat u hacker Edition nyní, jdeme dát Jste řetězec takhle, což představuje šifrované heslo. Takže vaším cílem je zjistit, co je dešifrovat heslo. Nyní je to vlastně Jak hesla jsou uloženy v mnoha počítačů, a to jen ukládá toto náhodný řetězec znaků. Musíte přijít na to, jak se dostat z této náhodné řetězec znaků s tím, co bylo původní heslo. A nakonec, po tomto Problém set, měli byste být schopen pochopit, co to znamená. Tak se dozvíte, jak dešifrovat tento druh náhodný řetězec. Stejně tak, pokud si pamatujete z týdne 0, možná jste viděli tuto adresu URL. A vy byste měli být schopni dešifrovat to nakonec. Ty nemusí být šťastný, když vás dešifrovat ji a klikněte na odkaz. Dobře. To je pro dnešek vše. Tak vidíte příští týden! [ELECTRONIC přehrávání hudby]