[Glazbom] DAVID Malan: U redu. Ovo je CS50, i to je kraj tjedna 2. Žao mi je nisam mogao biti tamo sa svima vama danas, ali ti si u vrlo dobrim rukama. Dopustite da se predstavimo CS50 vlastiti Rob Bowden. ROB Bowden: I naravno, onda moramo ismijavati činjenice da nam je poslao vertikalni video i pokazati. [VIDEO PLAYBACK] [Glazbom] [Stopama] -Ova Videozapis nije morate gledati na taj način. To bi moglo biti spriječeno. Recite ne vertikalnim videa. -okomita Video dogoditi kada držite fotoaparat na krivi način. Vaš video će završiti se gleda kao govno. - [Grunt] -Postoji Više i više ljudi ovisnici za izradu vertikalnih videa svaki dan. Nije ispucati ili ništa, ali to je još uvijek jako loše. Postoje dvije različite vrste ljudi koji su potlačeni s VVS. Prva skupina tretira video pucaju poput slike. Oni ne znači nikakvu štetu. Oni jednostavno ne razumiju da a možete pretvoriti sliku, ti stvarno ne mogu pretvoriti video. [CRASH] - [MONKEY ZVUKOVI] -drugi Grupa ljudi koji ne daju [bleep]. -okomita Video sindrom je opasno. Videozapisi se Uvijek je horizontalna. Televizori su horizontalna. Računalo ekrani su horizontalna. Ljudi su oči horizontalna. Mi se ne grade na gledati vertikalne videa. -Ja Volim vertikalne videa. -Nobody Brine o vama. -Ako Taj problem je označenim lijevo, vi će se početi prikazivati ​​četiri videa odjednom jednostavno za spremanje bandwith. -Letterboxed Vertikalne video bi biti veličine poštanske marke. -I To će se širiti posvuda. Film zasloni imaju Uvijek je horizontalna. Ako vertikalni videa postala prihvaćeni, kina će biti visok i mršav. -I Sve kinima bi moraju se srušena i obnovljena. I u vrijeme kada su obnovljena, Mila Kunis će biti stara i ružna. -Birds Će pad u njih i umrijeti. -We'll Svi dobili ukočeni vratovi iz gleda gore. -I Nitko neće sjediti u prednji red ikada opet. -George Lucas će ponovno puštanje Star Ratovi again-- Mršavi izdanje. -Ja Nikada nije stvarno moći reći priča da sam htjela reći. Ovo je velika prilika za mene eksperimentirati s novim tehnologijama. -You're Trzati. Približno svakih Vrijeme mobilni uređaj koristi za Snimanje videa, napast postoji. Samo reći ne. Recite ne Georgea Lucasa. Recite ne stare Mila Kunis. Recite ne vertikalnim videa. -I Ako vidite da netko to radi, recimo, "ne snimate to pravo lutke!" [Glazbom] [END PLAYBACK] [PLJESAK] [AUDIO OUT] ROB Bowden: --simple oblik kriptografije, koja je u osnovi za šifriranje i dešifriranje tajnih poruka. Dakle, ovdje imamo vrlo jednostavnu igračku. A ideja je vanjski prsten rotira oko unutarnjeg prstena. A možete vidjeti, možda ako mi uvećanje u, that-- teško je vidjeti. No, kao što je broj 1-- dobro, da se preselio. Broj 1 preslikava na pismo X, broj 2 karte za pisma J. nevjerojatno teško Ne preskočiti naprijed. Pismo 2 karte za J. Broj 3 karte za D. Dakle, s ovim prstenom možete dati netko poruka 1, 2, 3. Iz nekog razloga vas želim im reći XJD. Ali možete ih dati neke poruke brojeva, i tako dugo dok su ove prsten, oni može dešifrirati što pokušavaš reći. Dakle, možda ste vidjeli Konkretan primjer kriptografije prije ako oko Božića ste gledali Božićna priča. Ako ste nikada nije vidio što prije, onda samo uključivanje TBS na doslovno bilo koje vrijeme na Badnjak, jer su upravo to pokazati natrag na leđa natrag na leđa na leđa cijeli dan. A relevantne video je to. [VIDEO PLAYBACK] -Be Je poznato da sve i raznovrstan da Ralph Parker je ovime imenovan za člana Little Siroče Annie Tajna krug i ima pravo na sve počasti i koristi se javljaju na njega. Potpisan Little Orphan Annie. Supotpisali Pierre Andre tintom! Priznanja i prednosti Već u dobi od devet! [Deranja Radio] -Ajde. Idemo se s njim. Ne treba sve da je jazz o krijumčara i pirata. -Listen Sutra navečer s završna avantura Crne gusarski brod. Sada je vrijeme za Annie tajna poruka za vas članovi Secret Circle. Sjeti se djeca, samo članovi Annie Tajna krug može dekodirati Annie je tajnu poruku. Zapamtite, Annie je ovisno o vama. Postavite svoje igle B2. Ovo je poruka. 12. 11. 2. -Ja Sam u mom prvom tajnom sastanku. -25. 14. 11. 18. 16. Oh, Pierre je u velikoj glasovnom večeras. Mogao bih reći da je večeras Poruka je stvarno važno. -3. 25. To je poruka od Annie sama. Zapamtite, nemojte nikome reći. -Pet Sekundi kasnije, ja sam u samo prostorija u kući u kojoj dječak od devet mogao sjediti u privatnost i dekodiranje. Ej, B! Otišao sam do sljedećeg. E. Prva riječ je "biti". S. Dolazilo je lakše sada. U. 25. To je R. -COMe Na, Ralphie! Moram ići! -I'll Biti dolje, mama! Gee fijuk. T. O. "Svakako" - svakako što? Što je Little Orphan Annie pokušava reći? Svakako što? -Randy Je dobio to ići! Hoćete li, molim vas izaći? -Sve U redu, mama! Bit ću van! Bio sam sve bliže sada. Napetost je grozno. Što je to bilo? Sudbina planeta može objesiti u ravnoteži! -Ralphie, Randy je dobio to ići! -I'll Se pravo iz, zaboga! Skoro tamo! Moji prsti letjeli. Moj um je bio čelični zamka. Svaka pora vibrirao. Bilo je gotovo jasno! Da. Da. Da. Da. Budite sigurni da pijete vašu Ovaltine. Ovaltine? Bijedan komercijalna? Kurvin sin. [END PLAYBACK] ROB Bowden: Pa to je kako Ovaltine odnosi kriptografije. Uglavnom CS50 samo reklamiraju Ovaltine, tako da smo mogli biti bijedan reklama za Ovaltine. U redu. Tako sada stvarna informatika. Sjetite se u ponedjeljak smo stali ronjenje dublje u žice. Tako smo se bave string "Zamyla." A mi se prepoznaju činjenica da možemo liječiti "Zamyla" kao niz znakova. I zapamtite da smo naučili zapis nosač. Dakle, ako je to bili pohranjeni u nizu "s", a zatim ako mi je rekao je nosač 0, da bi ukazuju na slovo kapitala Z. A ako mi je rekao je nosač 1, koji će ukazati prvu malim slovom A, i tako dalje do e držač 5, što bi naznačiti trajati. Sada se sjetiti da je Duljina niza je 6, ali indeksi u nizu su 0 do 5, Z kroz to trajati. Dakle, to je sada uklapa u veću sliku memorije računala, RAM. Dakle, negdje program koji radite računala treba zapamtiti Zamyla negdje u memoriji. Dakle, ja mogu imati volonter? Da, molim. I što je vaše ime? DEAN: Dean. ROB Bowden: Dean? Drago mi je, Dean. Stoga dođite ovamo, i ćemo imati crtate na našem lijepom divan izgled memorije. Sada Volim misliti memorije kao jedan dugi trake bajtova, ali samo za prikaz svrhe mi ćemo Samo nemojte lijeva na desno, odozgo prema dolje. U REDU? Tako ću pokazati program-- Getstrings.c. I tako je ovaj program radi se traži četiri žice od korisnika s GetString a zatim tisak što god da se prvi niz ušao je. Mi smo ignoriranje dva kroz četiri. U REDU. Dakle ovdje now-- kada Prvi put sam zahtjev s1. Tako da su računalo. I ti si provedbi GetString. Znači li zatražiti niz od mene, a ja kažem, u redu, Dean. Dajte string "Dean". Dakle, negdje u memoriji koju trebate zapamtiti "Deana." Tako ga pisati u memoriju negdje. Savršeno. U REDU. Dakle, sada smo S2. I S2 će biti zahtjev za GetString. Tako ću ući u niz. Idem ući "Hannah." Dakle, upišite "Hannah" negdje u memoriju. Da. A-H. U redu, tako da sada s3. A to će biti drugi zatražiti da GetString. I tako sada ući "Maria". U redu. A tu je i posljednji Zahtjev za GetString, S4. Dakle, ja ne znam. Kako bi bilo da ide s antidisestablishmentarianism. Dakle, unesite je u memoriju. Da. Dakle, samo to "Rob". U REDU. Tako sada explain-- zašto je odeš ove prostore? Zašto ste to prazno Prostor ovdje, ovdje i ovdje? Da. Dakle, primijetite kad idem ispisati s1-- pa ako mi je "Hannah" uhodavanja pa sve do "Dean" kako ćemo znati kada string "Dean" završava? Tako ispis string S1 može imati Samo tiskana "DeanHannahMariaRob" ako nema pojma kada "Dean" zapravo završava. U redu. Tako je u sjećanju način mi zapravo predstavlja ovaj kraj nizu je s obrnute kose crte nula. Dakle, ovaj prostor je upravo ono što smo htjeli. To bi trebao biti backslash nula. To će biti backslash nula, i to će biti backslash nula. A možete imati nevjerojatan nagradu za što savršen volonter. Uzmi stres loptu! U REDU. Dakle, ovaj lik backslash nula kako ćemo označiti kraj niza. To je kako, kada je bilo dano programa želi ispisati niz, to je how-- Sjećam smo naučili funkcija strlen prošli tjedan? Duljina Gudački? To je kako je duljina niza je u stanju odrediti koliko dugo niz je. To samo čuva iterating više likova dok se ne pronađe kose crtice nula karakter. Dakle, važno je shvatiti o backslash nula karaktera je to je zastupljena svi nula u bitovima. Dakle, primijetite da je to različita od nula karaktera. Tako je nula lik, ako se sjećate u primjeru koji je dao na kraju predavanja u kojima likovi map to-- kao glavni A karata do 65. Mala je karte do 97. Mala b će biti 98. Tako se broj 0 karata to-- ja ne znam off vrhu moje glave. 44 ili 45. Negdje u toj regiji. Tako je lik 0 je stvarni broj. Ali backslash nula Karte za sve nula bitova. Dakle, postoji razlika između obrnute kose crte nula, koje ćemo nazvati null terminator. Postoji razlika između backslash nula i znak nula. U redu. Tako govori malo više o žice. Pa onda vidimo ovdje je to kako to bi se postaviti u memoriji. Dakle, ova ideja žice kao slijed od characters-- tako službeno računalo sciency pojam za slijed je niz. Tako bismo nazvati niz niz znakova. A tu su zapravo ostali podaci vrste koje možemo napraviti polja iz. Dakle motivirati to, pogledajte primjer. Mi ćemo ga nazvati ages0.c ću kopirajte i zalijepite naš predložak. U REDU. Tako je u tom programu što smo želite učiniti je zgrabite dobi tri učenika u tijeku. Tako znamo int age-- a sada ću reći 0. Tako možda želite reći age1, ali za potrebe vidjet ćemo vrlo brzo, Reći ću int age0 jednak GetInt. Tako isto poziva GetInt koje smo koristili I nemojte se dogoditi da se navelo govoreći: "Daj mi dob." Ali samo ga zatraži. I age1 jednak GetInt. I int života2 jednak GetInt. Dakle, opet, tri učenika, ali konačnici varijabilni indeksi su age0 kroz života2. U REDU. Dakle, ovaj program će učiniti sve što želimo s age0, age1 i života2, ali ovaj program u konačnici radi za tri studenta. U REDU. I što sad ako želim četiri učenika? Pa, ja ću se vratiti u mom kodu, mijenjati komentar, a sada imamo int age3 jednak GetInt. U REDU. Pa tko vidi problem ovdje? U čemu je problem s ovom vrstom postava? Da. Da. Tako smo stvaranje varijabla za svakog studenta. Sada se to radi, ali u konačnici, što ako ja sada kažu, "Želim da zgrabite dob Osam studenti ili 16 učenika ili su ipak mnogi studenti stotine učenika u CS50 ili tisuće studenata na kampusu ili milijarde ljudi u svijetu? Dakle, u konačnici to nije održivo. Svaki put kada vidite sebe kopiranje i lijepljenje kod ovako, obično ćete se osjećati da postoji bolji način. Dakle, ovo je mjesto gdje ćemo predstaviti niz izjava. Dakle, kada proglasiti niz, to je ono što je opći oblik će izgledati. Ćemo reći tip. a onda ćemo daju ime tog polja, baš kao što smo definirali bilo dano varijablu. A onda na kraju smo pomoću opet ovaj nosač zapis ali u drugom kontekstu od kako su ga pomoću ranije. Dakle, ovdje to izgleda kao normalna varijabla izjava da smo vidjeli. Tako smo vidjeli int x-zarez prije. Pa sad možemo vidjeti nešto kao int x tipkovnici 5. I stavljajući ovu ideju u GetInt program koji smo have-- tako da možemo provesti to na isti način. Recimo u CS smo skloni koristiti nje kao broj nečega. Dakle, ovdje ćemo pohraniti četiri studenta. I sada možemo reći int dob Nosač ne n- sasvim dobiti yet-- izjaviti niz od četiri učenika. Pa kako će to izgledati u memorija će biti sličan ovome. Vedro ovo. I mi ćemo imati negdje u memory-- ću staviti ovaj gore. Dakle, negdje u memoriji. Jedan dva tri četiri. Imamo četiri prirodna broja u nizu za ovaj niz od četiri brojeva. Dakle, trenutno, što je Veličina jedne od ovih kutija? Da. To je četiri bajta. To je 32 bita. Dakle, sada je to drugačije iz niza koje smo vidio ranije, niz znakova. U nizu svaka kutija je samo jedan bajt, jer lik je samo jedan bajt. No, s nizom brojeva, svaki kutija mora biti četiri bajta kako da stane cijeli cijeli broj. Dakle, to je ono što niz Četiri Ints će izgledati. A onda natrag u kodu. Sada želimo zapravo dućan cijeli brojevi u tom nizu. Dakle, sada je to vrlo, vrlo, vrlo čest uzorak koji će u nekom trenutku postati mišića memorije. Dakle int i jednak 0. ja manje od n. ja plus plus. Nosač doba i jednaka GetInt. Dakle, ovo za petlju, ovaj format, trebali dobiti vrlo nekad. Dakle, ovo je općenito kako ćemo ponoviti tijekom gotovo bilo niz. Sada primijetite ovu vrstu objašnjava zašto je od početka nismo imali za petlje ide za int je jednako 1, i manji od ili jednak 10. Razlog je da počevši od nula čini ovo djelo dobro s polja. Dakle polja su nula indeksiraju. Ako je ovo polje je duljine 4, indeksi su 0 do 3. Dakle, kroz prva iteracija to za petlje ćemo biti postavljanje dobi Nosač 0 jednak poziv na GetInt. Dakle, ono što mi se dogodilo ući na tipkovnici. U drugom prolazu, mi smo postavljanje age1 jednak GetInt. Treći prolaz, života2. Završni prolaz age3. Dakle, ako se u prvom prolazu petlje Ja unesite broj 4 na tipkovnici, onda ćemo umetnuti 4 ovdje. Ako se na drugom prolazu sam ući 50, mi ćemo staviti 50 ovdje. Na trećem prolazu sam možda unesite negativna 1, negativna 1, a onda na kraju, ako sam ući 0-- i Sada se sjetiti da je to indeks tri. Nakon što smo petlje leđa, i je će se povećati na 4. i više ne manje od N, koji je 4. I lomimo iz petlje. Dakle, što bi bilo u redu s ovim? [Nečujan]? PUBLIKA: [nečujan] Da. Tako je niz ima samo četiri mjesta, što znači kako je indeksi 0 do 3. Dakle, ako je to slučaj, ja bih se na vrijednosti 4 u nekom trenutku. dobnoj skupini 4 će biti postavljanje sve što se događa da se ovdje na ono što moram reći, unesite 6. To će se postaviti na 6. Ali ne znamo što je ovdje. Ovo nije memorije da smo imali pristup. Dakle, ako se sjećate iz prethodni predavanje, On je ispis vrijednosti Zamyla i u nekom trenutku udario ovo segmentaciju kvara. Dakle, vjerojatno će vam biti kad mnogi segmentacije greške što vama provesti neke od problema setovima. No, to je jedan od načina na koji možete naići na segmentaciju kvara, kada počnete pristupa memorije na način koji ne bi trebali biti. Dakle, nismo imali pristup to mjesto i to je bug. Dakle, to je bolje. Sada još uvijek postoji mala problem s ovim kodom. I to je zapravo da smo još uvijek zaglavi na četiri učenika. Sada, ako želim koristiti osam studenata, u redu. To nije velika stvar. Ja mogu ići u, promijenite komentirati, i promijeniti n. Sada će to raditi s osam studenata. Ako sam sastaviti ovaj i trčanje to, to će pokazati me-- to će zahtijevati integers za osam studenti i to će raditi samo. No, to je manje nego idealno da je potrebno rekompilirati programa svaki put Želim promijeniti broj studenata da želim ući u dobi za. Dakle, konačna poboljšanje u odnosu na to, kao što ćemo vidjeti here-- smo će zatražiti broj ljudi. Ovdje imamo broj ljudi u sobama ili bilo dob ljudi u sobi. Ali ćemo zatražiti broj ljudi u sobi od korisnika. Dakle, to je isti učiniti-a petlje da smo vidjeli prije. To je isti do-while petlja da možda implementira na problem seta. Dakle, dokle god oni ulaska n manji od 1, pa mora biti na Najmanje jedna osoba u sobi. Dokle god oni ulaska n manji od 1, onda ćemo zadržati opet pita. Unesite broj ljudi u sobi. Sada, kada imamo broj ljudi u room-- tako da sam mogao ući da 200 ljudi u ovoj sobi. Onda ovdje idemo doći i proglasiti niz veličine 200. Mi izjavljujući niz koji je dovoljno velik da držite 200 dobi. Silazi, to je za petlju da ćete dobiti vrlo nekad. Dakle iterating preko ovog niza, dodjeljivanje svakom mjestu u tom nizu cijeli broj, i onda u konačnici ovdje smo samo dobivanje primjer iterating tijekom tog polja, ne dodijeliti vrijednosti, ali pristupiti vrijednosti. Dakle ovdje vidimo da smo kažu, za godinu dana, Osoba% ja ću biti% I godina, gdje je prvi i% je i plus 1. Dakle, ja se ovaj indeks promjenjiva. I drugi% i ide se vrijednost pohranjena u dobi polje plus 1. Dakle, ovo je samo plus 1 jer smo saying-- ovaj plus 1, dobi I plus 1. To plus 1 je samo zato što smo govoreći, za godinu dana osoba će ovaj stari. Pa zašto je to i plus 1? Zašto imamo plus 1 tamo? Da. Da. Dakle, ne zaboravite polja su nula indeksiraju. Dakle, ako smo ispisujete ovo za netko samo za čitanje izlaz, onda vjerojatno žele vidjeti nešto kao osoba jedna, osoba broj jedan, će biti 20 godina. Osoba broj dva će biti 15 godina. Oni radije ne vidim osobu broj nula je 15 godina starosti. Dakle sastavljanju to i samo vidjeti što izgleda volimo-članovima Napravite neki prostor. Provjerite u dobi sastavlja. Trčanje dobi. Vidimo broj ljudi u prostoriji. Dakle, ja ću reći da su tri osobe u sobi. Dob osoba broj jedan, recimo 15, 20, 25. A sada ću reći za godinu dana Sada će biti 16, 21, 26. Pogledajmo kako to radi s n da nije jednak 3. Dakle, ako ja kažem broj ljudi je 5, jedan, dva, tri, dva, jedan, za godinu dana oni će biti dva, tri, četiri, tri, dvije godine. Tako sam mogao jednako jednostavno n su se 10.000. Sada ću sjediti ovdje sasvim neko vrijeme ulaska dobi, ali to radi. Tako sada u memoriji negdje smo imaju niz veličine 10.000, pa u konačnici 40.000 bajtova, jer postoji četiri bajta za svaku od tih brojeva. Dakle, postoji niz Veličina 10,000 gdje možemo pohraniti starost tih 10.000 ljudi. U redu. Pitanja o bilo ovo? Da. Što ako je dao negativan broj? Idemo vidjeti što se događa. Dakle, u ovom konkretnom case-- broja ljudi u sobi, negativnom. To je odbacio da je, jer ovdje mi se dogoditi da se rukovanje činjenicu da, ako je n manje od jednog ćemo ponovno pitati. Ako pokušate proglasiti niz negativnih veličine, općenito ne radi. Dakle, pokušajmo. Idemo ignorirati ono Vrijednost im ulaz za n i samo reći Int dobi negativan. Idemo vidjeti ako to čak i sastavlja. Nisam siguran. Ne. Dakle, u dobi je proglašen kao Niz s negativnim veličine. Dakle, unaprijed se prepoznaje niz ne može biti negativna veličina i odbacuje. Sada, ako mi ne obrađuju to učiniti-while petlja ispravno, ako mi ne provjere ako je n manji od 1-- neka mi reći upravo nisu imali to uopće i umjesto da samo zgrabite cijeli broj. Bez obzira što je broj je, izjavljujemo niz te veličine. Dakle, prevodilac ne može možda žaliti sada. Ako sam sastaviti this-- tako da se ne može žaliti, jer se ne može znati da sam će ući negativan broj, što bi moglo biti nevažeći. Za sve što zna, mogao bih unesite pozitivan broj, što je sasvim valjan. Tako sam zamisliti da sam ući negativna 1 ljudi u sobi, segmentacija grešku. Pa ok. Tako ćemo dodati ovo natrag samo držati ga što je izvorno bio. Tako bi dobi. Sad ako želim probati negativni age-- Tako ćemo kažu da je pet ljudi u sobi. Dob osobe broj jedan negativan 4, osoba tri nula, osoba three-- OK. Pa evo, za godinu dana, broj osoba jedan će biti negativan 3 godine. Dakle, vjerojatno nema smisla. Ali to je samo zato što izgleda u kodu sve što radite traži GetInt. Sada, ako smo imali GetPositiveInt funkcija ili mi je jednostavno učinio vrsta istog while petlji tamo dolje, onda će to raditi savršeno u redu. No, u ovaj slučaj, mi jednostavno ne dogoditi da se rukovanje negativne vrijednosti. Ima li još pitanja o nizovima? U REDU. Dakle, sada smo vidjeli polja. A mi ćemo se morati koristiti ovo naredbenog retka argumente. Tako je u problemu postaviti two-- Znam da mnogi od vas Možda još uvijek se radi na problemu setu jedan, ali je problem postaviti dva dolazi. U problema postaviti dva, ti si idući u treba bave strings, polja, i naredbenog retka argumente. Pa što su argumente naredbenog retka? Sada, možete vidjeti ovdje dolje Malo teaser za ono što je će se događati. Vidimo int glavni, INC argc, niz argv zagrade. Dakle, prvo ćemo pokušati tumačiti što to pokušava reći. Sada, u redu. Dakle, u naredbeni redak treba biti navikavanje na neke od tih naredbi sada, a vjerojatno ste pokrenuti cd u terminalu prije. Dakle, ako kažemo cd pset1, znate da je to trebalo se mijenja u pset1 imenik. Sada primijetite da ste nikada pisani program kao što je ovaj prije. Svaki program koji ste napisali, ti bi pokrenuti, recimo, dot slash Mario, dot slash pohlepni, a zatim ga Možda vas pitati za unos. Sada, to nije ono što Promjena katalog radi. Kada pokrenete cd, ne tada reći, što imenik želiš cd u? Umjesto toga, ti samo reći, cd pset1 i to samo ide u pset1 imenik. Slično imamo i druge primjere. bi zdravo. Kada pokrenete napraviti, ne tada reći, koji program želite učiniti? Vi samo reći, u naredbenog retka bi pozdrav. Potez je još jedan primjer. Ovaj mi se pomicanjem mario.c podnijeti jednu imenik. Dakle, sada znamo s ovom primjeru smo stvarno prolaze dva argumenta. Postoji mario.c kao prvi argument, i točka točka je drugi argument. I onda kada pokrenete napraviti, te vidjeti da je stvarno dugo naredbu line-- da stvarno dugo naredbe tiskana u naredbenom retku. Tako da dugo command-- ova je samo kratki dio njega, ali sada imamo tri naredbenog retka argumente. Dot crtica nula, zdravo i hello.c. Dakle, to su naredbenog retka argumente, argumenti da ste prolazu Na naredbenog retka, tako da je ne mora se tražiti kada pokrenete program. Bilo bi frustrirajuće ako pri ste ran zveket je rekao: "U redu, koji program-- koji Datoteka ste sastavljanju? Hello.c. Što bi ti zastave željeli ući? crtica o. Što biste željeli datoteka se zove? bok. Ne, samo pokrenuti zveket crtica o Hello hello.c. Dakle, gledajući unatrag na to. Sada argc-- argc je argument broji. To je broj naredbenog retka Argumenti ušao u naredbenom retku. Pa, argv-- tehnički v zalaže za vektora, koji u osnovi znači niz. Ali možete ignorirati. Argv-- imamo niz argv, tako niz argv zagrade. Dakle, ovo je još jedan oblik zagrađuje niste vidjeli. Dakle, vidjeli smo nosač zapis kad smo je rekao, kao, niz je jednako Zamyla. a nosač 0 pristupa znakova Z. Također smo vidjeli nosače kada smo rekli int dobi omeđi 5. To je izjavio niz veličine 5. Dakle, ovdje je verzija nosači nismo vidjeli. Dakle, ova vrsta string koji argv će biti potpuno upoznati da bi samo biti niz. Sada zagrade ukazuju da je to niz. Tako niz argv zagrade sredstva da argv je niz žice. Sada tehnički niz je niz znakova. Dakle, to je sada niz od niza znakova. No, to je mnogo lakše misliti o to što je samo niz žice. Pa zašto bi moglo zagrade biti prazan? Kao, zašto ne možemo reći, Nosač 5, nosač nje? Da. Da. Ne znamo koliko je Ulazi li će biti. Dakle, ako gledamo zveket primjer, možemo reći zveket crtica o zdravo hello.c. U ovom konkretnom slučaju, postoji dogoditi biti tri naredbenog retka argumente. I tako brackets-- ćemo vidjeti u drugi to ne bi bilo tri. To je tehnički bi bilo četiri. No, nosači, mi bi recimo, postoje tri. Ali sada, ako smo gledali na potez mario.c dot dot, zagrade mi bi htjeli staviti dva u njima. I postoji mnogo naredbi koje imate varijablu broj komandne linije argumenti. Pa što je to verzija Nosač zapis ukazuje da argv je niz žice. No, ne znamo koliko je žice su u tom nizu. A kako ćemo onda znati koliko mnogi nizovi su u nizu? To je cijela točka argc. argc nam govori koliko je argv. Dakle, posljednja stvar koju treba imati na um je da je, tehnički, sama naredba broji kao jedan naredbenog retka argumente u. Dakle cd pset1, postoje dva naredbenog retka argumente. Program u sebi, CD, a zatim stvarni argument dio toga, pset1. Svaki program koji ste do sada napisao je imao jednog naredbenog retka argument-- točku slash Mario. To je jedini argument naredbenog retka. Tako sada gleda na zveket crtica o Hello hello.c. Dakle, ono što je argc? 4. Dakle argc je 4. Jeka, pa argv nosač 0 je zveket. argv nosač 1 je crtica 0. argv nosač 2 je zdravo, a argv nosač 3 hello.c. OK, pitanja o tome, a onda ćemo pogledajte neke programske primjera. U REDU. Tako ćemo pogledati hello3.c. Dakle, to bi trebao biti upoznat s jedan od prvih primjera c imali smo gdje bismo samo reći, pozdravi svijet, ali sada je to više uopće. Dakle, ovdje govorimo pozdravi % s backslash nje argv nosač 1. Notice-- pa sve do sada, to je ono što je moj datoteka predloška je izgledalo. Imao sam int glavni (prazninu), a onda bih učiniti nešto u glavnoj funkciji. Sada, umjesto, nakon što smo započeli bave s naredbenog retka argumente, moramo navesti različiti oblik glavna. Tako gledajući hello3 opet, glavna ide uzeti dva argumenta now-- int argc, broj naredbenog retka argumente, i niz argv zagrada, stvarni žice ušao u naredbenom retku. Tako ću to promijeniti Predložak odražavaju tu činjenicu. Sada kada pišu program, ako ne trebaju poduzeti sve naredbenog retka argumenti, onda samo koristiti int glavni (prazninu). Ali sada, kada pišete argument programa naredbenog retka, što ti si idući u biti događaj za problema postavljen two-- tako da sada radite Programi koji trebaju poduzeti naredbenog retka argumente, morate imati Glavna ovog obrasca. Dakle here-- ovo je velika potrošnja iz naredbenog retka argumente. Tako ispis argv 1. U redu, tako ćemo sastaviti i pokrenite ovaj program. Napravite hello3. Izrađuje. Dot slash hello3. I recimo, "Rob". Pozdrav Rob. Ako kažem "Zdravo Marija" Zdravo Marija. Pozdrav Maria. Hannah dalje kaže: "Pozdrav Maria ", jer nisam radi ništa s našim argv 2. Argv 2 sada će biti "Hannah." Argc bi 3. Što ako sam to učinio? Tako Pozdrav null. Kratko se osvrnuo i na činjenicu da, tehnički, GetString može vratiti null, ali ćemo dobiti puno više u tome što null zapravo jest. Ali uzmi ga kao stvar Činjenica da ne općenito loše. Napravili smo nešto krivo, ako to je ispis "Hello null." A razlog zbog kojeg smo učinili Nešto nije u redu is-- dobro, kad sam trčao dot kose crte hello3, argc je 1. To znači da je duljina argv je 1. Ako niz je duljine 1, jedina valjana indeks je nula. I tako ovdje argv 1 je izvan Raspon tog polja. To je slično kao prije, kada sam pokušao pohraniti 6 izvan kraja niza. Dakle, pokušavam pristupiti nešto izvan argv točaka, a mi smo dobivanje null. Dakle bolji verzija ovo poboljšanje, izričito provjeru argc. Dakle, ako argc jednaka 2, to znači da smo trčali nešto poput točkica Slash hello3 Rob. I to će se ispisati "Hello Rob." Ako argc nije jednak 2, onda samo prolazi ignorirati ono što ste stavili na naredbenog retka argumente kao naredbenog retka argumente. Ili, ako niste stavili bilo na sve, to je Samo će zanemariti da je i samo reći: "Pozdrav ti." Dakle sastavljanju ovo. Napravite hello4. I trčanje hello4. To ovako radi, što bi se ispisati? "Halo vas." Pozdrav ti. Što je hello4 Rob? "Halo Rob." I na kraju, pozdravi Rob Maria je samo "Hello si" opet, zato što stvarno ne ulaze nešto što se očekuje. Unijeli ste više imena nego što je mogao podnijeti, tako da jednostavno ne drži se Hello li ponašanje. Dakle, pitanja o tome? Ili naredbenog retka argumente? U redu, tako da uzimanje pogledati na par više primjera korištenja naredbenog retka arguments-- prvi smo argv crtica 1 točka c. Tako komentari dati ono Ovaj program bi trebao biti događaj. Ali primijetite now-- ovo za petlje, to odgovara točan uzorak Bio sam rekao prije. Mi samo se dogoditi da se koristeći argc umjesto n. Sada argc stvarno n. To je duljina argv polja. Tako su iterating preko argv Niz printf-ing svaku argv vrijednost. Dakle, ako sam napraviti ovaj. Napravite argv 1. Ona sastavlja. Dot slash argv 1. Samo trčanje ovo, to ispisuje dot kose crte argv 1 budući da je bila jedina naredbenog retka argument-- naziv programa. Tu će uvijek biti na least-- argc ne može biti manji od jedan, jer će uvijek barem biti naziv programa za pokretanje. Dakle argv 1 Rob će ispisati argv 1 a potom na novoj liniji "Rob". Tako je u prvoj iteraciji ove petlje, ja je 0. Argv 0 je naziv programa. Dot slash argv 1. A onda argv 1 je moj prvi naredbenog retka argument, što je Rob. U ovom trenutku, mi smo jednaki argc. Lomimo iz petlje i gotovi smo. Dakle, to će raditi za proizvoljna Broj naredbenog retka argumente. Obavijest ispisuje argv 0, argv 1, 2 argv, argv 3, 4 argv. I nema argv 5. argc jednaka 5. Tako je na argc-- na sam jednak 5, lomimo iz petlje. U REDU. Dakle, pitanja o da, prije nego što pogledajte složeniji primjer? Tako argv 2. U redu. Dakle, mi smo još uvijek ispis argumenti naredbenog retka. Ali sada primijetiti imamo ugniježđenu za petlju. Pa što se to radi? Dakle, prva petlja radi točno što je to učinio prije. Još uvijek petlje iznad svaka naredba-crta argument, ali sada ovaj drugi loop-- imamo Također vidjeli nešto ovako prije. Kad je iterating više Zamyla ispis Z-A-M-il-L-a. Dakle, ovaj drugi petlje za int j jednak 0, n = strlen od argv nosača i. Tako ćemo najprije misliti the-- idemo prošetati. Razmislimo što računalo će učiniti ako sam trčao ovaj program samo kao točka slash argv crtica 2. Dakle, ako sam trčao ovaj kod, zatim argc će biti jednak 1. I niz argv-- postoji samo će biti jedan indeks u argv, i da će biti jednaka do točke slash argv 2-- naziv programa. U redu, tako da sada ja jednak 0, ja manje od 1, i plus plus za int j = 0, n = strlen od argv nosača 0, pa je u prva iteracija ovog petlje. argv Nosač 0 je točka slash argv 2. Dakle, što je duljina tog niza? Pa, dot slash A-R-G-V crtica 2. Dakle strlen to će biti 8. Tako j = 0, n = 8. Tako dugo dok je manji od j, 8 j ++. A uz to ćemo biti ispis jedan lik koji je argv nosač ja omeđi j. Dakle, samo sam je nula. Još samo jedan naredbenog retka argument. U toj prvoj iteraciji od za petlju, mi smo će biti tisak argv nosač 0 nosač 0. A onda j će povećavati. I idemo ispis argv nosač 0 nosač 1. A onda argv nosač 0 zagrada 2. Dakle, ovo je naš prvi susret multi-dimenzionalnih polja. Zapamtite ranije da sam rekao da argv je tehnički niz nizova znakova. Dakle ovdje ako sam rekao nešto poput Niz je jednak argv nosač ja, a onda sam rekao, a nosač j, to bi postigli istu stvar. Sada ste vidjeli s nosača j prije. To je samo pristupiti th karakter tog niza. Tako je s ovim, mi smo uzimajući j-ti karakter i-argv. Pa što bi trebao to u konačnici izlaz? Napravite argv 2. Ona sastavlja. Dot slash argv 2. "Rob Maria Ana" i daj nam malo mjesta. Dakle, vidimo da je ovo izlaza točka na vlastitoj liniji i slash na vlastitu liniju i na vlastitu liniju. To je svaki ispis individualni karakter svakog naredbenog retka argumente. A onda između njih, zbog ove nove linije mi smo tiskanje ovdje, u između njih to će ispisati novu liniju. Dakle, to je slično prethodna argv crtica 1, koji ispisuju svaki naredbenog retka argument, ali sada smo ispis naredbenog retka argumenti a zatim iterating kroz svaki karakter svakog naredbenog retka argumente da se ovaj izlaz. U REDU? Dakle, pitanja o tome? Jedna stvar na umu je da naredbenog retka arguments-- tako da su odvojene prostore kao što bi, naravno, očekivati ​​da će biti. Dakle niz može imati mjesta u njoj. To nije super važno, ali ako sam Želio treći naredbenog retka argumente imati mjesta u njoj, onda sam Moglo bi se reći nešto poput ovoga. U REDU? Dakle, to je sada još uvijek ima samo tri naredbenog retka arguments-- i 4. Dot slash argv crtica 2, Rob, Marija i Ana Bloomberg. U REDU. Pitanja o ovome? Nema ništa posebno o razmakom. To se događa samo biti da je naredbenog retka tretira prostor karakter i kako ste odvojili argument. U redu. Pa onda Problem skup two-- da ćeš biti gledajući tajnog ključa kriptografije. Dakle, u tom primjeru slično što smo vidjeli od A Christmas Story, ti si idući u biti provedbi neke algoritmi koji, s obzirom na poruku, ti si idući u biti u mogućnosti šifrirati tu poruku da je samo netko s tom tajnom ključ, s tim dekoder prstenom, trebao moći dešifrirati. Tako da je standardni izdanje. Ti si idući u biti provedbi dvije različite verzije. Ako vam se dogoditi da se pogled na haker izdanje sada ćemo dati ti niz ovako, što predstavlja šifriranu lozinku. Dakle, vaš cilj je shvatiti što raskrivanje lozinka je. Sada je to zapravo kako lozinke spremaju se u puno računala, i to samo sprema ovo slučajni niz znakova. Morate shvatiti kako doći ovog slučajnim niz znakova na ono što je izvorni lozinka. I konačno, nakon toga Problem set, trebali biti u stanju razumjeti što to znači. Tako ćete naučiti kako dešifrirati ova vrsta slučajnih niz. Isto tako, ako se sjećate iz tjedna 0, možda ste vidjeli ovaj URL. A ti bi trebao biti u mogućnosti dešifriranje to s vremenom. Možda nećete biti sretni kad vas dešifrirati ga i kliknite na poveznicu. U redu. To je to za danas. Dakle, vidimo se sljedeći tjedan! [ELECTRONIC glazbom]