1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [Glazba svira] 3 00:00:11,210 --> 00:00:12,100 >> ROB Boden: U redu. 4 00:00:12,100 --> 00:00:15,620 Dakle, prva stvar prvi, video iz poznato lice. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [VIDEO PLAYBACK] 7 00:00:22,560 --> 00:00:23,370 >> -U redu. 8 00:00:23,370 --> 00:00:27,150 Ovo je CS50, a to je Početak trećeg tjedna. 9 00:00:27,150 --> 00:00:29,980 Žao mi je što ne mogu biti s vama i danas, ali dopustite mi da vas upoznam 10 00:00:29,980 --> 00:00:32,880 CS50 vlastiti Rob Boden. 11 00:00:32,880 --> 00:00:33,872 >> [END video reprodukciju] 12 00:00:33,872 --> 00:00:39,340 >> [Pljesak i klicanje] 13 00:00:39,340 --> 00:00:41,277 >> ROB Boden: filmografija u taj video je fantastičan. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 U redu. 16 00:00:47,770 --> 00:00:50,960 Dakle, prvo, postoji još jedan ručak. 17 00:00:50,960 --> 00:00:52,330 To je sutra u 1:15. 18 00:00:52,330 --> 00:00:54,480 Nema Ručak ovog petka. 19 00:00:54,480 --> 00:00:55,810 To je s Quora. 20 00:00:55,810 --> 00:01:00,190 I Tommy nije ovdje, ali jedan od ljudi tamo je bivši šef CF, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Dakle, on je zabavan tip. 23 00:01:02,730 --> 00:01:04,819 Trebao bi doći. 24 00:01:04,819 --> 00:01:05,900 >> U redu. 25 00:01:05,900 --> 00:01:11,360 Tako je prošlog tjedna, počeli smo raspada o tome što je zapravo niz. 26 00:01:11,360 --> 00:01:14,830 Znali smo od početka da to je niz znakova. 27 00:01:14,830 --> 00:01:18,130 No, prošli tjedan, zaronili smo u stvari da je ono što je stvarno slijed 28 00:01:18,130 --> 00:01:22,110 likovi, dobro, sada imamo nizovi znakova. 29 00:01:22,110 --> 00:01:26,450 A mi znamo da vrpca, to je niz znakova, na samom kraju, 30 00:01:26,450 --> 00:01:30,920 imamo posebnu null bajt, to kosih crta 0, koji pokazuje kraj 31 00:01:30,920 --> 00:01:32,230 string. 32 00:01:32,230 --> 00:01:36,970 >> I tako niz je niz likovi, ali možemo imati više od 33 00:01:36,970 --> 00:01:39,530 Samo niz likova, možemo imati niz bilo 34 00:01:39,530 --> 00:01:40,890 tip što želimo. 35 00:01:40,890 --> 00:01:51,570 Dakle, ako se prisjetimo od prošlog tjedna, Vijek program koji David uveo 36 00:01:51,570 --> 00:01:53,560 jako brzo. 37 00:01:53,560 --> 00:01:57,010 Dakle, prvo što ćemo učiniti je pitati korisnik za cijeli broj, 38 00:01:57,010 --> 00:01:58,800 broj ljudi u sobi. 39 00:01:58,800 --> 00:02:01,260 Nakon što smo taj cijeli broj, mi smo progla niz. 40 00:02:01,260 --> 00:02:02,890 Obavijest ovaj nosač sintaksu. 41 00:02:02,890 --> 00:02:04,540 Ti ćeš se naviknuti na to. 42 00:02:04,540 --> 00:02:09,430 >> Tako smo progla niz brojeva zove dobi, a tu su n 43 00:02:09,430 --> 00:02:12,080 cijeli brojevi u ovom polju. 44 00:02:12,080 --> 00:02:16,480 Tako je ovaj uzorak upravo ovdje, ovo 4 int i jednaka je 0, i manji je od nje, i plus 45 00:02:16,480 --> 00:02:20,580 plus, koje se također će biti uzorak da ste vrlo priviknuti. 46 00:02:20,580 --> 00:02:24,000 Jer to je uglavnom kako ste Uvijek ću ponoviti preko polja. 47 00:02:24,000 --> 00:02:26,330 Dakle, ne zaboravite da je n duljina naše polje. 48 00:02:26,330 --> 00:02:32,120 I evo, mi opetovano traže za uzrast od osoba koju sam u sobi. 49 00:02:32,120 --> 00:02:36,640 >> Nakon toga ćemo ići prema dolje, a za sve što proizvoljna razlog, onda bismo 50 00:02:36,640 --> 00:02:40,220 ispisati koliko su stari idete biti za godinu dana. 51 00:02:40,220 --> 00:02:49,980 I cijeli taj program, neka je bi dobi, dot Slash dobi. 52 00:02:49,980 --> 00:02:53,010 Dakle, broj ljudi u sobi, recimo da postoje tri. 53 00:02:53,010 --> 00:02:59,880 I kažu, prva osoba koja je 13, Sljedeći je 26, a posljednja je 30. 54 00:02:59,880 --> 00:03:05,080 Pa onda ću ponoviti je u tri ljudi, ispisati 14., 27. i 31.. 55 00:03:05,080 --> 00:03:16,060 >> Dakle, ne zaboravite da kada izjavljujemo Niz veličine n, indeksi u koje 56 00:03:16,060 --> 00:03:19,950 polje, polje ima vrijednosti i indeksi 0, 1, 2, sve 57 00:03:19,950 --> 00:03:21,680 do nje minus 1. 58 00:03:21,680 --> 00:03:26,255 Dakle, kada smo rekli bilo je troje ljudi u sobi, a mi smo stavili ovdje 59 00:03:26,255 --> 00:03:29,850 prva iteracija kroz to petlje, i što će biti 0. 60 00:03:29,850 --> 00:03:31,650 Tako je u indeksu 0. 61 00:03:31,650 --> 00:03:34,540 Mi se dodjeljuje prvi dobi korisnik unese. 62 00:03:34,540 --> 00:03:38,870 Tada se u sljedeću, ulazimo Drugi n korisnik unese, au 63 00:03:38,870 --> 00:03:40,580 uz dva, posljednji n. 64 00:03:40,580 --> 00:03:44,200 >> Dakle, primijetite da je niz veličini tri nema ništa 65 00:03:44,200 --> 00:03:46,040 u indeksu tri. 66 00:03:46,040 --> 00:03:49,036 To ne vrijedi. 67 00:03:49,036 --> 00:03:50,250 U redu. 68 00:03:50,250 --> 00:03:55,136 Dakle, ide natrag ovdje. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Dakle, sada kada smo se bavila polja, imamo neke upoznatost. 71 00:04:01,590 --> 00:04:03,780 Sada ćemo prijeći na naredbu argumente, koji će biti 72 00:04:03,780 --> 00:04:05,890 prilično relevantni za ovaj problem skupa. 73 00:04:05,890 --> 00:04:09,670 >> Tako je do sada, kad god sam proglasila svoju glavnu funkciju, mi smo 74 00:04:09,670 --> 00:04:11,230 rekao int main void. 75 00:04:11,230 --> 00:04:14,070 Dakle void samo znači da mi ne prolaze bilo 76 00:04:14,070 --> 00:04:16,440 Argumenti za tu funkciju. 77 00:04:16,440 --> 00:04:19,190 Sada ćemo vidjeti da je glavna možete poduzeti neke argumente. 78 00:04:19,190 --> 00:04:22,470 Ovdje ćemo ih zvati int argc i gudački argv nosači. 79 00:04:22,470 --> 00:04:26,930 Nosači, opet, ukazuje da smo se bave polja. 80 00:04:26,930 --> 00:04:31,850 Pa evo, niz argv zagrade, mi smo koja se bavi nizom nizova. 81 00:04:31,850 --> 00:04:35,360 Dakle argc, koji će ukazati koliko argumenata imamo 82 00:04:35,360 --> 00:04:37,580 prošao na ovom programu. 83 00:04:37,580 --> 00:04:46,050 A kako bi vidjeli što to znači, neka se zatvori to. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Dakle, do sada smo se izvoditi svaki Program poput dot kosih dobi. 86 00:04:50,790 --> 00:04:55,250 Možemo također, na zapovjednoj liniji, pokraj pass argumente, dakle termin, naredba 87 00:04:55,250 --> 00:04:56,550 linija argumenata. 88 00:04:56,550 --> 00:04:59,760 Dakle, prvi argument, hello world. 89 00:04:59,760 --> 00:05:03,350 Pa evo, argc će biti tri. 90 00:05:03,350 --> 00:05:07,720 To je broj od argumenata na zapovjednoj liniji. 91 00:05:07,720 --> 00:05:12,840 Argc uvijek najmanje 1 od točke slash dobi, sama, broji kao jedan od 92 00:05:12,840 --> 00:05:14,490 Argumenti naredbenog retka. 93 00:05:14,490 --> 00:05:17,010 >> Zatim pozdraviti je na prvom mjestu. 94 00:05:17,010 --> 00:05:20,460 Ako dot slash dobi je nultoga, a zatim Zdravo je prvi, a svijet je 95 00:05:20,460 --> 00:05:22,830 Drugi argument naredbenog retka. 96 00:05:22,830 --> 00:05:29,490 Tako niz argv, idemo vidjeti, sadrži konce, dot crtu 97 00:05:29,490 --> 00:05:33,830 dobi, hello, i svijet. 98 00:05:33,830 --> 00:05:38,945 I, prema Davidovom zahtjev, idemo igrati video uvođenja toga. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [VIDEO PLAYBACK] 101 00:05:43,890 --> 00:05:46,240 >> -Do sada u programima koje smo napisao, mi smo proglasiti 102 00:05:46,240 --> 00:05:48,500 Glavni kao int main void. 103 00:05:48,500 --> 00:05:51,170 A sve ovo vrijeme, da je nevažeće ima jednostavno je navodeći da 104 00:05:51,170 --> 00:05:54,430 Program ne odgovara argumente naredbenog retka. 105 00:05:54,430 --> 00:05:57,750 Drugim riječima, kada korisnik pokrene Program, on ili ona može dati naredbu 106 00:05:57,750 --> 00:06:01,710 argumente pisanjem dodatnog riječi ili fraze nakon što je Program 107 00:06:01,710 --> 00:06:03,000 ime na upit. 108 00:06:03,000 --> 00:06:06,550 >> Pa, ako želite da vaš program uzeti argumente naredbenog retka, jedan ili 109 00:06:06,550 --> 00:06:10,540 više takvih riječi, moramo zamijeniti poništiti s nekoliko argumenata. 110 00:06:10,540 --> 00:06:12,200 Tako ćemo učiniti. 111 00:06:12,200 --> 00:06:15,750 Uključi CS50.h. 112 00:06:15,750 --> 00:06:19,360 Uključuju standardnu ​​io.h. 113 00:06:19,360 --> 00:06:20,760 Int main. 114 00:06:20,760 --> 00:06:26,330 I sada, umjesto void, idem navesti int argc zove, i 115 00:06:26,330 --> 00:06:28,780 Niz žice pod nazivom argv. 116 00:06:28,780 --> 00:06:31,820 Sada, argc i argv su jednostavno konvencije. 117 00:06:31,820 --> 00:06:34,000 >> Mogli smo pozvani ovi argumenti najviše što god želimo. 118 00:06:34,000 --> 00:06:37,630 No, ono što je važno jest da je argc int jer je, po definiciji, ona je 119 00:06:37,630 --> 00:06:41,360 će sadržavati računati argument, broj riječi u ukupnom da 120 00:06:41,360 --> 00:06:43,380 Korisnik je upisali na njegovu ili njezinu redak. 121 00:06:43,380 --> 00:06:47,910 argv, u međuvremenu, argument vektor, je će zapravo biti niz spremanje 122 00:06:47,910 --> 00:06:52,020 sve riječi koje je korisnik upisali na njegovu ili njezinu redak. 123 00:06:52,020 --> 00:06:54,500 >> Idemo nastaviti raditi nešto danas s jednim ili više od tih 124 00:06:54,500 --> 00:06:55,660 argumente naredbenog retka. 125 00:06:55,660 --> 00:07:00,070 Konkretno, idemo naprijed i print god riječ korisnik upiše 126 00:07:00,070 --> 00:07:03,960 Nakon imena programa na upitu. 127 00:07:03,960 --> 00:07:04,730 Otvorena zagrada. 128 00:07:04,730 --> 00:07:06,240 Zatvori nosač. 129 00:07:06,240 --> 00:07:10,510 Printf posto s kosih crta i zarez. 130 00:07:10,510 --> 00:07:14,550 I sad moram reći printf što vrijednost priključiti u tom rezervirano mjesto. 131 00:07:14,550 --> 00:07:18,600 Želim prve riječi koje korisnik ima upisali po imenu programa, 132 00:07:18,600 --> 00:07:23,130 pa ću navesti argv bracket 1, u neposrednoj blizini 133 00:07:23,130 --> 00:07:24,830 zagrada, zarez. 134 00:07:24,830 --> 00:07:27,290 >> Sada, zašto nosač 1, a ne bracket 0? 135 00:07:27,290 --> 00:07:30,990 Pa, što se ispostavilo, automatski pohraniti u argv 0 će biti 136 00:07:30,990 --> 00:07:32,620 Stvarni ime programa. 137 00:07:32,620 --> 00:07:36,180 Dakle, prva riječ da korisnik upiše nakon što je ime programa je, prema 138 00:07:36,180 --> 00:07:38,990 konvencija, će biti pohranjene u argv 1. 139 00:07:38,990 --> 00:07:42,380 Idemo sada sastaviti i pokrenuti ovaj program. 140 00:07:42,380 --> 00:07:47,780 >> Provjerite argv 0, dot kose crte argv 0. 141 00:07:47,780 --> 00:07:50,520 A sada riječ poput 'bok. 142 00:07:50,520 --> 00:07:51,670 Upišite. 143 00:07:51,670 --> 00:07:53,520 I tamo smo ga, pozdravi. 144 00:07:53,520 --> 00:07:55,750 >> [END video reprodukciju] 145 00:07:55,750 --> 00:07:57,000 >> ROB Boden: U redu. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Zatvorite to. 148 00:08:01,230 --> 00:08:16,730 Dakle, uzimanje pogledati taj program koji samo smo upoznati s nama, dobro, samo 149 00:08:16,730 --> 00:08:24,710 pokazati, ako želimo ispisati argv 0, da, sada što je to, argv 0, dot slash argv 0. 150 00:08:24,710 --> 00:08:30,440 Dakle, kao što se očekuje, to je ispis naziv programa, budući argv 0 je 151 00:08:30,440 --> 00:08:32,970 Uvijek će biti naziv programa. 152 00:08:32,970 --> 00:08:35,640 Ali neka je učiniti nešto malo više zanimljiv. 153 00:08:35,640 --> 00:08:42,080 >> Tako je u problemu setu, vi ćete biti upoznati s ovom funkcije, atoi. 154 00:08:42,080 --> 00:08:44,440 Dakle, ono što mi koristimo atoi za? 155 00:08:44,440 --> 00:08:48,550 To će se pretvoriti string u cijeli broj. 156 00:08:48,550 --> 00:08:53,280 Dakle, ako sam proći niz, jedan, dva, tri, da atoi, koji će se pretvoriti da 157 00:08:53,280 --> 00:08:56,910 na cijeli broj, jedan, dva, tri. 158 00:08:56,910 --> 00:09:01,480 Tako ćemo pretvoriti prva naredbenog retka argument u cijeli broj, 159 00:09:01,480 --> 00:09:05,690 i onda samo ispisati taj prirodni broj. 160 00:09:05,690 --> 00:09:09,680 >> Tako je u osnovi, mi smo vrsta reimplementing getint, samo 161 00:09:09,680 --> 00:09:12,350 cijeli je ušao na zapovijed linije, umjesto u programu 162 00:09:12,350 --> 00:09:14,560 interaktivno. 163 00:09:14,560 --> 00:09:23,170 Dakle, što argv 0, neka je učiniti je ovdje, i zatvoriti to. 164 00:09:23,170 --> 00:09:27,670 Dakle radi argv 0, i neka je ući cijeli broj, jedan, dva, tri i četiri jedan dva. 165 00:09:27,670 --> 00:09:30,840 Dakle, to će ispisati prirodni broj, jedan dva tri četiri jedan dva. 166 00:09:30,840 --> 00:09:35,500 Postoje neke nijanse na atoi da to će prestati brinuti o bilo čemu 167 00:09:35,500 --> 00:09:39,040 izvan valjanog numeričkog karaktera, , ali to nije važno. 168 00:09:39,040 --> 00:09:42,870 >> Dakle, što mislite dogodi ako sam to učiniti? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Segmentacija kriv. 171 00:09:47,050 --> 00:09:50,410 Pa zašto je to tako? 172 00:09:50,410 --> 00:09:56,060 Ako se osvrnemo na naš program, mi smo pretvaranje argv 1, prvi argument 173 00:09:56,060 --> 00:09:59,610 nakon ime programa, na cijeli broj. 174 00:09:59,610 --> 00:10:03,350 No, ne postoji argument prošao nakon što je naziv programa. 175 00:10:03,350 --> 00:10:08,060 Pa evo, vidimo da je to buggy Program, jer, ako ćemo pokušati pokrenuti 176 00:10:08,060 --> 00:10:10,530 bez ikakvih argumenata, samo će se srušiti. 177 00:10:10,530 --> 00:10:16,950 >> Tako je još jedan zajednički uzorak vidjet ćete je nešto slično, ako argc je manje 178 00:10:16,950 --> 00:10:21,100 od dvije, što pokazuje da nije bilo barem naziv programa i 179 00:10:21,100 --> 00:10:29,100 Prvi argument, onda ćemo nešto učiniti kao i printf, nije dovoljno 180 00:10:29,100 --> 00:10:31,190 argumente naredbenog retka. 181 00:10:31,190 --> 00:10:33,170 To je vjerojatno nije dobar za ispis, to je vjerojatno nešto poput 182 00:10:33,170 --> 00:10:35,440 trebali unijeti cijeli broj na zapovjednoj liniji. 183 00:10:35,440 --> 00:10:37,450 Samo ću ga završiti tamo. 184 00:10:37,450 --> 00:10:39,600 A onda se vratiti jednoga. 185 00:10:39,600 --> 00:10:44,740 Dakle, ne zaboravite da je na kraju našeg Program, ako ćemo se vratiti 0, koja vrsta 186 00:10:44,740 --> 00:10:47,060 pokazuje uspjeh. 187 00:10:47,060 --> 00:10:50,940 A glavna je također automatski vraća 0 ako to ne učinite. 188 00:10:50,940 --> 00:10:55,800 >> Pa evo, mi smo retuning 1 za označavanje da to nije uspjeh. 189 00:10:55,800 --> 00:11:01,000 A možete se vratiti što god želite, Samo, 0 označava uspjeh, a 190 00:11:01,000 --> 00:11:03,390 sve drugo pokazuje neuspjeh. 191 00:11:03,390 --> 00:11:04,855 Tako ćemo pokrenuti ovu verziju stvari. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Pa sad, ako mi ne unesete naredbenog retka argument, to će točno reći 194 00:11:16,600 --> 00:11:18,290 nas, nije dovoljno naredbenog retka. 195 00:11:18,290 --> 00:11:20,610 Nije dovršio rečenicu. 196 00:11:20,610 --> 00:11:24,950 Inače, ako mi zapravo to prođe jedan, to može završiti program. 197 00:11:24,950 --> 00:11:27,920 Dakle, ovo je način na koji će koristiti argc u Kako bi provjerili broj 198 00:11:27,920 --> 00:11:30,630 argumente naredbenog retka koji zapravo prošlo. 199 00:11:30,630 --> 00:11:39,360 >> Tako ćemo napraviti ovaj program malo više komplicirano, i pogled na sekundu 200 00:11:39,360 --> 00:11:42,180 iteracija stvari. 201 00:11:42,180 --> 00:11:46,310 Tako sada, mi smo ne samo ispis Prvi argument naredbenog retka. 202 00:11:46,310 --> 00:11:51,210 Evo, mi smo iterating od int i jednakima 0, i manji od argc, i plus 203 00:11:51,210 --> 00:11:55,280 plus, a tisak argv, indeks i. 204 00:11:55,280 --> 00:11:59,300 Tako je ovaj uzorak, opet, to je ista uzorak kao ranije, osim što je umjesto 205 00:11:59,300 --> 00:12:02,600 pozivanja varijablu n, mi koristimo argc. 206 00:12:02,600 --> 00:12:09,520 >> Dakle, ovo je iterating preko svake indeksa u nizu, a ispis svaka 207 00:12:09,520 --> 00:12:11,910 element u tom polju. 208 00:12:11,910 --> 00:12:20,300 I tako, kad smo pokrenuti ovaj program, dobro, Nisam unijeti bilo naredbenog retka 209 00:12:20,300 --> 00:12:22,540 argumenti, tako da samo ispisuje naziv programa. 210 00:12:22,540 --> 00:12:26,053 Ako uđem hrpu stvari, to ću ispisati jednu, svaki na svom liniji. 211 00:12:26,053 --> 00:12:31,213 212 00:12:31,213 --> 00:12:32,210 >> OK. 213 00:12:32,210 --> 00:12:34,770 Tako ćemo uzeti ovaj korak dalje. 214 00:12:34,770 --> 00:12:38,890 I umjesto ispisa svaki argument na vlastitu liniju, neka je ispisati svaki 215 00:12:38,890 --> 00:12:42,590 karakter svakog argumenta na vlastitu liniju. 216 00:12:42,590 --> 00:12:46,700 Dakle, ne zaboravite da je argv Niz od žice. 217 00:12:46,700 --> 00:12:50,960 Dakle, ono što je string, ali niz znakova? 218 00:12:50,960 --> 00:12:57,140 Dakle, to znači da argv stvarno Niz od niza znakova. 219 00:12:57,140 --> 00:13:04,920 Dakle iskorištavanjem da, neka je ignorirati to za sada. 220 00:13:04,920 --> 00:13:08,190 Ajmo uzeti u obzir niz argv 0. 221 00:13:08,190 --> 00:13:14,170 >> Dakle, ako želimo dovesti svaki karakter argv 0 na svojoj liniji, onda želim 222 00:13:14,170 --> 00:13:19,500 učiniti uzorak smo navikli, i je manje od duljine polja, 223 00:13:19,500 --> 00:13:23,990 koja je ovdje, je strlen od, kako je nije ono što želim učiniti, string 224 00:13:23,990 --> 00:13:26,450 s jednako argv 0. 225 00:13:26,450 --> 00:13:30,390 Tako sam je manji od duljine od naših polje, koji je u ovom slučaju niz 226 00:13:30,390 --> 00:13:34,410 znakova, i plus plus. 227 00:13:34,410 --> 00:13:41,040 I tako, kao što smo vidjeli prošlog tjedna, što je idealno ako se krećemo da strlen izvan 228 00:13:41,040 --> 00:13:45,210 stanja, od nje se dodavanjem strlen od s. svaki put idemo 229 00:13:45,210 --> 00:13:47,720 kroz petlju, a to je neće biti promjena. 230 00:13:47,720 --> 00:13:50,230 Dakle, mi ćemo ga jednako n nad ovdje postaviti. 231 00:13:50,230 --> 00:13:54,260 232 00:13:54,260 --> 00:13:55,170 >> OK. 233 00:13:55,170 --> 00:14:01,320 Tako sada, mi smo iterating tijekom svaki indeks u polju. 234 00:14:01,320 --> 00:14:05,630 I tako, ako želimo ispisati svaki lik u toj polja, posto je c 235 00:14:05,630 --> 00:14:06,880 zastava želimo koristiti za likove. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 I sada sam nosač će biti string, indeks znak i, pa ako 238 00:14:19,770 --> 00:14:20,970 Niz bili bok. 239 00:14:20,970 --> 00:14:27,530 onda je 0 će biti H, s nosača 1 će biti E, i tako dalje. 240 00:14:27,530 --> 00:14:30,800 >> Dakle, sada želimo kombinirati ove dvije stvari. 241 00:14:30,800 --> 00:14:35,440 Želimo ispisati svaki lik svakog naredbenog retka argument. 242 00:14:35,440 --> 00:14:38,950 Tako ćemo imati ugniježđeni for petlje. 243 00:14:38,950 --> 00:14:47,480 I konvencionalno, prvi brojač Ja se, pored će biti j, n 244 00:14:47,480 --> 00:14:54,450 će biti strlen od argv sam, manji od nje, i plus plus. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 I sad umjesto da tiska argv I, tako argv nosač i ide na indeksu - 247 00:15:06,870 --> 00:15:14,280 da će biti i-ti naredbenog retka argument, argv i, j će 248 00:15:14,280 --> 00:15:16,925 biti j karakter i-ti argument. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Ja ću se riješiti ovog ovdje sada budući da smo ga stavili u tu petlju. 251 00:15:24,810 --> 00:15:33,900 Tako je ekvivalent String s jednakima argv ja, a onda je nosač j. 252 00:15:33,900 --> 00:15:36,980 >> Pa, mi ne trebamo da se proglasi ova varijabla je. 253 00:15:36,980 --> 00:15:44,530 Umjesto toga, samo ćemo iskombiniramo dva u ono što smo imali, argv I, J. 254 00:15:44,530 --> 00:15:45,780 >> ZVUČNIK 1: [nečujan]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB Boden: Dobra odluka. 257 00:15:49,680 --> 00:15:52,936 Dakle, ovo je slomljen. 258 00:15:52,936 --> 00:15:55,510 Ako sam zapravo ga je vodio, mi bi Shvatili su to. 259 00:15:55,510 --> 00:16:01,210 Dakle, brojač mi je stalo u ovom za 260 00:16:01,210 --> 00:16:05,410 petlja je j, iterator. 261 00:16:05,410 --> 00:16:08,560 Tako da bi upasti u probleme, Vjerojatno beskonačnu petlju, ako smo 262 00:16:08,560 --> 00:16:09,540 nije fiksna to. 263 00:16:09,540 --> 00:16:12,220 Zato smo i pričamo O ispravljanje pogrešaka i danas. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Tako ćemo pokrenuti ovaj program. 266 00:16:15,240 --> 00:16:21,200 I neka je zapravo dodati zasebnu printf Ovdje koja će samo ispisati 267 00:16:21,200 --> 00:16:27,480 druga linija, jer to znači kad smo pokrenuti program, bit će prazna 268 00:16:27,480 --> 00:16:31,830 linija između svakog karaktera svaki argument komandne linije. 269 00:16:31,830 --> 00:16:33,448 Pa, vidjet ćemo što to znači. 270 00:16:33,448 --> 00:16:37,310 271 00:16:37,310 --> 00:16:37,790 Oop. 272 00:16:37,790 --> 00:16:39,870 Imam neki bug. 273 00:16:39,870 --> 00:16:42,860 Pogreška implicitno proglašenje biblioteka funkcija strlen. 274 00:16:42,860 --> 00:16:51,630 >> Dakle, ide natrag u naš program, mi zaboravio hash uključuju string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Dakle string.h će biti header file koji izjavljuje 277 00:16:57,730 --> 00:16:58,980 funkcija strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, ona prikuplja. 280 00:17:06,060 --> 00:17:09,109 Sada, neka je na njoj. 281 00:17:09,109 --> 00:17:10,930 Pa upravo to. 282 00:17:10,930 --> 00:17:17,790 To će se ispisati na našim naziv programa, hello world. 283 00:17:17,790 --> 00:17:23,510 To će ispisati svaku stvar, svaki karakter, na vlastitu liniju. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Pa neka je zapravo uzeti jedan korak dalje. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 I umjesto da koristi string.h, neka je razmišljati o tome kako ćemo provesti sami 288 00:17:39,700 --> 00:17:41,420 strlen funkcija. 289 00:17:41,420 --> 00:17:45,600 Dakle, ja ću odmah dati Funkcija potpis. 290 00:17:45,600 --> 00:17:52,900 Tako ćemo nazvati my_strlen, i to je će poduzeti niz kao argument, 291 00:17:52,900 --> 00:17:57,220 i očekujemo da će se vratiti Dužina tog niza. 292 00:17:57,220 --> 00:18:03,430 Dakle, gdje je taj tip? 293 00:18:03,430 --> 00:18:04,990 Da. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Pa sjećate iz ranijoj slici koja je također bio od prošlog tjedna, da 296 00:18:12,900 --> 00:18:18,890 Niz likova, dobro, string, pa recimo da je ovo naš niz e. 297 00:18:18,890 --> 00:18:29,870 Dakle, ako je je string, 'bok, a zatim, H-E-L-L-O, u znak sjećanja, koja će se 298 00:18:29,870 --> 00:18:35,610 biti, a onda je to znak obrnute kose 0 znakova. 299 00:18:35,610 --> 00:18:39,170 >> Pa kako ćemo dobiti duljinu s? 300 00:18:39,170 --> 00:18:43,190 Pa, trik je u potrazi za to zazor 0 karakter, ovaj null 301 00:18:43,190 --> 00:18:44,380 terminator. 302 00:18:44,380 --> 00:18:50,270 Dakle, algoritam je idući biti nešto poput neke 303 00:18:50,270 --> 00:18:51,510 dovoljno znakova da - 304 00:18:51,510 --> 00:18:56,180 popijmo ova ruka predstavljaju neke brojač, nazovimo ovu dužinu int. 305 00:18:56,180 --> 00:19:00,060 Dakle, počevši od ovdje, da smo će se ponoviti preko našeg niza. 306 00:19:00,060 --> 00:19:04,100 >> Dakle, prvi znak, to je H, i nije vratio udarac 0, pa 307 00:19:04,100 --> 00:19:05,170 Duljina je 1. 308 00:19:05,170 --> 00:19:08,050 Ponoviti na sljedeći znak, E, a to nije obrnute kose crte 0. 309 00:19:08,050 --> 00:19:09,630 Duljina je 2. 310 00:19:09,630 --> 00:19:10,960 L, 3. 311 00:19:10,960 --> 00:19:11,850 L, 4. 312 00:19:11,850 --> 00:19:13,050 O, 5. 313 00:19:13,050 --> 00:19:16,690 I na kraju, dolazimo do obrnute kose crte 0, i tako to znači, dobro, 314 00:19:16,690 --> 00:19:17,780 ovaj niz je gotova. 315 00:19:17,780 --> 00:19:20,130 Tako ćemo se vratiti pet. 316 00:19:20,130 --> 00:19:33,630 >> Tako zapravo provedbi da, prvo, moja dužina je n = 0, moja desna ruka. 317 00:19:33,630 --> 00:19:36,088 A mi ćemo ponoviti - 318 00:19:36,088 --> 00:19:38,000 >> ZVUČNIK 1: [nečujan] 319 00:19:38,000 --> 00:19:38,640 >> ROB Boden: Oh, pucati. 320 00:19:38,640 --> 00:19:39,870 Dobra odluka. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 Dakle duljinom n = 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Tako sada, dok je dužina ne jednaka, a zatim, kosih crta 0. 325 00:19:58,310 --> 00:20:04,660 Dakle, ne zaboravite, ovo kosu crtu 0, to je stvarni lik, a to ukazuje 326 00:20:04,660 --> 00:20:05,820 kraj niza. 327 00:20:05,820 --> 00:20:09,850 Baš kao što je, također, backslash n je stvarni lik. 328 00:20:09,850 --> 00:20:14,040 Backslash 0 će se naznačiti Kraj našeg niza. 329 00:20:14,040 --> 00:20:15,414 Ne želim staviti da postoji. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 I dok s valutnom klauzulom po duljini nije jednaka je null terminator, a zatim 332 00:20:25,620 --> 00:20:27,130 Samo ćemo povećavati dužinu. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Dakle, na kraju našeg programa, Duljina na kraju će 335 00:20:34,880 --> 00:20:37,610 biti 5 u ovom slučaju. 336 00:20:37,610 --> 00:20:39,210 A mi ćemo se vratiti duljinu. 337 00:20:39,210 --> 00:20:42,570 338 00:20:42,570 --> 00:20:43,530 >> OK. 339 00:20:43,530 --> 00:20:48,290 Tako sada ovdje, ne znam učiniti my_strlen. 340 00:20:48,290 --> 00:20:50,700 Idemo ga sastaviti kako bi bili sigurni sve teče glatko. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Radila sam u 2? 343 00:20:58,210 --> 00:21:00,565 Ili je to bio 1? 344 00:21:00,565 --> 00:21:01,940 To bi trebalo učiniti. 345 00:21:01,940 --> 00:21:02,690 U redu. 346 00:21:02,690 --> 00:21:08,490 Dakle, ovo je argv 2. 347 00:21:08,490 --> 00:21:11,585 Radovi prema planu, iako je da je jedan sam to učinio u? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Da. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Ova verzija stvari nisu imali printf nova linija nakon, ali to 352 00:21:21,820 --> 00:21:22,910 ne čini nikakvu razliku. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Tako je radio kako treba. 355 00:21:25,780 --> 00:21:34,750 >> Sada možemo čak kombinirati ovaj jedan korak dalje, gdje je obavijest ovdje, dobro, 356 00:21:34,750 --> 00:21:38,920 Prvo, mi smo grabbing strlen od argv ja, a onda smo iterating više 357 00:21:38,920 --> 00:21:41,450 svaki lik u tom nizu. 358 00:21:41,450 --> 00:21:47,480 Dakle, umjesto da radi, što ako smo Samo kombinirati ovu logiku čeka 359 00:21:47,480 --> 00:21:50,740 sve dok se ostvario obrnute kose crte 0 pravo u ovaj za petlje? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Tako ponoviti dok argv i, j ne nije jednako backslash 0. 362 00:22:07,490 --> 00:22:10,680 Tako ćemo ga pokrenuti prvi. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> U redu. 365 00:22:21,180 --> 00:22:27,655 Dakle, ovdje, to stanje je rekao - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 neka je jasno da je. 368 00:22:40,060 --> 00:22:49,140 Tako sada, neka to bude naša argv. 369 00:22:49,140 --> 00:22:55,290 Pa kad sam samo uletio taj program prije, argv je niz žice. 370 00:22:55,290 --> 00:23:03,100 I tako, ako sam ga pokrenuti s dot slash argv 2, hello world, onda argv 371 00:23:03,100 --> 00:23:07,650 Sama je dužina 3, za argv nula, hello, i svijet. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> A unutar svake od ovih indeksa je, Sama polje, gdje će ovo biti 374 00:23:19,660 --> 00:23:23,780 dot, to će biti udarac, ne znam je li to pravi smjer, ja 375 00:23:23,780 --> 00:23:25,680 ne mislim da je to bio. 376 00:23:25,680 --> 00:23:30,110 -R-V crtica, treba više prostora. 377 00:23:30,110 --> 00:23:32,570 Prestanimo se u ovom polju. 378 00:23:32,570 --> 00:23:38,230 -R-V crtica 0, a zatim backslash 0. 379 00:23:38,230 --> 00:23:43,160 A onda je u rasulu će pozdraviti. 380 00:23:43,160 --> 00:23:45,910 Recimo, H-E kosu crtu 0. 381 00:23:45,910 --> 00:23:51,130 I na kraju, W-O backslash 0. 382 00:23:51,130 --> 00:23:59,730 >> Dakle, algoritam koji smo upravo napisao, uklopljeni za petlje, što oni 383 00:23:59,730 --> 00:24:07,321 događaj je, prvo moramo suprotstavio sam se i zatim j. 384 00:24:07,321 --> 00:24:15,206 To će biti lakše s kodom na screen, Vratimo se to. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Dakle, primijetite da sam je iteratora da je iterating preko svake naredbe 387 00:24:24,600 --> 00:24:25,610 linija argument. 388 00:24:25,610 --> 00:24:28,870 A j iteratora Ponavljanje tijekom svakog lika u koji 389 00:24:28,870 --> 00:24:30,410 naredbenog retka argument. 390 00:24:30,410 --> 00:24:46,755 Pa što je to unutarnja printf radi je, mi smo printf argv 0 0, printf 391 00:24:46,755 --> 00:24:58,680 argv 0 1, printf argv 0 2, 0 3, 4 0, 0 5, 6 0, ali sada, argv 0 7 ide 392 00:24:58,680 --> 00:25:00,670 jednaka backslash 0. 393 00:25:00,670 --> 00:25:05,730 >> Onda smo izašli da za petlje, i sad ja iterates na 1. 394 00:25:05,730 --> 00:25:10,910 A sada idemo u tisku argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 dobro, sad, budući da sam rezati bok kratko, argv 1 2 ponovno će biti 396 00:25:17,040 --> 00:25:18,170 backslash 0. 397 00:25:18,170 --> 00:25:25,050 I tako, povećajte ja i nastaviti, te tako dalje, sve dok ne ispišete sve 398 00:25:25,050 --> 00:25:28,580 svijet, a to su tri naredbenog retka argumente, a mi ćemo izlaz iz 399 00:25:28,580 --> 00:25:31,670 Najudaljeniji petlje, a završiti naš program. 400 00:25:31,670 --> 00:25:38,390 401 00:25:38,390 --> 00:25:39,640 OK. 402 00:25:39,640 --> 00:25:43,903 403 00:25:43,903 --> 00:25:46,795 >> Tako ćemo se vratiti ovdje. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Tako ćete dobiti neke upoznatost s argumente naredbenog retka na to 406 00:25:52,370 --> 00:25:54,460 Poseban je problem postaviti. 407 00:25:54,460 --> 00:25:56,630 >> Sada, ispravljanje pogrešaka. 408 00:25:56,630 --> 00:26:01,680 Tako ste vjerojatno već su morali učiniti Neki ispravljanje pogrešaka s prethodnim 409 00:26:01,680 --> 00:26:03,120 Problem postaviti. 410 00:26:03,120 --> 00:26:08,420 I jedan vrlo jednostavan način za ispravljanje pogrešaka, Prvo, pogledajmo buggy programa. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 Pa, šetnji kroz ovaj program, ćemo pitati korisnik za 413 00:26:23,830 --> 00:26:29,350 cijeli broj, zgrabite cijeli broj, a zatim, proizvoljno, imamo while petlja koja 414 00:26:29,350 --> 00:26:32,280 se samo ide na opadanje I dok je jednako 10. 415 00:26:32,280 --> 00:26:35,820 Neka samo Pretpostavimo Ulazim broj veći od 10. 416 00:26:35,820 --> 00:26:38,700 Dakle dekrementirati i dok je jednako 10. 417 00:26:38,700 --> 00:26:42,630 >> I onda imamo još jedan while petlja da, a ja ne jednaka 0, mi smo 418 00:26:42,630 --> 00:26:44,540 ide ja dekrementirati po tri. 419 00:26:44,540 --> 00:26:49,790 Dakle, ako vidite namjeru buga ovdje, to je da će ovo dekrementirati sam 420 00:26:49,790 --> 00:26:57,010 biti 10, a onda je to dok petlja će opadanje I, od 10 do 7, do 4, na 1, 421 00:26:57,010 --> 00:27:02,880 za negativne 2, na negativni 5, i tako dalje, na negativne beskonačnosti, jer ja ću 422 00:27:02,880 --> 00:27:05,920 Nikad zapravo jednaka 0.. 423 00:27:05,920 --> 00:27:08,610 I onda na kraju ovog programa, imamo Foo funkciju koja je 424 00:27:08,610 --> 00:27:12,130 ide na ispis iz koje ja. 425 00:27:12,130 --> 00:27:16,520 >> Dakle, ovo je kratak i beznačajan programa, i bug je očito, 426 00:27:16,520 --> 00:27:18,790 pogotovo nakon što sam upravo rekao je ono što je bug. 427 00:27:18,790 --> 00:27:24,840 No namjera ovdje je, dobro, to bi moglo zapravo izgledaju neke od vaših 428 00:27:24,840 --> 00:27:30,040 rješenja iz pohlepni od prošle Problem set, a možda nemate 429 00:27:30,040 --> 00:27:32,800 Neki klapa u svom programu, a vi nemate pojma 430 00:27:32,800 --> 00:27:34,100 što je uzrok. 431 00:27:34,100 --> 00:27:38,690 Dakle, vrlo korisno za ispravljanje pogrešaka tehnika je samo dodati printfs 432 00:27:38,690 --> 00:27:40,180 cijelom kodu. 433 00:27:40,180 --> 00:27:49,200 >> Dakle, ovdje želim printf izvan Prvi while petlja. 434 00:27:49,200 --> 00:27:53,155 I ovdje želim printf, a ja ću samo ispisati i. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Čak ću učiniti prvi while petlja, ja. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Vani, druga while petlja. 439 00:28:09,040 --> 00:28:12,170 Još jednom, ispisati unutar odavde, vrijednost i.. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 I neka je pokrenuti ovo. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Dakle dot slash debug. 444 00:28:24,800 --> 00:28:25,610 Unesite cijeli broj. 445 00:28:25,610 --> 00:28:28,150 Učinimo 13. 446 00:28:28,150 --> 00:28:28,760 I bum. 447 00:28:28,760 --> 00:28:33,300 Vidimo da su beskonačne petlje unutar drugog, dok petlja. 448 00:28:33,300 --> 00:28:36,305 Dakle, sada znamo što je bug. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Ali printf ispravljanje pogrešaka je savršeno super, ali jednom vaši programi dobiti 451 00:28:45,610 --> 00:28:50,560 duži i složeniji, postoje više sofisticirana rješenja za 452 00:28:50,560 --> 00:28:51,705 uzimajući stvari rade. 453 00:28:51,705 --> 00:28:52,955 Tako ćemo ukloniti sve ove printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 I pobrinite se da nisam razbiti ništa. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Dakle Program idemo upoznati se zove 458 00:29:14,180 --> 00:29:16,715 GDB, za GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 Pa, zapravo, neka je ukloniti debug za Drugi, i napraviti ispravljanje opet. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 Pa, zapravo je prvi, dobra lekcija u argumente naredbenog retka. 463 00:29:34,440 --> 00:29:37,780 Uočite da je ovo Dong naredba koja je sastavljanju sve se prošli 464 00:29:37,780 --> 00:29:41,300 na zapovjednoj liniji, to argumente naredbenog retka. 465 00:29:41,300 --> 00:29:46,250 Dakle, točno kako ćete se pomoću argumente naredbenog retka, kao što smo 466 00:29:46,250 --> 00:29:51,500 i prije, i kao što će u pset 2, to je kako Dong se njima koristi. 467 00:29:51,500 --> 00:30:00,070 >> Dakle, primijetite da je ova prva zastava, crtica ggdb3, što to govori jest, Dong, 468 00:30:00,070 --> 00:30:03,790 trebali sastaviti ovu datoteku s Namjera da ćemo s vremenom 469 00:30:03,790 --> 00:30:05,380 treba ga debug. 470 00:30:05,380 --> 00:30:13,840 Dakle, dok god imate tu zastavu, Tada možemo GDB ispravljanje. 471 00:30:13,840 --> 00:30:17,380 I to će otvoriti GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> Dakle, postoji mnogo naredbi što vam je potrebno da se navikne. 473 00:30:22,920 --> 00:30:27,100 Prvo jedan koji vjerojatno ćete odmah trebate je Run. 474 00:30:27,100 --> 00:30:28,200 Dakle, ono što je vožnja će učiniti? 475 00:30:28,200 --> 00:30:30,910 Bit će to početak našeg programa. 476 00:30:30,910 --> 00:30:36,180 Dakle trčanje, počevši program, program nas pita za broj, 13 godina. 477 00:30:36,180 --> 00:30:39,170 A onda je beskonačna petlje kao Očekuje se, osim što sam uklonio 478 00:30:39,170 --> 00:30:40,500 printfs, tako da ni ne vidi. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Izašao normalno. 481 00:30:44,600 --> 00:30:45,850 Oh. 482 00:30:45,850 --> 00:30:48,570 483 00:30:48,570 --> 00:30:53,640 Moguće je da je omotana obrnuto, natrag - ignoriranje toga. 484 00:30:53,640 --> 00:30:55,170 Pretpostavimo da nisu izašli normalno. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Tu je komplicirano odgovor na to. 487 00:31:03,370 --> 00:31:07,890 >> Pa sad, to nije vrlo korisno. 488 00:31:07,890 --> 00:31:11,480 Dakle, samo trčanje naš program unutar to debugger ne nam pomoći u bilo 489 00:31:11,480 --> 00:31:15,610 način, jer smo mogli samo učinio dot slash ispravljanje izvana GDB. 490 00:31:15,610 --> 00:31:21,250 Dakle, jedna naredba da vjerojatno ćete - 491 00:31:21,250 --> 00:31:22,970 i ja ću prestati to. 492 00:31:22,970 --> 00:31:25,850 Kontrola-d ili prestati, oba posla. 493 00:31:25,850 --> 00:31:29,550 Tako ćemo ga ponovno otvoriti. 494 00:31:29,550 --> 00:31:31,130 >> Druga naredba da ćete vjerojatno odmah žele 495 00:31:31,130 --> 00:31:33,600 Naviknut je Break. 496 00:31:33,600 --> 00:31:37,120 Tako ćemo razbiti na glavni za sada, a onda ću objasniti. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 Pa, ovdje smo vidjeli smo postavili prijelomna točka na toj liniji u debug.c. 499 00:31:46,370 --> 00:31:50,160 Pa što pauza znači da kada sam tipa trčanje, program će 500 00:31:50,160 --> 00:31:53,560 nastaviti prikazivati ​​sve dok Udario sam prijelomna točka. 501 00:31:53,560 --> 00:31:59,390 Dakle, kada sam pogodio trčanje, program počinje, , a zatim se lomi čim to 502 00:31:59,390 --> 00:32:01,940 ulazi u glavnu funkciju. 503 00:32:01,940 --> 00:32:06,930 Break glavni će biti nešto što prilično obično učiniti. 504 00:32:06,930 --> 00:32:11,340 >> I sada, da vas upoznam na neke više naredbi. 505 00:32:11,340 --> 00:32:14,330 Obavijest ovdje, da govori mi razlomi na liniju 11, koja je 506 00:32:14,330 --> 00:32:16,230 printf, unesite cijeli broj. 507 00:32:16,230 --> 00:32:21,260 Tako će naredba Sljedeća će biti kako idemo u sljedeći redak koda. 508 00:32:21,260 --> 00:32:24,810 To će nam omogućiti da korak Kroz naš program redak po redak. 509 00:32:24,810 --> 00:32:26,260 Zato sljedeći. 510 00:32:26,260 --> 00:32:29,820 >> Sada linije 12, idemo dobiti cijeli broj. 511 00:32:29,820 --> 00:32:30,450 Next. 512 00:32:30,450 --> 00:32:34,290 A ako samo pritisnite Enter opet, to ću Ponovi posljednju stvar si učinio. 513 00:32:34,290 --> 00:32:36,480 Tako da ne trebate upisati Sljedeći svaki put. 514 00:32:36,480 --> 00:32:40,100 Dakle, unesite cijeli broj, 13. 515 00:32:40,100 --> 00:32:46,940 Tako sada, linije 14, dok sam veći od 10, a ja ću učiniti. 516 00:32:46,940 --> 00:32:48,685 A vidimo da ćemo ja opadanje. 517 00:32:48,685 --> 00:32:50,210 Tako ćemo opet opadanje. 518 00:32:50,210 --> 00:32:53,620 >> Tako sada, još jedan koristan naredba ispisa. 519 00:32:53,620 --> 00:32:55,750 Dakle Ispis će ispisati vrijednost u varijable. 520 00:32:55,750 --> 00:32:57,825 Idemo izvedem vrijednost promjenjivog ja. 521 00:32:57,825 --> 00:32:58,705 Idemo ja ispisati. 522 00:32:58,705 --> 00:33:00,910 To će reći da je 11. 523 00:33:00,910 --> 00:33:03,330 Sada smo opet Next, dok I je veći od 10. 524 00:33:03,330 --> 00:33:05,590 Dakle, ja je još uvijek veći od 10, jer je 11. 525 00:33:05,590 --> 00:33:06,920 Ja minus minus. 526 00:33:06,920 --> 00:33:08,250 Idemo opet ispisati. 527 00:33:08,250 --> 00:33:10,950 Kao što se očekivalo, što je 10. 528 00:33:10,950 --> 00:33:12,510 >> Pa sad, iduće. 529 00:33:12,510 --> 00:33:16,250 To ide natrag u stanje, i je veći od 10, ali ja je sada 10, pa 530 00:33:16,250 --> 00:33:20,040 to nije veći od 10, tako da očekujemo to bi ispasti iz while petlje. 531 00:33:20,040 --> 00:33:22,220 I sad smo ispod te linije koda. 532 00:33:22,220 --> 00:33:28,750 I još jedna naredba, popis, samo ide prikazati natrag i naprijed 533 00:33:28,750 --> 00:33:31,240 nekoliko linija koda, u slučaju da se izgubio. 534 00:33:31,240 --> 00:33:35,420 Tako smo upravo izašli ovu while petlja, i sada smo ušli u ovaj 535 00:33:35,420 --> 00:33:37,080 while petlja, linija 18. 536 00:33:37,080 --> 00:33:39,860 Dakle, dok sam nije jednak 0. 537 00:33:39,860 --> 00:33:46,570 I, pored, i jednako ja minus tri, a mi ćemo primijetiti, to ću zadržati ide. 538 00:33:46,570 --> 00:33:48,270 I možemo ispisati i. 539 00:33:48,270 --> 00:33:49,990 >> Svaka naredba vrsta ima prečace. 540 00:33:49,990 --> 00:33:51,720 Dakle, p je kratica za Print. 541 00:33:51,720 --> 00:33:53,400 Tako možemo P Ja. 542 00:33:53,400 --> 00:33:57,550 Samo imajte drži n, ili zadržati radi Next. 543 00:33:57,550 --> 00:33:58,340 Ponovno ispisati i. 544 00:33:58,340 --> 00:34:00,380 Vidite sada je negativna 167. 545 00:34:00,380 --> 00:34:06,030 Dakle, to će trajati vječno, ali ne stvarno zauvijek, jer ste upravo vidjeli, to 546 00:34:06,030 --> 00:34:09,330 zapravo će završiti u nekom trenutku. 547 00:34:09,330 --> 00:34:15,699 >> Dakle, koja je na početku GDB. 548 00:34:15,699 --> 00:34:19,504 No, idemo napraviti još jednu stvar u GDB. 549 00:34:19,504 --> 00:34:20,754 Uh, debug. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Dakle, u ovom konkretnom slučaju, klapa dogodilo da se unutar 552 00:34:28,534 --> 00:34:30,050 Glavna funkcija. 553 00:34:30,050 --> 00:34:35,779 A za sada, samo prihvatiti da je to sam useliti beskonačnu petlju u 554 00:34:35,779 --> 00:34:37,029 Funkcija foo. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Dovoljno se sjetiti da je, na kraju to Program, dobro, ovo je izvorno 557 00:34:43,730 --> 00:34:46,210 nazivajući Foo, koji je bio pravedan će se ispisati. 558 00:34:46,210 --> 00:34:51,880 Ali sada smo pozivom Foo, što je će dekrementirati sam dok je 0, a 559 00:34:51,880 --> 00:34:54,548 zatim ispisati tu varijablu. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Spremi to. 562 00:34:57,970 --> 00:35:00,175 Napravite ispravljanje. 563 00:35:00,175 --> 00:35:03,310 I sada, gdb debug. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Dakle, ako sam samo pokrenuti onda ja ne idem biti u mogućnosti da se zapravo korak kroz moje 566 00:35:10,580 --> 00:35:11,730 Program linije-by-line. 567 00:35:11,730 --> 00:35:19,820 Tako ćemo razbiti na glavni, a zatim upisati trčanje. 568 00:35:19,820 --> 00:35:28,160 Dakle, proći kroz to, printf, unesite cijeli broj, dobiti cijeli broj, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Tako ćemo zadržati decrementing I dok je veći od 10. 571 00:35:37,490 --> 00:35:42,840 Onda ćemo pasti kroz while petlja, i doći na liniju - 572 00:35:42,840 --> 00:35:44,364 idemo ga otvoriti u zasebnom prozoru. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Tako smo se smanjuju dok sam bio više nema veći od 10, a zatim ćemo 575 00:35:53,300 --> 00:35:55,700 zove funkciju, Foo. 576 00:35:55,700 --> 00:36:01,340 >> Dakle, ono što se dogodilo čim sam pogodio Funkcija Foo, dobro, nazvao sam foo, te 577 00:36:01,340 --> 00:36:04,030 tada više nisam imala kontrolu nad GDB. 578 00:36:04,030 --> 00:36:10,230 Dakle, čim sam pogodio Dalje na ovoj liniji, stvari i dalje dok se to dogodilo, 579 00:36:10,230 --> 00:36:12,400 gdje je program izašao kada - 580 00:36:12,400 --> 00:36:14,450 Pretpostavljam da nije postojao na kraju. 581 00:36:14,450 --> 00:36:16,390 Vidjeli ste ga stanka za malo ipak. 582 00:36:16,390 --> 00:36:22,040 Pa zašto sam izgubila kontrolu nad Program u tom trenutku? 583 00:36:22,040 --> 00:36:27,540 Pa, kad sam upisati sljedeći, koji ide na Doslovni sljedeća linija koda koji 584 00:36:27,540 --> 00:36:28,850 će izvršiti. 585 00:36:28,850 --> 00:36:35,950 Dakle, nakon što je linija 21, pored linija koda koji će izvršavati je linija 22, 586 00:36:35,950 --> 00:36:38,520 koji je, izlazeći iz glavna. 587 00:36:38,520 --> 00:36:43,810 Dakle, ja ne želim da se samo ići u sljedeći redak koda. 588 00:36:43,810 --> 00:36:48,170 Želim ići na funkcije, Foo, , a zatim i korak kroz 589 00:36:48,170 --> 00:36:49,830 ta linija koda. 590 00:36:49,830 --> 00:36:53,726 >> Pa za to, imamo alternativu. 591 00:36:53,726 --> 00:36:56,770 Idemo opet prestati da. 592 00:36:56,770 --> 00:36:58,020 Break glavna. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, pored, pokraj, 13, sljedeći, next, next, pažljivo, 595 00:37:06,370 --> 00:37:09,820 Prije nego što smo pogodak linije foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Tako sada, mi smo na liniji 21, gdje smo pozvati foo. 598 00:37:13,700 --> 00:37:17,100 Mi ne želimo upisati sljedeći, budući da je samo će pozvati funkciju foo, te 599 00:37:17,100 --> 00:37:18,710 idi na sljedeću liniju koda. 600 00:37:18,710 --> 00:37:20,840 Ono što želimo je iskoristiti korak. 601 00:37:20,840 --> 00:37:25,690 Dakle, postoji razlika između koraka i Next, gdje Korak uđe 602 00:37:25,690 --> 00:37:28,190 funkcionirati, i ide Sljedeća preko funkcije. 603 00:37:28,190 --> 00:37:32,830 To samo izvršava u cijelosti funkcija i ide dalje. 604 00:37:32,830 --> 00:37:37,210 >> Dakle korak će nam donijeti u funkciji, Foo. 605 00:37:37,210 --> 00:37:41,160 I ovdje vidimo, sad, vratili smo se na to dok petlja koja je, u teoriji, 606 00:37:41,160 --> 00:37:44,190 će trajati vječno. 607 00:37:44,190 --> 00:37:50,420 A ako hit korak, kada to nije ni Funkcija nazvati, onda je 608 00:37:50,420 --> 00:37:51,720 identičan Next. 609 00:37:51,720 --> 00:37:55,320 Dakle, to je samo kada ste na liniji koja poziva funkciju koja Korak 610 00:37:55,320 --> 00:37:56,970 će se razlikovati od iduće. 611 00:37:56,970 --> 00:37:57,930 Dakle korak će nas dovesti ovdje. 612 00:37:57,930 --> 00:38:02,100 Korak, korak, korak, korak, korak, korak i Samo ćemo klapa zauvijek. 613 00:38:02,100 --> 00:38:06,810 >> Dakle, možda ćete se naviknuti na to kao svoj način utvrđivanja beskonačne petlje, je 614 00:38:06,810 --> 00:38:08,960 samo drži ovu Enter za vidjeti gdje zapnete. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Ima boljih načina kako to učiniti, ali za sada, to je savršeno dovoljna. 617 00:38:14,780 --> 00:38:17,967 I stilski, u skladu s stilom 50, trebala sam to učinio. 618 00:38:17,967 --> 00:38:21,550 619 00:38:21,550 --> 00:38:24,030 OK. 620 00:38:24,030 --> 00:38:28,400 >> Tako posljednji naredba uvesti. 621 00:38:28,400 --> 00:38:30,810 Pa, neka je GDB ispravljanje u. 622 00:38:30,810 --> 00:38:35,580 Dakle, umjesto razbijanje na glavni, ako sam Znam funkciju foo je također 623 00:38:35,580 --> 00:38:39,230 Problem, onda sam mogao imati samo rekao je, slomiti na foo, umjesto. 624 00:38:39,230 --> 00:38:42,310 Recimo da sam razbiti na glavni i Foo. 625 00:38:42,310 --> 00:38:45,390 Na taj način možete postaviti onoliko prijelomnih točaka kao što želite. 626 00:38:45,390 --> 00:38:49,230 Kad sam tipa trčanje, to se događa da se zaustavi na - 627 00:38:49,230 --> 00:38:52,180 ooo, neka je kompilirati, budući Promijenio sam stvari. 628 00:38:52,180 --> 00:38:55,950 Vidjet ćete ovu liniju, upozorenje izvor datoteka je novija od izvršne. 629 00:38:55,950 --> 00:38:59,680 Dakle, to znači da sam se upravo ovdje i promijenio to u skladu s stilom 630 00:38:59,680 --> 00:39:03,100 50, ali nisam kompilirati Program. 631 00:39:03,100 --> 00:39:04,870 Dakle GDB čini mi svjesni toga. 632 00:39:04,870 --> 00:39:10,130 Prestat ću, napraviti ispravljanje opet, pogodio gdb ispravljanje. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Pa sad, natrag na ono što radim. 635 00:39:12,800 --> 00:39:15,720 Break glavnu, prijelom foo. 636 00:39:15,720 --> 00:39:20,680 Sada, ako sam pokrenuti program, pa je će se nastaviti dok se ne pogodi 637 00:39:20,680 --> 00:39:21,320 prijelomna točka. 638 00:39:21,320 --> 00:39:24,680 To prijelomna točka se događa biti prvi na glavni. 639 00:39:24,680 --> 00:39:28,630 Sada, umjesto da radi naprijed, naprijed, naprijed, next, next, dok sam pogodio Foo, ja 640 00:39:28,630 --> 00:39:35,230 može upisati nastavak, koji će se nastaviti dok ne pogoditi sljedeći prijelomna točka. 641 00:39:35,230 --> 00:39:37,200 Moram ući u cijeli broj prvi. 642 00:39:37,200 --> 00:39:40,570 Nastaviti će se nastaviti sve dok ne pogodim sljedeća točka prekida, što je to 643 00:39:40,570 --> 00:39:43,320 funkcija foo. 644 00:39:43,320 --> 00:39:50,130 >> Dakle Run će se izvoditi do te pogodak prijelomna točka, ali samo upisati vožnji kada 645 00:39:50,130 --> 00:39:54,060 ti si pokretanja programa, a zatim, od tada, to je i dalje. 646 00:39:54,060 --> 00:40:01,950 Ako sam upravo učinio razbiti glavni i tada vodio, to će razbiti na 647 00:40:01,950 --> 00:40:03,670 Glavni, a zatim nastaviti. 648 00:40:03,670 --> 00:40:10,050 Budući da sam ne imati break na foo, unesite cijeli broj, onda sada sam 649 00:40:10,050 --> 00:40:11,380 Ne ide razbiti na foo. 650 00:40:11,380 --> 00:40:16,318 To samo ide do beskonačno petlje do toga. 651 00:40:16,318 --> 00:40:17,568 OK. 652 00:40:17,568 --> 00:40:19,500 653 00:40:19,500 --> 00:40:24,420 >> Dakle, to je Uvod u GDB. 654 00:40:24,420 --> 00:40:27,790 Trebali bi početi koristiti u tvoj problem setovima. 655 00:40:27,790 --> 00:40:30,550 To može biti vrlo korisno identificirati bugova. 656 00:40:30,550 --> 00:40:35,280 Ako vam je zapravo samo, liniju-po-line, idite kroz svoj kod, i usporedite ono što je 657 00:40:35,280 --> 00:40:39,740 zapravo događa s tim što očekujete da se dogodi, onda je prilično 658 00:40:39,740 --> 00:40:41,060 teško propustiti svoje greške. 659 00:40:41,060 --> 00:40:45,280 660 00:40:45,280 --> 00:40:46,530 OK. 661 00:40:46,530 --> 00:40:48,310 662 00:40:48,310 --> 00:40:54,040 >> Tako je prošlog tjedna David odrastao to Tajna-key kriptografiju stvari za 663 00:40:54,040 --> 00:40:59,350 Prvi put, u kojem ne želimo Lozinke samo biti pohranjeni na našim 664 00:40:59,350 --> 00:41:03,210 Računalo na neki običan tekst datoteke, gdje je netko može doći i samo 665 00:41:03,210 --> 00:41:04,660 otvorite ga i pročitati ih. 666 00:41:04,660 --> 00:41:07,530 U idealnom slučaju, oni će biti kodiran na neki način. 667 00:41:07,530 --> 00:41:13,340 I u problem Skupine 2, vi ćete se bave s jedne metode enkripcije, 668 00:41:13,340 --> 00:41:16,520 ili, dobro, dvije metode, ali oni nisu tako velike. 669 00:41:16,520 --> 00:41:20,050 Ako to ne učinite haker izdanje, ti si također će se baviti 670 00:41:20,050 --> 00:41:22,150 dešifriranja neke stvari. 671 00:41:22,150 --> 00:41:29,770 >> Dakle, pitanje je sad, dobro, čak i ako imamo najjaču šifriranje 672 00:41:29,770 --> 00:41:34,830 algoritam u svijetu, ako se odlučite Posebno loša password, onda 673 00:41:34,830 --> 00:41:37,720 neće ti puno pomoći, jer ljudi će i dalje biti u mogućnosti to shvatiti. 674 00:41:37,720 --> 00:41:41,530 Čak i ako vidim šifrirani niz i to izgleda kao nered smeća 675 00:41:41,530 --> 00:41:44,760 to ne znači ništa za njih, ako oni još samo treba isprobati nekoliko lozinke 676 00:41:44,760 --> 00:41:50,560 to shvatiti, onda nisu baš siguran. 677 00:41:50,560 --> 00:41:55,890 Tako gledajući video koji čini tu točku. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [VIDEO PLAYBACK] 680 00:42:00,970 --> 00:42:02,100 >> -Helmet, što đavo. 681 00:42:02,100 --> 00:42:03,370 Što se dešava? 682 00:42:03,370 --> 00:42:05,170 Što radiš s mojom kćerkom? 683 00:42:05,170 --> 00:42:09,910 >> -Dopustite mi da predstaviti briljantni Mladi plastični kirurg, dr. Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, najveći nos posao čovjek u cjelokupnom 685 00:42:13,730 --> 00:42:16,080 svemir, i Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -Vaša Visosti. 687 00:42:17,210 --> 00:42:18,070 >> -Nos posao? 688 00:42:18,070 --> 00:42:18,670 Ne razumijem. 689 00:42:18,670 --> 00:42:20,090 Već je imao operaciju nosa. 690 00:42:20,090 --> 00:42:21,910 Bilo je slatko šesnaest prisutna. 691 00:42:21,910 --> 00:42:22,140 >> -Br. 692 00:42:22,140 --> 00:42:23,690 To nije ono što mislite. 693 00:42:23,690 --> 00:42:25,420 To je puno, puno gore. 694 00:42:25,420 --> 00:42:30,300 Ako ne daj mi kombinacija za zračni štit, Dr. Schlotkin će 695 00:42:30,300 --> 00:42:34,226 dati svoju kćer natrag svoju staru nos. 696 00:42:34,226 --> 00:42:35,476 >> -Br. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 Odakle vam to? 699 00:42:40,516 --> 00:42:41,440 >> -U redu. 700 00:42:41,440 --> 00:42:42,180 Ja ću reći. 701 00:42:42,180 --> 00:42:43,381 Ja ću reći. 702 00:42:43,381 --> 00:42:44,263 Ne, tata. 703 00:42:44,263 --> 00:42:45,590 Ne, ne moraš. 704 00:42:45,590 --> 00:42:46,860 >> -Ti si u pravu, draga moja. 705 00:42:46,860 --> 00:42:48,450 Ja ću propustiti svoj novi nos. 706 00:42:48,450 --> 00:42:52,090 No, neću mu reći kombinaciju, bez obzira na sve. 707 00:42:52,090 --> 00:42:53,680 >> -Vrlo dobro. 708 00:42:53,680 --> 00:42:55,685 Dr. Schlotkin, učiniti vaš najgori. 709 00:42:55,685 --> 00:42:56,914 >> -Moje zadovoljstvo. 710 00:42:56,914 --> 00:43:00,690 >> [Alati su izoštriti] 711 00:43:00,690 --> 00:43:01,910 >> -Br. 712 00:43:01,910 --> 00:43:02,520 Čekaj. 713 00:43:02,520 --> 00:43:03,836 Čekaj. 714 00:43:03,836 --> 00:43:05,300 Ja ću reći. 715 00:43:05,300 --> 00:43:06,880 Ja ću reći. 716 00:43:06,880 --> 00:43:09,130 >> -Znao sam da će to raditi. 717 00:43:09,130 --> 00:43:09,900 U redu. 718 00:43:09,900 --> 00:43:12,850 Daj mi to. 719 00:43:12,850 --> 00:43:16,918 >> -Kombinacija je jedna. 720 00:43:16,918 --> 00:43:17,406 >> -Jedan. 721 00:43:17,406 --> 00:43:18,382 >> -Jedan. 722 00:43:18,382 --> 00:43:19,358 >> -Dvije. 723 00:43:19,358 --> 00:43:19,846 >> -Dvije. 724 00:43:19,846 --> 00:43:20,822 >> -Dvije. 725 00:43:20,822 --> 00:43:21,310 >> -Tri. 726 00:43:21,310 --> 00:43:21,798 >> -Tri. 727 00:43:21,798 --> 00:43:22,774 >> -Tri. 728 00:43:22,774 --> 00:43:23,262 >> -Four. 729 00:43:23,262 --> 00:43:23,750 >> -Four. 730 00:43:23,750 --> 00:43:26,150 >> -Four. 731 00:43:26,150 --> 00:43:27,010 >> -Pet. 732 00:43:27,010 --> 00:43:27,670 >> -Pet. 733 00:43:27,670 --> 00:43:29,010 >> -Pet. 734 00:43:29,010 --> 00:43:34,770 >> -Dakle, kombinacija je jedan, dva, tri, četiri, pet. 735 00:43:34,770 --> 00:43:37,460 To je najgluplja kombinacija Sam ikada čuo u životu. 736 00:43:37,460 --> 00:43:39,710 To je nešto što je idiot će imati na svojoj prtljazi. 737 00:43:39,710 --> 00:43:42,000 >> -Hvala vam, vaša visosti. 738 00:43:42,000 --> 00:43:43,530 >> -Što si učinio? 739 00:43:43,530 --> 00:43:44,490 >> -Ja okrenuo se od zida. 740 00:43:44,490 --> 00:43:45,420 >> -Ne, nisi. 741 00:43:45,420 --> 00:43:45,840 Vi isključen cijeli film. 742 00:43:45,840 --> 00:43:46,930 >> -Mora da sam pritisnuo krivi gumb. 743 00:43:46,930 --> 00:43:48,265 >> -Pa, stavio ga na leđa. 744 00:43:48,265 --> 00:43:49,110 Stavite film na leđa. 745 00:43:49,110 --> 00:43:49,510 >> -Da, gospodine. 746 00:43:49,510 --> 00:43:49,917 Da, gospodine. 747 00:43:49,917 --> 00:43:50,324 >> -Idemo, Arnold. 748 00:43:50,324 --> 00:43:51,140 Dođite, Gretchen. 749 00:43:51,140 --> 00:43:53,060 Naravno, znam da ću i dalje moram vam naplatiti za to. 750 00:43:53,060 --> 00:43:53,440 >> [END video reprodukciju] 751 00:43:53,440 --> 00:43:54,690 >> ROB Boden: U redu. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Dakle, sad kad smo već govorimo o sigurnost, na neki način, lijepo 754 00:44:08,430 --> 00:44:16,050 Malo movie poster, tako da u posljednjih dana, ovi problemi s NSA 755 00:44:16,050 --> 00:44:17,300 praćenje sve. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 To može biti teško da se osjećaju kao ti imaju nekakvu privatnost u 758 00:44:26,930 --> 00:44:34,540 Online svijet, iako sam nije mogao reći što većina pojedinosti prizmi. 759 00:44:34,540 --> 00:44:42,130 Dakle, kreće izvan prizme, nećemo da se govori o tome, sada 760 00:44:42,130 --> 00:44:44,030 misle o svom prijenosnom računalu. 761 00:44:44,030 --> 00:44:48,360 Tako se ovdje, želim prebaciti na moj stvarni račun, 762 00:44:48,360 --> 00:44:50,370 s mojim malim pingvina. 763 00:44:50,370 --> 00:44:57,310 Dakle imam lozinka postavljena, a to lozinka je sve što želim da bude. 764 00:44:57,310 --> 00:45:02,430 >> No, imajte na umu da ono što sam prijavom u sa, tako da je ovo za prijavu 765 00:45:02,430 --> 00:45:04,850 brz, je neki program. 766 00:45:04,850 --> 00:45:07,910 To je neki program koji je napisao neke osobe. 767 00:45:07,910 --> 00:45:13,250 I tako, ta osoba, ako su Posebno zlonamjerni, što su mogli 768 00:45:13,250 --> 00:45:17,780 su rekli, u redu, tako da ako je lozinka da uđem jednak mom 769 00:45:17,780 --> 00:45:22,800 Stvarni password, ili je jednaka na neku posebnu lozinku - 770 00:45:22,800 --> 00:45:25,550 David je strašan ili nešto - 771 00:45:25,550 --> 00:45:27,190 onda ih pustiti unutra 772 00:45:27,190 --> 00:45:33,760 Dakle zlonamjerni programer mogao imati pristup svim svojim Macovima, ili 773 00:45:33,760 --> 00:45:36,150 Windows, ili bilo što. 774 00:45:36,150 --> 00:45:41,980 >> Dakle, to nije mnogo briga, jer, Mislim, ovo je za prijavu programa 775 00:45:41,980 --> 00:45:48,720 koji je isporučen s OS X, stotine ili tisuće ljudi imaju 776 00:45:48,720 --> 00:45:50,020 pregledao ovaj kod. 777 00:45:50,020 --> 00:45:55,330 I tako, ako je, u kodu negdje, reci, ako ovaj niz jednako dosegne 778 00:45:55,330 --> 00:45:58,860 David je strašan, prijava, onda je netko će biti, kao što je, čekati. 779 00:45:58,860 --> 00:45:59,800 To nije u redu. 780 00:45:59,800 --> 00:46:01,790 To ne bi trebao biti ovdje. 781 00:46:01,790 --> 00:46:06,650 Dakle, to je jedan od načina da se stvari biti vrsta siguran. 782 00:46:06,650 --> 00:46:10,300 >> No, razmišljam o čak programa da ste napisali. 783 00:46:10,300 --> 00:46:13,000 Recimo da je napisao program za prijavu. 784 00:46:13,000 --> 00:46:20,440 Dakle, ovo za prijavu programa koje je napisao, tako očito, da ste dobri 785 00:46:20,440 --> 00:46:21,210 programer. 786 00:46:21,210 --> 00:46:25,610 Vi ne ide staviti bilo zlonamjernih ako je x jednako jednako David je strašan 787 00:46:25,610 --> 00:46:27,860 u kodu. 788 00:46:27,860 --> 00:46:31,930 No ovaj program, što učiniti koristiti sastaviti ovaj program? 789 00:46:31,930 --> 00:46:34,180 Nešto kao jeka. 790 00:46:34,180 --> 00:46:38,460 Pa što ako je osoba koja se dogodilo pisati Zveket specijalnu proučavao u Dong 791 00:46:38,460 --> 00:46:44,310 nešto slično, ako sam sastavljanju programa, prijavite se, a zatim unesite ovaj kod 792 00:46:44,310 --> 00:46:49,720 u prijavu programa koji kaže, ako x jednaka jednaka David je strašan? 793 00:46:49,720 --> 00:46:59,890 Dakle, nije baš još, ali mi imamo isti izdati ovdje, gdje je Dong, dobro, 794 00:46:59,890 --> 00:47:03,790 tisuće, ako ne i više desetaka tisuća ljudi, znanstvenici su promatrali Dong, imaju 795 00:47:03,790 --> 00:47:07,160 pogledala svojim linija koda i rekao, sve u redu, nema ništa loše ovdje. 796 00:47:07,160 --> 00:47:10,680 Očito, nitko ne radi ništa ovaj zlonamjerni. 797 00:47:10,680 --> 00:47:15,780 >> No, ono što je sama Dong, kao što su, što ako sam sastaviti Dong? 798 00:47:15,780 --> 00:47:20,900 Što ako imam neki prevodilac da sastavlja zveket koji se umeće u Dong 799 00:47:20,900 --> 00:47:25,610 ovaj posebni hack da kaže, sve u redu, kad sam sastaviti Dong, a zatim 800 00:47:25,610 --> 00:47:31,290 izvršnu sam se posebno trebali gledati unutar prijavu programa i umetkom 801 00:47:31,290 --> 00:47:34,230 ovu lozinku, jednako dosegne Dave je strašan? 802 00:47:34,230 --> 00:47:37,990 Dakle, ne zaboravite da je i sam sastavljač treba biti sastavljen u nekom trenutku. 803 00:47:37,990 --> 00:47:42,810 Dakle, ako je ono što se odlučite za sastaviti Zveket sa, sama je zlonamjeran, onda 804 00:47:42,810 --> 00:47:45,580 mogla biti pijan cijelo način niz liniju. 805 00:47:45,580 --> 00:47:49,630 >> Pa evo, imamo Ken Thompson i Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Dakle, ovo je kultni fotografiju. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie je na desnoj strani. 808 00:47:55,470 --> 00:47:58,740 On je veliki - 809 00:47:58,740 --> 00:48:03,640 prilično je napisao C. Tako možete mu zahvaliti za ovu klasu. 810 00:48:03,640 --> 00:48:04,840 Ken Thompson je na lijevoj strani. 811 00:48:04,840 --> 00:48:07,780 Njih dvojica su u osnovi je napisao UNIX. 812 00:48:07,780 --> 00:48:10,140 Pa, oni su bili glavni suradnici u UNIX. 813 00:48:10,140 --> 00:48:11,310 Tu su bili neki drugi. 814 00:48:11,310 --> 00:48:16,240 Dakle Ken Thompson, u nekom trenutku, osvaja Turingov nagradu. 815 00:48:16,240 --> 00:48:20,860 I Turing nagrade, uvijek sam čuo to upućuje na ovaj način, to je 816 00:48:20,860 --> 00:48:23,100 Nobelova nagrada za računalne znanosti. 817 00:48:23,100 --> 00:48:27,500 >> Tako je Turing Award, on mora dati svom govoru. 818 00:48:27,500 --> 00:48:31,790 A on daje ovaj vrlo poznati govor Sada, pod nazivom Razmišljanja o uzdajući se 819 00:48:31,790 --> 00:48:35,620 Povjerenje koje smo povezani Da bi se na web stranici kolegija. 820 00:48:35,620 --> 00:48:41,670 I u ovom govoru, on je, kaže, sve u redu, pa sam pisao UNIX, a sada sve 821 00:48:41,670 --> 00:48:43,320 ti ljudi koriste UNIX. 822 00:48:43,320 --> 00:48:46,960 Sada, ne zaboravite danas da je Linux izravni potomak UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X izravno koristi UNIX. 824 00:48:50,140 --> 00:48:53,810 Windows ne toliko, ali puno ideje su uzeti iz UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Dakle, što se popne na pozornicu i kaže: sve u redu, napisao sam UNIX. 826 00:48:59,220 --> 00:49:03,940 I samo da vi momci znate, ja sam mogućnosti prijaviti se na svaki 827 00:49:03,940 --> 00:49:05,590 do jednog od svojih računala. 828 00:49:05,590 --> 00:49:14,280 Budući da sam stavio jedan od tih posebnih ako x jednako jednako Ken Thomson je strašan, 829 00:49:14,280 --> 00:49:16,350 onda sam dopustio da se prijavite. 830 00:49:16,350 --> 00:49:18,370 Dakle, ljudi su kao, dobro, Kako si to učinio? 831 00:49:18,370 --> 00:49:21,090 Mi smo gledali na programu prijavu i ništa ne postoji. 832 00:49:21,090 --> 00:49:24,700 On je kao, dobro, modificirani sam prevodilac prijaviti u program za prijavu 833 00:49:24,700 --> 00:49:30,490 , tako da je program za prijavu danas će imati da je x jednako jednako Ken Thompson 834 00:49:30,490 --> 00:49:31,700 je strašan. 835 00:49:31,700 --> 00:49:33,120 >> A oni kažu, dobro, to nije istina. 836 00:49:33,120 --> 00:49:35,740 Gledamo u prevodilac, i prevodilac nema linije 837 00:49:35,740 --> 00:49:36,400 Kod tako. 838 00:49:36,400 --> 00:49:40,540 On je kao, u redu, ali što si ti sastavljanju prevodilac sa? 839 00:49:40,540 --> 00:49:44,810 I oni misle, a on je, kao, dobro, Ja sam onaj koji ti je dao prevodilac 840 00:49:44,810 --> 00:49:50,580 koju koristite sastaviti prevodilac, pa što su sastavljanje prevodilac, koji 841 00:49:50,580 --> 00:49:56,390 Sama je zlonamjeran, te će razbiti program za prijavu. 842 00:49:56,390 --> 00:49:59,360 Tako je u osnovi, u tom trenutku, postoji ni na koji način biste mogli pogledati izvor 843 00:49:59,360 --> 00:50:02,450 kod programa za prijavu vidjeti što nije u redu. 844 00:50:02,450 --> 00:50:04,220 Ne mogu ni pogledati u izvorni kod prevodilac 845 00:50:04,220 --> 00:50:06,790 vidjeti što nije u redu. 846 00:50:06,790 --> 00:50:11,940 >> Ti bi trebao gledati na stroju code, binarnom od 847 00:50:11,940 --> 00:50:16,760 sastavio prevodilac vidjeti, čekati, to linija koda ne bi trebao biti ovdje. 848 00:50:16,760 --> 00:50:22,130 No, Ken Thompson je trebalo jedan korak dalje i rekao, dobro, postoje 849 00:50:22,130 --> 00:50:25,980 ovi posebni programi koji zapravo će vam pomoći da pročitate binarni programa, 850 00:50:25,980 --> 00:50:29,340 pa ako netko koristi taj program pročitati binarni, oni će ih vidjeti 851 00:50:29,340 --> 00:50:30,490 linija koda. 852 00:50:30,490 --> 00:50:34,020 On mijenjati one programe za reći, sve Dobro, ako ste u potrazi na 853 00:50:34,020 --> 00:50:38,460 prevodilac, ne pokazuju to posebno Skup binarno. 854 00:50:38,460 --> 00:50:42,830 >> Pa onda morate uzeti korak dalje iu osnovi, koji bi mogli imati 855 00:50:42,830 --> 00:50:46,210 uzeti više razina zaobilazak, te u nekom trenutku, nitko je zapravo 856 00:50:46,210 --> 00:50:47,990 će biti ček. 857 00:50:47,990 --> 00:50:52,590 Dakle pouka ove priče je, ti si neće biti pisanja 858 00:50:52,590 --> 00:50:54,340 Zveket u ovoj klasi. 859 00:50:54,340 --> 00:50:57,020 Ti si idući u biti koristeći penjanje Zveket puno u ovoj klasi. 860 00:50:57,020 --> 00:51:00,490 Za sve što znate, Dong je zlonamjeran Program koji je sabotira svaki 861 00:51:00,490 --> 00:51:03,520 jedan program ste ikada sastavio. 862 00:51:03,520 --> 00:51:08,206 I da vas ostaviti na tome vrlo zloslutna umu, vidimo se u srijedu. 863 00:51:08,206 --> 00:51:10,030 >> [PLJESAK] 864 00:51:10,030 --> 00:51:12,935 >> ZVUČNIK 2: Na sljedećem CS50. 865 00:51:12,935 --> 00:51:14,580 >> Zvučnik 3: Da se nisi usudio to reći. 866 00:51:14,580 --> 00:51:15,930 To možete učiniti. 867 00:51:15,930 --> 00:51:19,440 Vi ste to učinili prije, to možete učiniti Danas, možete to učiniti sutra. 868 00:51:19,440 --> 00:51:20,930 Vi ste to radili godinama. 869 00:51:20,930 --> 00:51:22,790 Dovoljno je otići tamo i to učiniti. 870 00:51:22,790 --> 00:51:24,310 To možete učiniti. 871 00:51:24,310 --> 00:51:26,102 >> [Glazba svira]