1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [MUSIC PLAYBACK] 3 00:00:11,210 --> 00:00:12,100 >> ROB BODEN: Dobre. 4 00:00:12,100 --> 00:00:15,620 Takže, prvá vec, prvá, video od známu tvár. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [PLAYBACK] 7 00:00:22,560 --> 00:00:23,370 >> -Dobre. 8 00:00:23,370 --> 00:00:27,150 To je CS50, a to je štart troch týždňov. 9 00:00:27,150 --> 00:00:29,980 Prepáč, že som nemohol byť s tebou dnes, ale dovoľte mi predstaviť 10 00:00:29,980 --> 00:00:32,880 CS50 vlastné Rob Boden. 11 00:00:32,880 --> 00:00:33,872 >> [END VIDEO PLAYBACK] 12 00:00:33,872 --> 00:00:39,340 >> [Potleskom a CHEERS] 13 00:00:39,340 --> 00:00:41,277 >> ROB BODEN: filmografie v že video je fantastické. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Dobrá. 16 00:00:47,770 --> 00:00:50,960 Tak za prvé, je tu ešte jeden obed. 17 00:00:50,960 --> 00:00:52,330 Je to zajtra v 01:15. 18 00:00:52,330 --> 00:00:54,480 Neexistuje žiadny obede v piatok. 19 00:00:54,480 --> 00:00:55,810 Je s Quora. 20 00:00:55,810 --> 00:01:00,190 A Tommy je tu ešte nie je, ale jeden z ľudia, tam je bývalý šéf CF, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Takže je to zábava chlap. 23 00:01:02,730 --> 00:01:04,819 Tie by mali prísť. 24 00:01:04,819 --> 00:01:05,900 >> Dobrá. 25 00:01:05,900 --> 00:01:11,360 Takže minulý týždeň, sme začali rozpadá o tom, čo reťazec skutočne je. 26 00:01:11,360 --> 00:01:14,830 Poznáme od začiatku, že je to postupnosť znakov. 27 00:01:14,830 --> 00:01:18,130 Ale minulý týždeň, sme sa ponorili do skutočnosti, že to, čo je v skutočnosti sekvencia 28 00:01:18,130 --> 00:01:22,110 postavy, dobre, máme teraz pole znakov. 29 00:01:22,110 --> 00:01:26,450 A my vieme, že reťazec, je to pole znakov, na samom konci, 30 00:01:26,450 --> 00:01:30,920 máme tento špeciálny nulový bajt, to spätné lomítko 0, ktorá označuje koniec 31 00:01:30,920 --> 00:01:32,230 reťazec. 32 00:01:32,230 --> 00:01:36,970 >> A tak reťazec je pole znaky, ale môže mať viac ako 33 00:01:36,970 --> 00:01:39,530 len pole znakov, môžeme mať rad ktoréhokoľvek 34 00:01:39,530 --> 00:01:40,890 typ, čo chceme. 35 00:01:40,890 --> 00:01:51,570 Takže, ak si spomínate z minulého týždňa, Vek program, ktorý predstavil David 36 00:01:51,570 --> 00:01:53,560 veľmi rýchlo. 37 00:01:53,560 --> 00:01:57,010 Takže prvá vec, ktorú budeme robiť, je požiadať užívateľa o celé číslo, 38 00:01:57,010 --> 00:01:58,800 počet ľudí v miestnosti. 39 00:01:58,800 --> 00:02:01,260 Akonáhle budeme mať, že celé číslo, budeme deklarovať pole. 40 00:02:01,260 --> 00:02:02,890 Všimnite si túto syntax konzoly. 41 00:02:02,890 --> 00:02:04,540 Budeš si zvyknúť na to. 42 00:02:04,540 --> 00:02:09,430 >> Takže budeme deklarovať pole celých čísel volal veku, a tam sú n 43 00:02:09,430 --> 00:02:12,080 celé čísla v tomto poli. 44 00:02:12,080 --> 00:02:16,480 Takže tento vzor tu, je to 4 int i sa rovná 0, i je menšie ako n, i a 45 00:02:16,480 --> 00:02:20,580 a, že je tiež bude vzor že vám veľmi zvyknutí. 46 00:02:20,580 --> 00:02:24,000 Vzhľadom k tomu, že je dosť veľa, ako ste vždy bude iterovat cez pole. 47 00:02:24,000 --> 00:02:26,330 Tak si uvedomiť, že n je dĺžka nášho poľa. 48 00:02:26,330 --> 00:02:32,120 A tak tu sme opakovane žiadajú na veku osoby aj v miestnosti. 49 00:02:32,120 --> 00:02:36,640 >> Potom, ideme dole, a bez ohľadu na ľubovoľná dôvod, prečo sme sa potom 50 00:02:36,640 --> 00:02:40,220 vytlačiť koľko idú byť odo dneška za rok. 51 00:02:40,220 --> 00:02:49,980 A spustenie tohto programu, poďme aby veku, bodka lomítko veku. 52 00:02:49,980 --> 00:02:53,010 Takže počet ľudí v miestnosti, povedzme, že sú tam tri. 53 00:02:53,010 --> 00:02:59,880 A hovoria, že prvá osoba 13, Ďalšie je 26 a posledný 30. 54 00:02:59,880 --> 00:03:05,080 Takže to bude iterovat cez tie tri ľudí, vytlačiť 14, 27, a 31. 55 00:03:05,080 --> 00:03:16,060 >> Takže si pamätajte, že keď sme sa vyhlásiť pole veľkosti n, indexy v tom, že 56 00:03:16,060 --> 00:03:19,950 pole, pole obsahuje hodnoty a indexy 0, 1, 2, celú cestu 57 00:03:19,950 --> 00:03:21,680 až n mínus 1. 58 00:03:21,680 --> 00:03:26,255 Takže, keď sme povedali, že boli traja ľudia v miestnosti, a dáme sem 59 00:03:26,255 --> 00:03:29,850 Prvá iterácia cez tento slučky, aj bude 0. 60 00:03:29,850 --> 00:03:31,650 Takže v indexe 0.. 61 00:03:31,650 --> 00:03:34,540 Sme priradenie prvý vekom užívateľ zadá. 62 00:03:34,540 --> 00:03:38,870 Potom v ďalšej, sme zadanie Druhá n používateľ zadá, a 63 00:03:38,870 --> 00:03:40,580 vedľa dvoch, posledný n 64 00:03:40,580 --> 00:03:44,200 >> Takže si všimnúť, že rad veľkosti tri nemá nič 65 00:03:44,200 --> 00:03:46,040 v indexe tri. 66 00:03:46,040 --> 00:03:49,036 Toto nie je platný. 67 00:03:49,036 --> 00:03:50,250 Dobrá. 68 00:03:50,250 --> 00:03:55,136 Takže, ide sem. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Takže teraz, že sme sa zaoberal polí, máme nejaké znalosti. 71 00:04:01,590 --> 00:04:03,780 Teraz sa budeme pohybovať na povel linka argumenty, ktoré sa bude 72 00:04:03,780 --> 00:04:05,890 celkom relevantné k tomuto problému sade. 73 00:04:05,890 --> 00:04:09,670 >> Takže až do teraz, keď ste deklaroval svoju hlavnú funkciu, máme 74 00:04:09,670 --> 00:04:11,230 povedal int main void. 75 00:04:11,230 --> 00:04:14,070 Takže void jednoducho znamená, že nie sme absolvovanie niektorého 76 00:04:14,070 --> 00:04:16,440 argumenty k tejto funkcii. 77 00:04:16,440 --> 00:04:19,190 Teraz budeme vidieť, že hlavným môže trvať niekoľko argumentov. 78 00:04:19,190 --> 00:04:22,470 Tu im hovoríme int argc a reťazec argv zátvorky. 79 00:04:22,470 --> 00:04:26,930 Držiaky, opäť s uvedením že máme čo do činenia s poľami. 80 00:04:26,930 --> 00:04:31,850 Tak tu, string argv držiaky, sme rokovaní s poľa reťazcov. 81 00:04:31,850 --> 00:04:35,360 Takže argc, že ​​to bude ukazovať koľko argumenty máme 82 00:04:35,360 --> 00:04:37,580 odovzdaný do tohto programu. 83 00:04:37,580 --> 00:04:46,050 A vidieť, čo to znamená, poďme zatvorte toto. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Takže až do teraz, sme bežať každý program, ako je bodka lomítko vekových kategórií. 86 00:04:50,790 --> 00:04:55,250 Môžeme tiež na príkazovom riadku, okolo odovzdať argumenty, teda termín, príkaz 87 00:04:55,250 --> 00:04:56,550 linka argumenty. 88 00:04:56,550 --> 00:04:59,760 Takže prvý argument, hello world. 89 00:04:59,760 --> 00:05:03,350 Tak tu, argc bude tri. 90 00:05:03,350 --> 00:05:07,720 Je to počet argumentov na príkazovom riadku. 91 00:05:07,720 --> 00:05:12,840 Argc je vždy aspoň 1, pretože dot lomítko veku, sám, sa počíta ako jeden z 92 00:05:12,840 --> 00:05:14,490 argumenty príkazového riadku. 93 00:05:14,490 --> 00:05:17,010 >> Potom ahoj je prvý. 94 00:05:17,010 --> 00:05:20,460 Ak dot slash veku je zeroth, potom ahoj je prvý, a svet je 95 00:05:20,460 --> 00:05:22,830 Druhý argument riadok príkaz. 96 00:05:22,830 --> 00:05:29,490 Takže reťazec argv, budeme vidieť, obsahuje reťazcov, bodka lomítko 97 00:05:29,490 --> 00:05:33,830 veku, ahoj a svet. 98 00:05:33,830 --> 00:05:38,945 A tým, že žiadosť Davida, ideme video prehrať zavádzajúce, že. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [PLAYBACK] 101 00:05:43,890 --> 00:05:46,240 >> -Až teraz v programoch sme napísal, že sme vyhlásiť 102 00:05:46,240 --> 00:05:48,500 Hlavný ako int main void. 103 00:05:48,500 --> 00:05:51,170 A celú tú dobu, že void má proste bolo určujúce, že 104 00:05:51,170 --> 00:05:54,430 Program neponesie argumenty príkazového riadku. 105 00:05:54,430 --> 00:05:57,750 Inými slovami, keď užívateľ spustí Program, on alebo ona môže poskytnúť príkazu 106 00:05:57,750 --> 00:06:01,710 argumenty sú podľa písať ďalšie slová alebo slovné spojenia po programe je 107 00:06:01,710 --> 00:06:03,000 meno na príkazovom riadku. 108 00:06:03,000 --> 00:06:06,550 >> No, ak chceš svoj program na prijať argumenty príkazového riadku, jeden alebo 109 00:06:06,550 --> 00:06:10,540 viac takých slov, musíme nahradiť stratu s niekoľkými argumentmi. 110 00:06:10,540 --> 00:06:12,200 Tak poďme na to. 111 00:06:12,200 --> 00:06:15,750 Zahrnúť CS50.h. 112 00:06:15,750 --> 00:06:19,360 Zahrnúť štandardné io.h. 113 00:06:19,360 --> 00:06:20,760 Int main. 114 00:06:20,760 --> 00:06:26,330 A teraz, namiesto toho, void, budem zadať int argc názvom, a 115 00:06:26,330 --> 00:06:28,780 Pole reťazcov zvaných argv. 116 00:06:28,780 --> 00:06:31,820 Teraz, argc a argv sú jednoducho konvencie. 117 00:06:31,820 --> 00:06:34,000 >> Mohli sme nazývajú tieto argumenty väčšina čokoľvek chceme. 118 00:06:34,000 --> 00:06:37,630 Ale čo je dôležité je, že argc je int, pretože podľa definície je 119 00:06:37,630 --> 00:06:41,360 bude obsahovať počet argumentov, počet slov, že celkom 120 00:06:41,360 --> 00:06:43,380 užívateľ zadal na jeho alebo jej výzvu. 121 00:06:43,380 --> 00:06:47,910 argv, medzitým, argument, vektor, je bude v skutočnosti byť poľa skladovanie 122 00:06:47,910 --> 00:06:52,020 všetky slová, ktoré má užívateľ napísaný na jeho alebo jej výzvu. 123 00:06:52,020 --> 00:06:54,500 >> Poďme pokračovať urobiť niečo teraz s jedným alebo viacerými z týchto 124 00:06:54,500 --> 00:06:55,660 argumenty príkazového riadku. 125 00:06:55,660 --> 00:07:00,070 Najmä, poďme do toho a tlač bez ohľadu na slovo užívateľ zadá 126 00:07:00,070 --> 00:07:03,960 po názve programu na príkazovom riadku. 127 00:07:03,960 --> 00:07:04,730 Otvorte držiak. 128 00:07:04,730 --> 00:07:06,240 Zatvorte držiak. 129 00:07:06,240 --> 00:07:10,510 Printf percent je spätné lomítko a čiarka. 130 00:07:10,510 --> 00:07:14,550 A teraz musím povedať, printf, akú hodnotu zapojiť do tohto zástupného symbolu. 131 00:07:14,550 --> 00:07:18,600 Chcem prvé slovo, ktoré má užívateľ napísal po názvu programu, 132 00:07:18,600 --> 00:07:23,130 a tak budem špecifikovať argv držiak 1, v blízkosti 133 00:07:23,130 --> 00:07:24,830 zátvorka, bodkočiarka. 134 00:07:24,830 --> 00:07:27,290 >> A teraz, prečo držiak 1 a nie držiak 0? 135 00:07:27,290 --> 00:07:30,990 No, to dopadá, automaticky uloží v argv 0 bude 136 00:07:30,990 --> 00:07:32,620 Skutočný názov programu. 137 00:07:32,620 --> 00:07:36,180 Takže prvé slovo, ktoré užívateľ zadá Po názov programu je tým, že 138 00:07:36,180 --> 00:07:38,990 konvencie, bude uložené v argv 1. 139 00:07:38,990 --> 00:07:42,380 Poďme sa teraz zostaviť a spustiť tento program. 140 00:07:42,380 --> 00:07:47,780 >> Uistite sa argv 0, bodka lomítko argv 0. 141 00:07:47,780 --> 00:07:50,520 A teraz slovo ako ahoj. 142 00:07:50,520 --> 00:07:51,670 Enter. 143 00:07:51,670 --> 00:07:53,520 A tu to máme, ahoj. 144 00:07:53,520 --> 00:07:55,750 >> [END VIDEO PLAYBACK] 145 00:07:55,750 --> 00:07:57,000 >> ROB BODEN: Dobre. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Zatvorte to. 148 00:08:01,230 --> 00:08:16,730 Takže sa podrobnejšie pozrieme na tomto programe, ktorý sme práve predstavil k nám, dobre, len 149 00:08:16,730 --> 00:08:24,710 ukázať, ak tlačíme argv 0, robiť, teraz čo je to, argv 0, bodka lomítko argv 0. 150 00:08:24,710 --> 00:08:30,440 Tak, ako sa očakávalo, je to vytlačiť meno programu, pretože argv 0 je 151 00:08:30,440 --> 00:08:32,970 vždy bude názov programu. 152 00:08:32,970 --> 00:08:35,640 Ale poďme robiť niečo bit zaujímavejšie. 153 00:08:35,640 --> 00:08:42,080 >> Takže problému nastavenie, budete predstavil na túto funkciu, atoi. 154 00:08:42,080 --> 00:08:44,440 Tak čo budeme používať atoi pre? 155 00:08:44,440 --> 00:08:48,550 To bude konvertovať reťazec na celé číslo. 156 00:08:48,550 --> 00:08:53,280 Takže keď som odovzdať reťazec, jeden, dva, tri, k atoi, že budete prevádzať, ktoré 157 00:08:53,280 --> 00:08:56,910 na celé číslo, jeden, dva, tri. 158 00:08:56,910 --> 00:09:01,480 Takže budeme konvertovať prvý argument riadok príkaz na celé číslo, 159 00:09:01,480 --> 00:09:05,690 a potom už len vytlačiť, že celé číslo. 160 00:09:05,690 --> 00:09:09,680 >> Takže v podstate, že sme trochu reimplementing vezmi_int, len 161 00:09:09,680 --> 00:09:12,350 číslo je zadané v príkaze linka miesto v programe 162 00:09:12,350 --> 00:09:14,560 interaktívne. 163 00:09:14,560 --> 00:09:23,170 Tak, aby argv 0, poďme robiť je to tu, a zavrieť to. 164 00:09:23,170 --> 00:09:27,670 Takže beh argv 0, a poďme vstúpiť číslo, jeden, dva, tri štyri jedna dve. 165 00:09:27,670 --> 00:09:30,840 Takže to bude tlačiť celé číslo, jeden dva tri štyri jedna dve. 166 00:09:30,840 --> 00:09:35,500 Tam sú niektoré nuansy, aby atoi, že bude to prestať sa starať o nič 167 00:09:35,500 --> 00:09:39,040 za platný číselný znak, ale to nevadí. 168 00:09:39,040 --> 00:09:42,870 >> Tak čo si myslíte, že sa stane či som to urobiť? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Segmentation fault. 171 00:09:47,050 --> 00:09:50,410 Tak prečo je to? 172 00:09:50,410 --> 00:09:56,060 Ak sa pozriete späť na nášho programu sme prevod argv 1, prvý argument 173 00:09:56,060 --> 00:09:59,610 po názvu programu, na celé číslo. 174 00:09:59,610 --> 00:10:03,350 Ale nie je tam žiadny argument odovzdaný po názvu programu. 175 00:10:03,350 --> 00:10:08,060 Takže tu vidíme, že sa jedná o kočík programu, pretože, keď sa budeme snažiť, aby ho spustiť 176 00:10:08,060 --> 00:10:10,530 bez argumentov, to bude len pád. 177 00:10:10,530 --> 00:10:16,950 >> Takže ďalší spoločný vzor uvidíte je niečo ako, ak argc je menej 178 00:10:16,950 --> 00:10:21,100 ako dva, čo naznačuje, že nebol aspoň názov programu a 179 00:10:21,100 --> 00:10:29,100 Prvý argument, potom budeme robiť niečo ako printf, nestačí 180 00:10:29,100 --> 00:10:31,190 argumenty príkazového riadku. 181 00:10:31,190 --> 00:10:33,170 To asi nie je dobrý pre tlač, je to asi niečo, ako 182 00:10:33,170 --> 00:10:35,440 by ste mali zadať číslo na príkazovom riadku. 183 00:10:35,440 --> 00:10:37,450 Budem jednoducho skončiť tam. 184 00:10:37,450 --> 00:10:39,600 A potom sa vráťte 1. 185 00:10:39,600 --> 00:10:44,740 Takže si pamätajte, že na konci nášho programu, ak sa vráti 0, že druh 186 00:10:44,740 --> 00:10:47,060 indikuje úspech. 187 00:10:47,060 --> 00:10:50,940 A hlavné tiež automaticky vracia 0, ak nechcete. 188 00:10:50,940 --> 00:10:55,800 >> Tak tu sme preladenie 1 uviesť že to nie je úspech. 189 00:10:55,800 --> 00:11:01,000 A môžete sa vrátiť čo chcete, len, 0 znamená úspech, a 190 00:11:01,000 --> 00:11:03,390 niečo signalizuje poruchu. 191 00:11:03,390 --> 00:11:04,855 Takže poďme spustiť túto verziu vecí. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Takže teraz, ak sa nám nepodarí zadať príkazový riadok Argument, že to správne povedať, 194 00:11:16,600 --> 00:11:18,290 nám, nestačí príkazového riadku. 195 00:11:18,290 --> 00:11:20,610 Nedokončil vetu. 196 00:11:20,610 --> 00:11:24,950 Inak, ak sme skutočne prejsť to jedno, môže dokončiť program. 197 00:11:24,950 --> 00:11:27,920 Tak to je, ako by ste používať argc v pre overenie počtu 198 00:11:27,920 --> 00:11:30,630 argumenty príkazového riadku, ktoré skutočne prešiel. 199 00:11:30,630 --> 00:11:39,360 >> Takže poďme urobiť tento program trochu viac zložité, a pozrite sa na druhý 200 00:11:39,360 --> 00:11:42,180 iterácie vecí. 201 00:11:42,180 --> 00:11:46,310 Takže teraz nie sme len tlač Prvý argument riadok príkaz. 202 00:11:46,310 --> 00:11:51,210 Tu sme iterácie z int aj rovnými 0, i je menšie ako argc, i a 203 00:11:51,210 --> 00:11:55,280 plus, a tlač argv, index i 204 00:11:55,280 --> 00:11:59,300 Takže tento model, opäť sa jedná o rovnaký vzor ako predtým, s výnimkou toho, 205 00:11:59,300 --> 00:12:02,600 volanie premenné n, budeme používať argc. 206 00:12:02,600 --> 00:12:09,520 >> Tak to je iterácie každý index v poli, a každý tlač 207 00:12:09,520 --> 00:12:11,910 má v tomto poli. 208 00:12:11,910 --> 00:12:20,300 A tak, keď sme sa spustiť tento program, tak, Nechcel som zadať ľubovoľný príkaz 209 00:12:20,300 --> 00:12:22,540 argumenty, tak to len tlačí názov programu. 210 00:12:22,540 --> 00:12:26,053 Ak zadám veľa vecí, to bude vytlačiť jeden, každý na samostatnom riadku. 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 Takže poďme o krok ďalej. 214 00:12:34,770 --> 00:12:38,890 A namiesto tlače každý argument na samostatnom riadku, poďme tlačiť každý 215 00:12:38,890 --> 00:12:42,590 charakter každého argumentu na vlastnom riadku. 216 00:12:42,590 --> 00:12:46,700 Takže si pamätajte, že argv je pole reťazcov. 217 00:12:46,700 --> 00:12:50,960 Takže to, čo je reťazec, ale rad znakov? 218 00:12:50,960 --> 00:12:57,140 Takže to znamená, že argv je naozaj pole z poľa znakov. 219 00:12:57,140 --> 00:13:04,920 A tak, že s využitím, poďme ignorovať to teraz. 220 00:13:04,920 --> 00:13:08,190 Povedzme zvážiť reťazec argv 0. 221 00:13:08,190 --> 00:13:14,170 >> Takže ak chceme, aby každý znak argv 0 na samostatnom riadku, potom chcem, 222 00:13:14,170 --> 00:13:19,500 urobiť vzor sme zvyknutí, aj je menšia, než je dĺžka poľa, 223 00:13:19,500 --> 00:13:23,990 ktorý tu, je strlen z, to je nie je to, čo chcem robiť, reťazec 224 00:13:23,990 --> 00:13:26,450 s sa rovná argv 0. 225 00:13:26,450 --> 00:13:30,390 Tak som je menšia ako dĺžka našej pole, ktoré je v tomto prípade je pole 226 00:13:30,390 --> 00:13:34,410 znakov, aj plus plus. 227 00:13:34,410 --> 00:13:41,040 A tak, ako sme videli minulý týždeň, je to ideálne ak sa pohybujeme, že strlen mimo 228 00:13:41,040 --> 00:13:45,210 stavu, sa od n pridávať strlen S zakaždým, keď ideme 229 00:13:45,210 --> 00:13:47,720 slučkou, a to nebude meniť. 230 00:13:47,720 --> 00:13:50,230 Takže budeme nastaviť rovné n sem. 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 Takže teraz, sme iterácie každý index v poli. 234 00:14:01,320 --> 00:14:05,630 A tak, ak chceme tlačiť každý charakter v tomto poli, percenta c je 235 00:14:05,630 --> 00:14:06,880 vlajky chceme použiť pre znaky. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 A teraz držiak aj bude reťazec, index znak i, takže ak 238 00:14:19,770 --> 00:14:20,970 string boli ahoj. 239 00:14:20,970 --> 00:14:27,530 potom s 0 bude h, S príchytkou 1 bude e, a tak ďalej. 240 00:14:27,530 --> 00:14:30,800 >> Takže teraz chceme spojiť Tieto dve veci. 241 00:14:30,800 --> 00:14:35,440 Chceme tlačiť každý znak každý argument príkazového riadku. 242 00:14:35,440 --> 00:14:38,950 Takže budeme mať vnorené slučky for. 243 00:14:38,950 --> 00:14:47,480 A zvyčajne, prvý čítač je aj, ďalšia sa bude j, n 244 00:14:47,480 --> 00:14:54,450 bude strlen z argv aj, aj je menšie ako n, aj plus plus. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 A teraz, namiesto tlače argv aj tak, argv držiak aj bude index - 247 00:15:06,870 --> 00:15:14,280 že to bude i-ty príkazového riadku Argument, argv i, j bude 248 00:15:14,280 --> 00:15:16,925 je j-tý znak argument, i-ty. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Zbavím sa toho tu teraz od dáme to do tej slučky. 251 00:15:24,810 --> 00:15:33,900 Takže je ekvivalentná reťazec s rovnými argv i, a potom je držiak j 252 00:15:33,900 --> 00:15:36,980 >> No, my nepotrebujeme deklarovať táto premenná y. 253 00:15:36,980 --> 00:15:44,530 Namiesto toho sme len spojiť tieto dva do toho, čo sme mali, argv Aj, J. 254 00:15:44,530 --> 00:15:45,780 >> SPEAKER 1: [nepočuteľné]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB BODEN: Dobrý nápad. 257 00:15:49,680 --> 00:15:52,936 Takže je to rozbité. 258 00:15:52,936 --> 00:15:55,510 Ak som vlastne bežal, by sa si to uvedomiť. 259 00:15:55,510 --> 00:16:01,210 Takže počítadlo mi záleží v tomto najmä pre 260 00:16:01,210 --> 00:16:05,410 slučka je j, iterátor. 261 00:16:05,410 --> 00:16:08,560 Takže by ste naraziť na otázky, pravdepodobne nekonečná slučka, ak sa 262 00:16:08,560 --> 00:16:09,540 nestanovila, že. 263 00:16:09,540 --> 00:16:12,220 To je dôvod, prečo sme tiež hovorili o ladenie dnes. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Takže poďme spustiť tento program. 266 00:16:15,240 --> 00:16:21,200 A poďme vlastne pridať samostatný printf tu, že bude len vytlačiť 267 00:16:21,200 --> 00:16:27,480 ďalší riadok, pretože to znamená, že keď sme spustenie programu, bude tam prázdna 268 00:16:27,480 --> 00:16:31,830 čiara medzi každým charakteru každý riadok argumentu príkazu. 269 00:16:31,830 --> 00:16:33,448 No, uvidíme, čo to znamená. 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 Mám nejakú chybu. 273 00:16:39,870 --> 00:16:42,860 Chyba implicitne vyhlásil Knižnica funkcií strlen. 274 00:16:42,860 --> 00:16:51,630 >> Takže sa vracia do nášho programu, som zabudli hash patrí string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Takže string.h bude hlavičkový súbor, ktorý prehlasuje, 277 00:16:57,730 --> 00:16:58,980 Funkcie strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, to skompiluje. 280 00:17:06,060 --> 00:17:09,109 Teraz, poďme ho spustiť. 281 00:17:09,109 --> 00:17:10,930 Tak práve to. 282 00:17:10,930 --> 00:17:17,790 Bude to vytlačiť naše názov programu, hello world. 283 00:17:17,790 --> 00:17:23,510 Bude to vytlačiť každú vec, každý znak, na samostatnom riadku. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Takže poďme vlastne vziať o krok ďalej. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 A namiesto použitia string.h, poďme premýšľať o tom, ako by sme realizovať naše vlastné 288 00:17:39,700 --> 00:17:41,420 strlen funkcie. 289 00:17:41,420 --> 00:17:45,600 Tak som si hneď dať funkcia podpis. 290 00:17:45,600 --> 00:17:52,900 Takže poďme zavolať my_strlen, a to bude trvať reťazec ako argument, 291 00:17:52,900 --> 00:17:57,220 a očakávame, že sa vráti dĺžka tohto reťazca. 292 00:17:57,220 --> 00:18:03,430 Tak, kde je ten chlap? 293 00:18:03,430 --> 00:18:04,990 Áno. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Takže nezabudnite od skoršieho snímky, ktorý bol tiež z minulého týždňa, že 296 00:18:12,900 --> 00:18:18,890 rad postáv, dobre, reťazec, takže povedzme, že je to náš reťazec s 297 00:18:18,890 --> 00:18:29,870 Takže ak s je reťazec, ahoj, a potom, H-E-L-L-O, pamäti, že sa to 298 00:18:29,870 --> 00:18:35,610 byť, a potom to spätné lomítko 0 znak. 299 00:18:35,610 --> 00:18:39,170 >> Tak ako sa dostaneme dĺžku s? 300 00:18:39,170 --> 00:18:43,190 No, trik hľadá tento vôľa, 0 povahu, tento null 301 00:18:43,190 --> 00:18:44,380 terminátor. 302 00:18:44,380 --> 00:18:50,270 Takže algoritmus bude byť niečo ako málo 303 00:18:50,270 --> 00:18:51,510 dosť postáv, ktoré - 304 00:18:51,510 --> 00:18:56,180 Poďme si to ručne predstavujú jedny čítač, hovorme túto dĺžku int. 305 00:18:56,180 --> 00:19:00,060 Takže, od tu, my sme bude iterácii nášho reťazca. 306 00:19:00,060 --> 00:19:04,100 >> Takže prvý znak, to je H, a nie je to spätné lomítko 0, takže 307 00:19:04,100 --> 00:19:05,170 dĺžka je 1. 308 00:19:05,170 --> 00:19:08,050 Iterovat na ďalší znak, E, a to ani spätné lomítko 0. 309 00:19:08,050 --> 00:19:09,630 Dĺžka 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 A konečne sa dostávame spätné lomítko 0, a tak to znamená, dobre, 314 00:19:16,690 --> 00:19:17,780 Tento reťazec je u konca. 315 00:19:17,780 --> 00:19:20,130 Takže poďme sa vrátiť päť. 316 00:19:20,130 --> 00:19:33,630 >> Takže vlastne vykonáva jednak tým, že môj dĺžky n sa rovná 0, moja pravá ruka. 317 00:19:33,630 --> 00:19:36,088 A budeme iterovat - 318 00:19:36,088 --> 00:19:38,000 >> SPEAKER 1: [nepočuteľné] 319 00:19:38,000 --> 00:19:38,640 >> ROB BODEN: Oh, strieľať. 320 00:19:38,640 --> 00:19:39,870 Dobrý nápad. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 Takže dĺžka n rovné 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Takže teraz, keď s dĺžka nie je rovné a potom, spätné lomítko 0. 325 00:19:58,310 --> 00:20:04,660 Takže pamätajte, že toto spätné lomítko 0, je Skutočný znak, a znamená to, že 326 00:20:04,660 --> 00:20:05,820 koniec reťazca. 327 00:20:05,820 --> 00:20:09,850 Rovnako ako aj spätné lomítko n je aktuálny znak. 328 00:20:09,850 --> 00:20:14,040 Spätné lomítko 0 sa chystá uviesť koniec nášho reťazca. 329 00:20:14,040 --> 00:20:15,414 Nechcem, aby to dať tam. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 A zatiaľ čo s indexované podľa dĺžky nie je rovná null zakončenie, potom 332 00:20:25,620 --> 00:20:27,130 sme len tak zvýšiť dĺžku. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Takže na konci nášho programu, Dĺžka sa nakoniec bude 335 00:20:34,880 --> 00:20:37,610 byť 5 v tomto prípade. 336 00:20:37,610 --> 00:20:39,210 A budeme len vracať dĺžku. 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 Takže teraz tu, vôbec sa mi nepáči to my_strlen. 340 00:20:48,290 --> 00:20:50,700 Poďme skompilovať, aby sa ubezpečil, všetko beží hladko. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Som robil vo 2? 343 00:20:58,210 --> 00:21:00,565 Alebo to bol 1? 344 00:21:00,565 --> 00:21:01,940 To by malo stačiť. 345 00:21:01,940 --> 00:21:02,690 Dobrá. 346 00:21:02,690 --> 00:21:08,490 Tak toto je argv 2. 347 00:21:08,490 --> 00:21:11,585 Funguje ako sa očakávalo, aj keď bolo to, že ten, čo som to urobil v? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Áno. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Táto verzia, čo nemal printf nový riadok potom, ale to 352 00:21:21,820 --> 00:21:22,910 nie je žiadny rozdiel. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Takže pracoval, ako sa očakávalo. 355 00:21:25,780 --> 00:21:34,750 >> Teraz môžeme aj kombinovať jeden krok ďalej, kde Oznámenie tu, dobre, 356 00:21:34,750 --> 00:21:38,920 Najprv sme schmatol strlen z argv i, a potom sme iterácie 357 00:21:38,920 --> 00:21:41,450 každá postava v tomto reťazci. 358 00:21:41,450 --> 00:21:47,480 Takže namiesto toho, aby robil to, čo keby sme Len kombinovať logiku čakania 359 00:21:47,480 --> 00:21:50,740 až sme narazili spätné lomítko 0 práva do tejto slučky for? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Takže iterovat kým argv i, j robí nie je rovné spätné lomítko 0. 362 00:22:07,490 --> 00:22:10,680 Takže prvá je spustiť. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Dobrá. 365 00:22:21,180 --> 00:22:27,655 Tak tu je táto podmienka hovorí - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 Poďme jasné, že. 368 00:22:40,060 --> 00:22:49,140 Takže teraz, nech je to naša argv. 369 00:22:49,140 --> 00:22:55,290 Takže, keď som bežal tento program skôr, argv je pole reťazcov. 370 00:22:55,290 --> 00:23:03,100 A tak, keď som ho spustiť s bodkou lomítkom argv 2, hello world, potom argv 371 00:23:03,100 --> 00:23:07,650 sám o sebe je dĺžka 3, pre argv nula, ahoj a svet. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> A v každej z týchto indexov je, Samotný pole, kde to bude 374 00:23:19,660 --> 00:23:23,780 bodka, bude to lomítko, ja neviem, v prípade, že je správny smer, som 375 00:23:23,780 --> 00:23:25,680 Nemyslím, že to bolo. 376 00:23:25,680 --> 00:23:30,110 -R-V pomlčka, potrebujú viac priestoru. 377 00:23:30,110 --> 00:23:32,570 Poďme nakrájame na tomto poli. 378 00:23:32,570 --> 00:23:38,230 -R-V pomlčka 0, a potom spätné lomítko 0. 379 00:23:38,230 --> 00:23:43,160 A potom v neporiadku bude ahoj. 380 00:23:43,160 --> 00:23:45,910 Povedzme, že H-E spätné lomítko 0. 381 00:23:45,910 --> 00:23:51,130 A konečne, W-O lomka 0. 382 00:23:51,130 --> 00:23:59,730 >> Takže algoritmus, ktorý sme práve napísali, vnorené cykly for, čo sú zač 383 00:23:59,730 --> 00:24:07,321 robí, je, musíme najprv čeliť aj a potom j 384 00:24:07,321 --> 00:24:15,206 To by bolo jednoduchšie, s kódom na obrazovka, Vráťme sa k tomu. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Tak zistíte, že aj je iterátor, ktorý je iterácie každý príkaz 387 00:24:24,600 --> 00:24:25,610 argument riadok. 388 00:24:25,610 --> 00:24:28,870 A j je iterátor Iterácia na každý znak v tom, že 389 00:24:28,870 --> 00:24:30,410 argument riadok príkaz. 390 00:24:30,410 --> 00:24:46,755 Takže čo to najvnútornejšie printf robí je, sme printf argv 0 0, printf 391 00:24:46,755 --> 00:24:58,680 argv 0 1 printf argv 0 2, 0 3, 0 4, 0 5, 0 6, ale teraz, argv 0 7 sa chystá 392 00:24:58,680 --> 00:25:00,670 rovná spätné lomítko 0. 393 00:25:00,670 --> 00:25:05,730 >> Tak sme sa ukončiť, že pre sláčiky, a teraz som sa opakuje na 1. 394 00:25:05,730 --> 00:25:10,910 A teraz ideme k tlači argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 No, teraz, keď som rez ahoj krátka, argv 1 2 opäť bude 396 00:25:17,040 --> 00:25:18,170 spätné lomítko 0. 397 00:25:18,170 --> 00:25:25,050 A tak, aj zvýšiť, a pokračovať, a tak ďalej, kým sa vytlačiť všetky 398 00:25:25,050 --> 00:25:28,580 svet, a to sú tri príkazového riadku argumenty, a budeme ukončiť z 399 00:25:28,580 --> 00:25:31,670 vonkajšie slučka, a dokončiť náš 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 >> Takže poďme sa sem vrátiť. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Takže budete získať nejaké vedomosti s argumenty príkazového riadku pre tento 406 00:25:52,370 --> 00:25:54,460 osobitný problém nastaviť. 407 00:25:54,460 --> 00:25:56,630 >> Teraz, ladenie. 408 00:25:56,630 --> 00:26:01,680 Takže ste asi už musel urobiť niektoré ladiace s vašou predchádzajúce 409 00:26:01,680 --> 00:26:03,120 problém nastaviť. 410 00:26:03,120 --> 00:26:08,420 A ešte jedna veľmi jednoduchý spôsob, ako ladenie, Najprv sa poďme pozrieť na buggy programu. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 No, prechádzky tohto programu, budeme žiadať užívateľa o 413 00:26:23,830 --> 00:26:29,350 integer, chytiť, že celé číslo, a potom, ľubovoľne, máme while, ktorý 414 00:26:29,350 --> 00:26:32,280 sa práve chystá decrement i, kým je to rovná 10. 415 00:26:32,280 --> 00:26:35,820 Poďme sa len predpokladať, že som zadanie celé číslo väčšie ako 10. 416 00:26:35,820 --> 00:26:38,700 Takže decrement aj tak, aby to rovná 10. 417 00:26:38,700 --> 00:26:42,630 >> A potom máme ďalšie while že, keď som sa nerovná 0, máme 418 00:26:42,630 --> 00:26:44,540 bude decrement aj o 3. 419 00:26:44,540 --> 00:26:49,790 Takže ak uvidíte zámer chyby tu je to, že tento bude decrement aj na 420 00:26:49,790 --> 00:26:57,010 byť 10, a potom to, kým slučka úbytok aj z 10 na 7, až 4 na 1, 421 00:26:57,010 --> 00:27:02,880 k negatívnemu 2, aby negatívne 5, a tak ďalej, na negatívne nekonečna, pretože aj bude 422 00:27:02,880 --> 00:27:05,920 Nikdy vlastne rovná 0. 423 00:27:05,920 --> 00:27:08,610 A potom na konci tohto programu, máme funkciu foo, ktorý je 424 00:27:08,610 --> 00:27:12,130 ide o tlači, že i 425 00:27:12,130 --> 00:27:16,520 >> Tak to je krátka a triviálne program a chyba je zrejmé, 426 00:27:16,520 --> 00:27:18,790 zvlášť potom, čo som povedal to, čo chyba je. 427 00:27:18,790 --> 00:27:24,840 Ale zámer tu je dobre, to by mohlo skutočne vyzerať ako niektoré z vašich 428 00:27:24,840 --> 00:27:30,040 riešenie od chamtivý od posledného problém nastaviť, a možno to mať 429 00:27:30,040 --> 00:27:32,800 niektoré nekonečná slučka v programe, a nemáte tušenie, 430 00:27:32,800 --> 00:27:34,100 čo to spôsobuje. 431 00:27:34,100 --> 00:27:38,690 Takže veľmi užitočné pre ladenie technika je jednoducho pridať printfs 432 00:27:38,690 --> 00:27:40,180 celého kódu. 433 00:27:40,180 --> 00:27:49,200 >> Takže tu chcem printf mimo Prvý cyklus while. 434 00:27:49,200 --> 00:27:53,155 A tu chcem printf, a ja si len vytlačiť i 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Budem ešte urobiť ako prvé, zatiaľ čo slučka, i 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Vonku, druhý cyklus while. 439 00:28:09,040 --> 00:28:12,170 Opäť, tlačiť vnútri odtiaľ, hodnota i 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 A poďme spustiť to. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Takže bodka lomítko ladenie. 444 00:28:24,800 --> 00:28:25,610 Zadajte celé číslo. 445 00:28:25,610 --> 00:28:28,150 Poďme urobiť 13. 446 00:28:28,150 --> 00:28:28,760 A boom. 447 00:28:28,760 --> 00:28:33,300 Vidíme, že sme nekonečné smyčkování vnútri druhej, zatiaľ čo slučky. 448 00:28:33,300 --> 00:28:36,305 Takže teraz vieme, čo je chyba. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Ale printf ladenie je úplne skvelý, ale akonáhle sa vaše programy sa 451 00:28:45,610 --> 00:28:50,560 dlhšie a zložitejšie, existujú sofistikovanejšie riešenie 452 00:28:50,560 --> 00:28:51,705 ako veci pracujú. 453 00:28:51,705 --> 00:28:52,955 Takže poďme odstrániť všetky tieto printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 A poďme sa uistite, ja nie niečo pokaziť. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Takže program, budeme predstaviť sa nazýva 458 00:29:14,180 --> 00:29:16,715 GDB, GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 No, vlastne, poďme odstrániť ladenie pre druhej, a aby ladiť znova. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 No, vlastne prvá, dobrá lekcia V argumenty príkazového riadku. 463 00:29:34,440 --> 00:29:37,780 Všimnite si, že tento Clang príkaz, ktorý je zostavovanie všetko je odovzdaný 464 00:29:37,780 --> 00:29:41,300 na príkazovom riadku, tieto argumenty príkazového riadku. 465 00:29:41,300 --> 00:29:46,250 Tak, ako presne sa bude používať argumenty príkazového riadku, ako sme 466 00:29:46,250 --> 00:29:51,500 predtým, a ako budete v pset 2, to je ako Clang je ich použitie. 467 00:29:51,500 --> 00:30:00,070 >> Tak zistíte, že to prvý príznak, pomlčka ggdb3, čo že to hovorím, kovový zvuk, 468 00:30:00,070 --> 00:30:03,790 mali by ste skompilovať tento súbor s zámer, že sme sa nakoniec 469 00:30:03,790 --> 00:30:05,380 je potrebné ju ladiť. 470 00:30:05,380 --> 00:30:13,840 Takže ak budete mať tú vlajku, potom môžeme GDB ladenie. 471 00:30:13,840 --> 00:30:17,380 A to bude otvárať GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> Takže tam je veľa príkazov že je potrebné si zvyknúť. 473 00:30:22,920 --> 00:30:27,100 Prvý z nich, že budete pravdepodobne ihneď potrebujete, je Run. 474 00:30:27,100 --> 00:30:28,200 Takže to, čo je spustiť robiť? 475 00:30:28,200 --> 00:30:30,910 Bude to začiatok nášho programu. 476 00:30:30,910 --> 00:30:36,180 Tak utekaj, začína program, program pýta sa nás na celé číslo, 13. 477 00:30:36,180 --> 00:30:39,170 A potom je to nekonečná smyčkování ako Očakáva sa, s výnimkou som odstránil 478 00:30:39,170 --> 00:30:40,500 printfs, takže nemáme ani vidieť. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Vystúpil normálne. 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 Je možné, že je to všetko zabalené cesta okolo, späť na - ignorovať to. 484 00:30:53,640 --> 00:30:55,170 Predpokladajme, že nevystúpil normálne. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 K dispozícii je zložité odpoveď. 487 00:31:03,370 --> 00:31:07,890 >> Takže teraz, že to nie je moc užitočné. 488 00:31:07,890 --> 00:31:11,480 Tak práve beží náš program vnútri Tento debugger sa nám nepomôže v žiadnom 489 00:31:11,480 --> 00:31:15,610 spôsobom, pretože sme mohli práve urobil bodka lomítko ladenie zvonku GDB. 490 00:31:15,610 --> 00:31:21,250 Takže jeden príkaz, ktorý pravdepodobne budete - 491 00:31:21,250 --> 00:31:22,970 a ja budem skončiť to. 492 00:31:22,970 --> 00:31:25,850 Ovládanie-d alebo ukončiť, a to ako prácu. 493 00:31:25,850 --> 00:31:29,550 Takže poďme otvoriť ho znova. 494 00:31:29,550 --> 00:31:31,130 >> Ďalší príkaz, ktorý budete pravdepodobne okamžite chcete 495 00:31:31,130 --> 00:31:33,600 zvyknúť si je prestávka. 496 00:31:33,600 --> 00:31:37,120 Takže budeme rozbiť na hlavnú teraz, a potom budem vysvetľovať, že. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 No, tu vidíme my nastaviť zarážku na tomto riadku debug.c. 499 00:31:46,370 --> 00:31:50,160 Takže to, čo zlom znamená, že keď som typ beh, program bude 500 00:31:50,160 --> 00:31:53,560 pokračovať v jazde, až kým Udrel som zarážku. 501 00:31:53,560 --> 00:31:59,390 Takže, keď som narazila na príkaz Spustiť, spustí program, a potom sa zlomí, akonáhle to 502 00:31:59,390 --> 00:32:01,940 vstupuje do hlavnej funkcie. 503 00:32:01,940 --> 00:32:06,930 Prestávka hlavné bude niečo ste celkom bežne robiť. 504 00:32:06,930 --> 00:32:11,340 >> A teraz vám predstaviť niektorých ďalších príkazov. 505 00:32:11,340 --> 00:32:14,330 Všimnite si tu, že hovorí my zlomil na riadku 11, ktorý je 506 00:32:14,330 --> 00:32:16,230 printf, zadajte celé číslo. 507 00:32:16,230 --> 00:32:21,260 Takže príkaz Ďalšie bude, ako ideme na ďalší riadok kódu. 508 00:32:21,260 --> 00:32:24,810 To sa deje, aby sme mohli kroku v našej programovej riadok po riadku. 509 00:32:24,810 --> 00:32:26,260 Takže nabudúce. 510 00:32:26,260 --> 00:32:29,820 >> Teraz linka 12, ideme získať celé číslo. 511 00:32:29,820 --> 00:32:30,450 Ďalšie. 512 00:32:30,450 --> 00:32:34,290 A ak ste jednoducho stlačiť Enter znova, bude to opakovať posledná vec, ktorú urobil. 513 00:32:34,290 --> 00:32:36,480 Takže nemám potrebu písať Ďalšie zakaždým. 514 00:32:36,480 --> 00:32:40,100 Takže zadať číslo, 13. 515 00:32:40,100 --> 00:32:46,940 Takže teraz, linka 14, a zároveň aj väčší ako 10, a ja budem robiť ďalej. 516 00:32:46,940 --> 00:32:48,685 A vidíme, že budeme decrement i 517 00:32:48,685 --> 00:32:50,210 Takže budeme aj decrement znova. 518 00:32:50,210 --> 00:32:53,620 >> Takže teraz, ďalšie užitočné príkaz Tlač. 519 00:32:53,620 --> 00:32:55,750 Takže tlače sa bude tlačiť hodnota premennej. 520 00:32:55,750 --> 00:32:57,825 Poďme sa vydať na hodnotu premennej i 521 00:32:57,825 --> 00:32:58,705 Poďme tlačiť i 522 00:32:58,705 --> 00:33:00,910 Bude to povedať, že som ich 11. 523 00:33:00,910 --> 00:33:03,330 Teraz sme znovu na Ďalšie a zároveň i je väčší než 10. 524 00:33:03,330 --> 00:33:05,590 Tak som to ešte väčší než 10, pretože je to 11. 525 00:33:05,590 --> 00:33:06,920 i mínus mínus. 526 00:33:06,920 --> 00:33:08,250 Poďme si vytlačiť aj znova. 527 00:33:08,250 --> 00:33:10,950 Ako sa dalo očakávať, je to 10. 528 00:33:10,950 --> 00:33:12,510 >> Takže teraz, nabudúce. 529 00:33:12,510 --> 00:33:16,250 Bude to späť do stavu, aj je vyšší ako 10, ale ja ich teraz 10, tak 530 00:33:16,250 --> 00:33:20,040 že to nie je väčšie ako 10, takže očakávame, že to vypadnúť z cyklu while. 531 00:33:20,040 --> 00:33:22,220 A teraz sme pod tento riadok kódu. 532 00:33:22,220 --> 00:33:28,750 A ďalší príkaz, List, sa práve chystá Pre zobrazenie predchádzajúcej a ďalšie 533 00:33:28,750 --> 00:33:31,240 pár riadkov kódu, v prípade, že ste stratili sami. 534 00:33:31,240 --> 00:33:35,420 Takže sme jednoducho vystúpil tento while, a teraz sme vstúpili do tejto 535 00:33:35,420 --> 00:33:37,080 kým slučka, linka 18. 536 00:33:37,080 --> 00:33:39,860 Takže keď som sa nerovná 0. 537 00:33:39,860 --> 00:33:46,570 A ďalšie, aj rovná aj mínus 3, a my budeme Všimnite si, tak to jednoducho ďalej. 538 00:33:46,570 --> 00:33:48,270 A môžeme vytlačiť aj 539 00:33:48,270 --> 00:33:49,990 >> Každý príkaz druh má klávesové skratky. 540 00:33:49,990 --> 00:33:51,720 Tak p je skratka pre tlač. 541 00:33:51,720 --> 00:33:53,400 Takže môžeme p i 542 00:33:53,400 --> 00:33:57,550 Len držte n, alebo aby robil Ďalšie. 543 00:33:57,550 --> 00:33:58,340 Vytlačiť aj znova. 544 00:33:58,340 --> 00:34:00,380 Vidíte, teraz je to negatívny 167. 545 00:34:00,380 --> 00:34:06,030 Takže to bude trvať večne, ale nie naozaj navždy, pretože ste práve videli, je 546 00:34:06,030 --> 00:34:09,330 bude skutočne skončí na nejakom mieste. 547 00:34:09,330 --> 00:34:15,699 >> Tak to je začiatok GDB. 548 00:34:15,699 --> 00:34:19,504 Ale poďme urobiť ešte jednu vec v GDB. 549 00:34:19,504 --> 00:34:20,754 Uh, ladenie. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Takže, v tomto konkrétnom prípade, nekonečná slučka sa stalo, že vo vnútri 552 00:34:28,534 --> 00:34:30,050 hlavnou funkciou. 553 00:34:30,050 --> 00:34:35,779 A teraz, jednoducho prijať, že som bude pohybovať nekonečnú slučku do 554 00:34:35,779 --> 00:34:37,029 funkcie foo. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Len si uvedomiť, že na konci tohto Program, dobre, to bolo pôvodne 557 00:34:43,730 --> 00:34:46,210 volá foo, ktorý bol práve bude tlačiť i 558 00:34:46,210 --> 00:34:51,880 Ale teraz sme volá foo, ktorý je bude decrement som, až je to 0, a 559 00:34:51,880 --> 00:34:54,548 vytlačiť túto premennú. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Okrem toho, že. 562 00:34:57,970 --> 00:35:00,175 Vykonajte ladenie. 563 00:35:00,175 --> 00:35:03,310 A teraz, gdb ladenie. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Takže keď som spustiť potom sa nebudem byť schopný skutočne krokovať my 566 00:35:10,580 --> 00:35:11,730 programu riadok po riadku. 567 00:35:11,730 --> 00:35:19,820 Takže poďme rozbiť na hlavnej, a potom zadajte príkaz Spustiť. 568 00:35:19,820 --> 00:35:28,160 Tak choď cez to, printf, zadajte číslo, dostanete číslo, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Takže budeme držať znižujúce kým aj je väčší než 10. 571 00:35:37,490 --> 00:35:42,840 Potom ideme do prepadnúť while, a dostať sa do vedenia - 572 00:35:42,840 --> 00:35:44,364 poďme otvoriť v samostatnom okne. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Tak sme zmenšená, kým som bol už nie väčší ako 10, a potom sme 575 00:35:53,300 --> 00:35:55,700 sa nazýva funkcia, foo. 576 00:35:55,700 --> 00:36:01,340 >> Takže to, čo sa stalo, akonáhle som narazila Funkcie foo, tak som zavolal foo, a 577 00:36:01,340 --> 00:36:04,030 Potom som už nemal kontrolu nad GDB. 578 00:36:04,030 --> 00:36:10,230 Takže akonáhle som narazila Ďalšie na tomto riadku, veci pokračuje, kým sa to stalo, 579 00:36:10,230 --> 00:36:12,400 kde program vystúpil, keď - 580 00:36:12,400 --> 00:36:14,450 predpokladať, že neexistovala nakoniec. 581 00:36:14,450 --> 00:36:16,390 Videl si, že pauza na chvíľu hoci. 582 00:36:16,390 --> 00:36:22,040 Tak prečo som stratil kontrolu nad Program v tomto bode? 583 00:36:22,040 --> 00:36:27,540 No, keď som typ vedľa, že ide doslovný ďalší riadok kódu, ktorý 584 00:36:27,540 --> 00:36:28,850 bude vykonávať. 585 00:36:28,850 --> 00:36:35,950 Takže po riadku 21, ďalší riadok kódu že bude vykonávať je linka 22, 586 00:36:35,950 --> 00:36:38,520 čo znamená, že opustenie hlavné. 587 00:36:38,520 --> 00:36:43,810 Takže nechcem, aby len tak na ďalší riadok kódu. 588 00:36:43,810 --> 00:36:48,170 Chcem ísť do funkcie, foo, a potom tiež krokovať 589 00:36:48,170 --> 00:36:49,830 tieto riadky kódu. 590 00:36:49,830 --> 00:36:53,726 >> Takže to, že máme alternatívu. 591 00:36:53,726 --> 00:36:56,770 Poďme prestať to znova. 592 00:36:56,770 --> 00:36:58,020 Prestávka hlavné. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, ďalší, ďalší, 13, ďalšie, ďalšie, ďalšie, starostlivo, 595 00:37:06,370 --> 00:37:09,820 predtým, než sme narazili riadok foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Takže teraz sme na riadku 21, kde hovoríme foo. 598 00:37:13,700 --> 00:37:17,100 Nechceme písať ďalej, pretože to bude len volanie funkcie foo, a 599 00:37:17,100 --> 00:37:18,710 prejsť na ďalší riadok kódu. 600 00:37:18,710 --> 00:37:20,840 Čo chceme použiť, je krok. 601 00:37:20,840 --> 00:37:25,690 Takže tam je rozdiel medzi krokom a ďalší, kde krok kroky do 602 00:37:25,690 --> 00:37:28,190 fungovať, a ďalšie jede cez funkciu. 603 00:37:28,190 --> 00:37:32,830 Je to len robí celistvosť funkcie a udržuje v chode. 604 00:37:32,830 --> 00:37:37,210 >> Takže krok sa chystá priviesť nás do funkcie foo. 605 00:37:37,210 --> 00:37:41,160 A vidíme tu, teraz, sme späť na Tento while to, teoreticky, 606 00:37:41,160 --> 00:37:44,190 bude pokračovať navždy. 607 00:37:44,190 --> 00:37:50,420 A ak ste hit krok, keď to nie je ani funkcie pre volanie, potom je to 608 00:37:50,420 --> 00:37:51,720 identické Ďalšie. 609 00:37:51,720 --> 00:37:55,320 Takže je to len vtedy, keď ste na riadok, ktorý volá funkciu, ktorá Step 610 00:37:55,320 --> 00:37:56,970 sa bude líšiť od Next. 611 00:37:56,970 --> 00:37:57,930 Takže krok nám prinesie tu. 612 00:37:57,930 --> 00:38:02,100 Krok, krok, krok, krok, krok, krok, a Budeme sa nekonečná slučka navždy. 613 00:38:02,100 --> 00:38:06,810 >> Takže ste mohli zvyknúť, že vaše spôsob identifikácie nekonečnej slučky, je 614 00:38:06,810 --> 00:38:08,960 len držať túto klávesu Enter na vidieť, kde narazíte. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Existujú lepšie spôsoby, ako to urobiť, ale teraz, že je úplne dostačujúce. 617 00:38:14,780 --> 00:38:17,967 A štylisticky, aby zodpovedal štýlu 50, mal som to urobil. 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 >> Takže jeden posledný príkaz predstaviť. 621 00:38:28,400 --> 00:38:30,810 Dobre, poďme gdb ladenie palcov 622 00:38:30,810 --> 00:38:35,580 Takže namiesto toho, lámanie na hlavnú, keď som poznať funkciu foo je tiež 623 00:38:35,580 --> 00:38:39,230 problém, potom by som mohol mať len povedal, rozbiť na foo, namiesto toho. 624 00:38:39,230 --> 00:38:42,310 Povedzme, že som sa rozbiť na hlavné aj foo. 625 00:38:42,310 --> 00:38:45,390 Takže si môžete nastaviť toľko zarážky ako budete chcieť. 626 00:38:45,390 --> 00:38:49,230 Keď som sa napísať slovo pes, to sa deje zastaviť na - 627 00:38:49,230 --> 00:38:52,180 ooh, poďme překompilovat, pretože Zmenil som veci. 628 00:38:52,180 --> 00:38:55,950 Uvidíte tento riadok, varovanie, zdroj súbor je novší ako spustiteľného súboru. 629 00:38:55,950 --> 00:38:59,680 Takže to znamená, že som išiel sem a zmenil to, aby zodpovedali štýlu 630 00:38:59,680 --> 00:39:03,100 50, ale ja som překompilovat programu. 631 00:39:03,100 --> 00:39:04,870 Takže GDB ma vedomý. 632 00:39:04,870 --> 00:39:10,130 Odídem, aby ladiť znova, hit gdb ladenie. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Takže teraz, späť k tomu, čo som robil. 635 00:39:12,800 --> 00:39:15,720 Prestávka hlavné, prerušenie foo. 636 00:39:15,720 --> 00:39:20,680 Teraz, keď som spustení programu, takže je to bude pokračovať, kým hity 637 00:39:20,680 --> 00:39:21,320 breakpoint. 638 00:39:21,320 --> 00:39:24,680 To breakpoint sa stane byť prvý v hlavnej. 639 00:39:24,680 --> 00:39:28,630 A teraz, namiesto toho, aby robil ďalšie, ďalšie, ďalšie, ďalšie, ďalšie, až som narazila foo, som 640 00:39:28,630 --> 00:39:35,230 môžete písať aj naďalej, čo bude pokračovať kým nenarazíte na ďalšiu zarážku. 641 00:39:35,230 --> 00:39:37,200 Musím najprv zadať celé číslo. 642 00:39:37,200 --> 00:39:40,570 Pokračovať bude pokračovať, kým som trafil ďalšie breakpoint, čo je skutočnosť, že 643 00:39:40,570 --> 00:39:43,320 funkcie foo. 644 00:39:43,320 --> 00:39:50,130 >> Takže Run pobeží, kým nenarazíte breakpoint, ale stačí len zadať príkaz Spustiť, keď 645 00:39:50,130 --> 00:39:54,060 ste spustenie programu, a potom, od tej doby, je to aj naďalej. 646 00:39:54,060 --> 00:40:01,950 Keby som to urobil rozbiť hlavné a potom bežal, bude to zlomiť na 647 00:40:01,950 --> 00:40:03,670 hlavné, a potom pokračovať. 648 00:40:03,670 --> 00:40:10,050 Vzhľadom k tomu, nemám bod zlomu na foo, Zadajte celé číslo, potom teraz som 649 00:40:10,050 --> 00:40:11,380 nebude rozbiť na foo. 650 00:40:11,380 --> 00:40:16,318 Je to jednoducho bude nekonečno slučky, kým to. 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 >> Tak to je úvod do GDB. 654 00:40:24,420 --> 00:40:27,790 Tie by mali začať používať vo vašich problémov sád. 655 00:40:27,790 --> 00:40:30,550 To môže byť veľmi užitočné, identifikovať chyby. 656 00:40:30,550 --> 00:40:35,280 Ak ste vlastne len, line-by-line, prejdite prostredníctvom kódu, a porovnať, čo je 657 00:40:35,280 --> 00:40:39,740 vlastne deje s tým, čo môžete očakávať aby sa to stalo, potom je to celkom 658 00:40:39,740 --> 00:40:41,060 ťažko prehliadnuť vaše chyby. 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 >> Takže minulý týždeň David vyrastal v tomto tajný kľúč kryptografia veci pre 663 00:40:54,040 --> 00:40:59,350 prvýkrát, kedy nechceme Heslá len byť uložené na našich 664 00:40:59,350 --> 00:41:03,210 Počítač v niektorých textového súboru, kde niekto môže prísť a len 665 00:41:03,210 --> 00:41:04,660 otvorte ju a prečítajte si ich. 666 00:41:04,660 --> 00:41:07,530 V ideálnom prípade by sa šifrované nejakým spôsobom. 667 00:41:07,530 --> 00:41:13,340 A Problem Set 2, budete sa zaoberať s jedného spôsobu šifrovanie, 668 00:41:13,340 --> 00:41:16,520 alebo, no, dve metódy, ale nie sú tak veľké. 669 00:41:16,520 --> 00:41:20,050 Ak máte robiť hacker vydanie, ste tiež bude rokovania s 670 00:41:20,050 --> 00:41:22,150 dešifrovanie nejaké veci. 671 00:41:22,150 --> 00:41:29,770 >> Takže otázka teraz je, dobre, a to aj v prípade, Máme najsilnejšie šifrovanie 672 00:41:29,770 --> 00:41:34,830 algoritmus na svete, ak sa rozhodnete konkrétne chudobné heslo, potom to 673 00:41:34,830 --> 00:41:37,720 vám nepomôže moc, pretože ľudia budú môcť na to prísť. 674 00:41:37,720 --> 00:41:41,530 Aj keď videl zašifrovaný reťazec a vyzerá to, že neporiadok z odpadkov 675 00:41:41,530 --> 00:41:44,760 to znamená, že nič pre nich, v prípade, že ešte stačí vyskúšať niekoľko hesiel 676 00:41:44,760 --> 00:41:50,560 na to prísť, potom nie sú príliš bezpečné. 677 00:41:50,560 --> 00:41:55,890 Takže sledujete video, ktoré je tento bod. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [PLAYBACK] 680 00:42:00,970 --> 00:42:02,100 >> -Prilba, vám diabol. 681 00:42:02,100 --> 00:42:03,370 Čo sa deje? 682 00:42:03,370 --> 00:42:05,170 Čo robíte s mojou dcérou? 683 00:42:05,170 --> 00:42:09,910 >> -Dovoľte mi predstaviť brilantné mladý plastický chirurg, Dr Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, najväčší nos práce človek v celej 685 00:42:13,730 --> 00:42:16,080 vesmír, a Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -Vaša Výsosť. 687 00:42:17,210 --> 00:42:18,070 >> -Nose práce? 688 00:42:18,070 --> 00:42:18,670 Nerozumiem. 689 00:42:18,670 --> 00:42:20,090 Ona už mala nos. 690 00:42:20,090 --> 00:42:21,910 Bol to sladký šestnásť prítomný. 691 00:42:21,910 --> 00:42:22,140 >> -No. 692 00:42:22,140 --> 00:42:23,690 Nie je to to, čo si myslíte. 693 00:42:23,690 --> 00:42:25,420 Je to oveľa, oveľa horšie. 694 00:42:25,420 --> 00:42:30,300 Ak nechcete mi dať kombinácii so vzduch štít, Dr Schlotkin bude 695 00:42:30,300 --> 00:42:34,226 dať svoju dcéru späť svoj starý nos. 696 00:42:34,226 --> 00:42:35,476 >> -No. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 Kde si to zobral? 699 00:42:40,516 --> 00:42:41,440 >> -Dobre. 700 00:42:41,440 --> 00:42:42,180 Poviem. 701 00:42:42,180 --> 00:42:43,381 Poviem. 702 00:42:43,381 --> 00:42:44,263 Nie, tati. 703 00:42:44,263 --> 00:42:45,590 Nie, to nesmieš. 704 00:42:45,590 --> 00:42:46,860 >> -Máš pravdu, má drahá. 705 00:42:46,860 --> 00:42:48,450 Budem si ujsť nové nos. 706 00:42:48,450 --> 00:42:52,090 Ale ja som sa mu to povedať kombináciu, bez ohľadu na to, čo. 707 00:42:52,090 --> 00:42:53,680 >> -Veľmi dobre. 708 00:42:53,680 --> 00:42:55,685 Dr Schlotkin, robiť to najhoršie. 709 00:42:55,685 --> 00:42:56,914 >> -Rado sa stalo. 710 00:42:56,914 --> 00:43:00,690 >> [NÁSTROJE SÚ nabrúsené] 711 00:43:00,690 --> 00:43:01,910 >> -No. 712 00:43:01,910 --> 00:43:02,520 Počkajte. 713 00:43:02,520 --> 00:43:03,836 Počkajte. 714 00:43:03,836 --> 00:43:05,300 Poviem. 715 00:43:05,300 --> 00:43:06,880 Poviem. 716 00:43:06,880 --> 00:43:09,130 >> Som vedel, že to bude fungovať. 717 00:43:09,130 --> 00:43:09,900 Dobrá. 718 00:43:09,900 --> 00:43:12,850 Dajte mi ho. 719 00:43:12,850 --> 00:43:16,918 >> -Kombinácia je jedna. 720 00:43:16,918 --> 00:43:17,406 >> -One. 721 00:43:17,406 --> 00:43:18,382 >> -One. 722 00:43:18,382 --> 00:43:19,358 >> -Two. 723 00:43:19,358 --> 00:43:19,846 >> -Two. 724 00:43:19,846 --> 00:43:20,822 >> -Two. 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 >> -Five. 732 00:43:27,010 --> 00:43:27,670 >> -Five. 733 00:43:27,670 --> 00:43:29,010 >> -Five. 734 00:43:29,010 --> 00:43:34,770 >> -Tak kombinácia je, dva, tri, štyri, päť. 735 00:43:34,770 --> 00:43:37,460 To je ten najhlúpejší kombinácia Čo som kedy v živote počul. 736 00:43:37,460 --> 00:43:39,710 To je ten druh vecí idiot bude mať na jeho batožine. 737 00:43:39,710 --> 00:43:42,000 >> -Ďakujem vám, Vaša Výsosť. 738 00:43:42,000 --> 00:43:43,530 >> -Čo si to urobil? 739 00:43:43,530 --> 00:43:44,490 >> Som vypol múru. 740 00:43:44,490 --> 00:43:45,420 >> -Nie, nie. 741 00:43:45,420 --> 00:43:45,840 Si vypol celý film. 742 00:43:45,840 --> 00:43:46,930 >> -Musel som stlačil zlé tlačidlo. 743 00:43:46,930 --> 00:43:48,265 >> -No, dal ju späť. 744 00:43:48,265 --> 00:43:49,110 Vložte film späť. 745 00:43:49,110 --> 00:43:49,510 >> -Áno, pane. 746 00:43:49,510 --> 00:43:49,917 Áno, pane. 747 00:43:49,917 --> 00:43:50,324 >> -Poďme, Arnold. 748 00:43:50,324 --> 00:43:51,140 No, Gretchen. 749 00:43:51,140 --> 00:43:53,060 Samozrejme, že vieš, že som to ešte musieť účtovať za to. 750 00:43:53,060 --> 00:43:53,440 >> [END VIDEO PLAYBACK] 751 00:43:53,440 --> 00:43:54,690 >> ROB BODEN: Dobre. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Takže teraz, že sme už hovorili o bezpečnosť v niektorých ohľadoch, pekná 754 00:44:08,430 --> 00:44:16,050 malý filmový plagát, takže v posledných rokoch dní, tieto problémy s NSA 755 00:44:16,050 --> 00:44:17,300 sledovanie všetko. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 To môže byť ťažké cítiť, ako ste vy mať nejaký súkromia v 758 00:44:26,930 --> 00:44:34,540 on-line svete, aj keď som nevedel si väčšina detailov PRISM. 759 00:44:34,540 --> 00:44:42,130 Takže pohybuje nad PRISM, nejdeme je potrebné o tom hovoriť, teraz 760 00:44:42,130 --> 00:44:44,030 premýšľať o svojom notebooku. 761 00:44:44,030 --> 00:44:48,360 Tak tu, chcem prejsť k môjmu skutočnému účtu, 762 00:44:48,360 --> 00:44:50,370 s mojím malým tučniakom. 763 00:44:50,370 --> 00:44:57,310 Takže mám nastavené heslo, a že heslo je, čo chcem, aby to bolo. 764 00:44:57,310 --> 00:45:02,430 >> Ale pamätajte si, že to, čo som prihlásenie v s, takže to login 765 00:45:02,430 --> 00:45:04,850 výzva, je nejaký program. 766 00:45:04,850 --> 00:45:07,910 Je nejaký program, ktorý bol napísal nejakú osobou. 767 00:45:07,910 --> 00:45:13,250 A tak, že osoba, ak sú zvlášť nebezpečný, mohli 768 00:45:13,250 --> 00:45:17,780 už bolo povedané, v poriadku, takže ak heslo že som sa vstúpiť, je rovná môj 769 00:45:17,780 --> 00:45:22,800 aktuálne heslo, alebo je to rovnaká na niektoré špeciálne hesla - 770 00:45:22,800 --> 00:45:25,550 David je úžasný, alebo tak niečo - 771 00:45:25,550 --> 00:45:27,190 nechajte ich ďalej 772 00:45:27,190 --> 00:45:33,760 Takže škodlivý programátor môže mať prístup ku všetkým vašim Mac, alebo 773 00:45:33,760 --> 00:45:36,150 Windows, alebo tak niečo. 774 00:45:36,150 --> 00:45:41,980 >> Takže to nie je moc obavy, pretože, Myslím, že je to login programu 775 00:45:41,980 --> 00:45:48,720 , Ktorý je dodávaný s OS X, stovky alebo tisíce ľudí, ktorí majú 776 00:45:48,720 --> 00:45:50,020 preskúmať tento kód. 777 00:45:50,020 --> 00:45:55,330 A tak, ak v kóde niekde, ste povedať, či tento reťazec rovná rovná 778 00:45:55,330 --> 00:45:58,860 David je úžasný, login, potom niekto bude, rovnako ako, počkajte. 779 00:45:58,860 --> 00:45:59,800 To nie je v poriadku. 780 00:45:59,800 --> 00:46:01,790 To by nemalo byť tu. 781 00:46:01,790 --> 00:46:06,650 Takže to je jeden spôsob, ako dostať veci byť celkom bezpečné. 782 00:46:06,650 --> 00:46:10,300 >> Ale myslieť aj programov že píšete. 783 00:46:10,300 --> 00:46:13,000 Povedzme, že ste napísal program login. 784 00:46:13,000 --> 00:46:20,440 Tak to login program, ktorý ste napísal, tak samozrejme, že ste dobrý 785 00:46:20,440 --> 00:46:21,210 programátor. 786 00:46:21,210 --> 00:46:25,610 Nebudeš dať akýkoľvek škodlivý ak x rovná sa rovná David je úžasné 787 00:46:25,610 --> 00:46:27,860 do vášho kódu. 788 00:46:27,860 --> 00:46:31,930 Ale tento program, čo si použiť skompilovať tento program? 789 00:46:31,930 --> 00:46:34,180 Niečo ako Clang. 790 00:46:34,180 --> 00:46:38,460 Takže to, čo v prípade, že osoba, ktorá sa stalo napísať zvonenie špeciál prejímané v Clang 791 00:46:38,460 --> 00:46:44,310 niečo podobné, keď som zostavovaní prihlásiť programu, zadajte tento kód 792 00:46:44,310 --> 00:46:49,720 do prihlasovacieho programu, ktorý hovorí, ak x sa rovná rovná Dávid je úžasné? 793 00:46:49,720 --> 00:46:59,890 Takže nie je ešte dosť, ale máme rovnaký vydávať tu, kde kovový zvuk, dobre, 794 00:46:59,890 --> 00:47:03,790 tisíce, ak nie desiatky tisíc ľudia, sa pozrel na Clang, majú 795 00:47:03,790 --> 00:47:07,160 Pozrel sa na svoje riadkov kódu a povedal, v poriadku, nič zlého tu. 796 00:47:07,160 --> 00:47:10,680 Je zrejmé, že nikto sa robí nič to škodlivý. 797 00:47:10,680 --> 00:47:15,780 >> Ale to, čo je zvonenie sám, ako, čo keď som zostaviť zvonenie? 798 00:47:15,780 --> 00:47:20,900 Čo keď mám nejaký kompilátor, ktorý zostavuje zvonenie, ktoré vloží do Clang 799 00:47:20,900 --> 00:47:25,610 Tento špeciálny hack, ktorý hovorí, všetko v poriadku, keď som sa zostaviť zvonenie, potom 800 00:47:25,610 --> 00:47:31,290 spustiteľný by som sa mala špeciálne vyzerať vnútri prihlasovacie programu a vložkou 801 00:47:31,290 --> 00:47:34,230 toto heslo, rovná sa rovná Dave je úžasné? 802 00:47:34,230 --> 00:47:37,990 Takže si pamätajte, že váš kompilátor sám musí byť zostavený na nejakom mieste. 803 00:47:37,990 --> 00:47:42,810 Takže či to, čo sa rozhodnete zostaviť zvonenie s, je sám o sebe škodlivý, potom 804 00:47:42,810 --> 00:47:45,580 by mohol byť zaskrutkovaný celý cesta v rade. 805 00:47:45,580 --> 00:47:49,630 >> Takže tu máme Ken Thompson a Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Tak toto je kultový fotografie. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie je na pravej strane. 808 00:47:55,470 --> 00:47:58,740 Je major - 809 00:47:58,740 --> 00:48:03,640 skoro napísal C. Tak môžete ďakujem mu za túto triedu. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson je na ľavej strane. 811 00:48:04,840 --> 00:48:07,780 Dvaja z nich v podstate napísal UNIX. 812 00:48:07,780 --> 00:48:10,140 No, oni boli hlavnými prispievateľmi v Unixu. 813 00:48:10,140 --> 00:48:11,310 Tam boli niektoré ďalšie. 814 00:48:11,310 --> 00:48:16,240 Takže Ken Thompson, na nejakom mieste, vyhráva Turing Award. 815 00:48:16,240 --> 00:48:20,860 A ocenenie Turing, vždy som počul je odvolával sa na túto cestu, je to 816 00:48:20,860 --> 00:48:23,100 Nobelova cena za počítačovej vedy. 817 00:48:23,100 --> 00:48:27,500 >> Takže na Turing Award, má na dať jeho ďakovnej reči. 818 00:48:27,500 --> 00:48:31,790 A dáva tomuto veľmi slávny prejav Teraz, s názvom Úvahy o dôverujúci 819 00:48:31,790 --> 00:48:35,620 Dôvera, ktorú sme spojili Ak chcete na stránkach kurzu. 820 00:48:35,620 --> 00:48:41,670 A v tejto reči, on hovorí, všetko v poriadku, tak som napísal UNIX, a teraz všetci 821 00:48:41,670 --> 00:48:43,320 si ľudia používate UNIX. 822 00:48:43,320 --> 00:48:46,960 Teraz si uvedomte, že dnes je Linux priamy potomok UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X priamo používa UNIX. 824 00:48:50,140 --> 00:48:53,810 Windows nie je tak moc, ale veľa myšlienok boli prevzaté zo systému UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Takže pôjde až do fázy, a hovorí, v poriadku, som napísal UNIX. 826 00:48:59,220 --> 00:49:03,940 A rovnako tak vy viete, že som môcť prihlásiť do každej 827 00:49:03,940 --> 00:49:05,590 jeden z vašich počítačov. 828 00:49:05,590 --> 00:49:14,280 Pretože som si jeden z týchto špeciálnych ak x rovná sa rovná Ken Thomson je úžasné, 829 00:49:14,280 --> 00:49:16,350 potom som dovolené sa prihlásiť. 830 00:49:16,350 --> 00:49:18,370 Takže ľudia sú ako, no, Ako si to urobil? 831 00:49:18,370 --> 00:49:21,090 Pozreli sme sa na prihlasovacie programe a nič tam. 832 00:49:21,090 --> 00:49:24,700 Je to ako, no, som upravil kompilátor prihlásiť prihlasovacie programu 833 00:49:24,700 --> 00:49:30,490 takže prihlásenie Program teraz bude mať že x sa rovná rovná Ken Thompson 834 00:49:30,490 --> 00:49:31,700 je úžasné. 835 00:49:31,700 --> 00:49:33,120 >> A oni hovoria, dobre, že to nie je pravda. 836 00:49:33,120 --> 00:49:35,740 Pozeráme sa na kompilátora, a Kompilátor nemá žiadne riadky 837 00:49:35,740 --> 00:49:36,400 Kód takto. 838 00:49:36,400 --> 00:49:40,540 Je to ako, OK, ale to, čo ste kompilácia kompilátora sa? 839 00:49:40,540 --> 00:49:44,810 A myslí si, a je to, ako, no, Ja som ten, kto ti dal kompilátor 840 00:49:44,810 --> 00:49:50,580 ktorú používate pre kompiláciu kompilátora, tak ste kompiláciu kompilátor, ktorý 841 00:49:50,580 --> 00:49:56,390 sama o sebe je škodlivý, a bude prerušiť program login. 842 00:49:56,390 --> 00:49:59,360 Takže v podstate, v tomto bode, tam je žiadny spôsob, ako by ste sa mohli pozrieť na zdroje 843 00:49:59,360 --> 00:50:02,450 Kód prihlasovacie programu vidieť, čo je zle. 844 00:50:02,450 --> 00:50:04,220 Dalo by sa dokonca pozrieť do zdrojový kód kompilátora 845 00:50:04,220 --> 00:50:06,790 vidieť, čo je zle. 846 00:50:06,790 --> 00:50:11,940 >> Budete musieť pozrieť na stroji kód, skutočný binárne zo 847 00:50:11,940 --> 00:50:16,760 zostavený kompilátor vidieť, počkajte, to riadky kódu by tu byť. 848 00:50:16,760 --> 00:50:22,130 Ale Ken Thompson to vzal jeden krok ďalej a povedal, dobre, tam sú 849 00:50:22,130 --> 00:50:25,980 Tieto špeciálne programy, ktoré skutočne pomôže vám čítať binárne programov, 850 00:50:25,980 --> 00:50:29,340 a tak ak niekto používa tento program, čítať binárne, by vidieť tieto 851 00:50:29,340 --> 00:50:30,490 riadkov kódu. 852 00:50:30,490 --> 00:50:34,020 Bol upravený tie programy, ktoré hovoria, všetko Dobrá, keď sa pozeráte na 853 00:50:34,020 --> 00:50:38,460 kompilátor, neukazujú to najmä sada binárne. 854 00:50:38,460 --> 00:50:42,830 >> Takže potom je potrebné vziať, že krok ďalej a v podstate, ktoré by mohli mať 855 00:50:42,830 --> 00:50:46,210 prijaté viac úrovní nepriame, a na nejakom mieste, nikto ich vlastne 856 00:50:46,210 --> 00:50:47,990 bude kontrola. 857 00:50:47,990 --> 00:50:52,590 Takže poučenie z príbehu je, že ste nebude písať 858 00:50:52,590 --> 00:50:54,340 Zvonenie v tejto triede. 859 00:50:54,340 --> 00:50:57,020 Budeš používať lezenie Zvonenie veľa v tejto triede. 860 00:50:57,020 --> 00:51:00,490 Pre všetky viete, Clang je škodlivý program, ktorý je sabotovať každý 861 00:51:00,490 --> 00:51:03,520 jediný program, ktorý som kedy zostavil. 862 00:51:03,520 --> 00:51:08,206 A nechať na tom veľmi neblahé na vedomie, že sa uvidíme v stredu. 863 00:51:08,206 --> 00:51:10,030 >> [APPLAUSE] 864 00:51:10,030 --> 00:51:12,935 >> Reproduktora 2: V ďalšom CS50. 865 00:51:12,935 --> 00:51:14,580 >> SPEAKER 3: Neopováž sa hovoriť, že. 866 00:51:14,580 --> 00:51:15,930 Môžete to urobiť. 867 00:51:15,930 --> 00:51:19,440 Vy ste to urobil skôr, môžete to urobiť dnes, môžete to urobiť zajtra. 868 00:51:19,440 --> 00:51:20,930 Vy ste robil to niekoľko rokov. 869 00:51:20,930 --> 00:51:22,790 Stačí ísť tam a urobiť. 870 00:51:22,790 --> 00:51:24,310 Môžete to urobiť. 871 00:51:24,310 --> 00:51:26,102 >> [MUSIC PLAYBACK]