1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [MUSIC PŘEHRÁVÁNÍ] 3 00:00:11,210 --> 00:00:12,100 >> ROB BODEN: Dobře. 4 00:00:12,100 --> 00:00:15,620 Takže, první věc, první, video od známou tvář. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [PŘEHRÁVÁNÍ] 7 00:00:22,560 --> 00:00:23,370 >> -Dobře. 8 00:00:23,370 --> 00:00:27,150 To je CS50, a to je start tří týdnů. 9 00:00:27,150 --> 00:00:29,980 Promiň, že jsem nemohl být s tebou dnes, ale dovolte mi představit 10 00:00:29,980 --> 00:00:32,880 CS50 vlastní Rob Boden. 11 00:00:32,880 --> 00:00:33,872 >> [END VIDEO PŘEHRÁVÁNÍ] 12 00:00:33,872 --> 00:00:39,340 >> [Potleskem 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 ještě jeden oběd. 17 00:00:50,960 --> 00:00:52,330 Je to zítra v 01:15. 18 00:00:52,330 --> 00:00:54,480 Neexistuje žádný obědě v pátek. 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 ještě není, ale jeden z lidé, 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 Ty by měly přijít. 24 00:01:04,819 --> 00:01:05,900 >> Dobrá. 25 00:01:05,900 --> 00:01:11,360 Takže minulý týden, jsme začali rozpadá o tom, co řetězec skutečně je. 26 00:01:11,360 --> 00:01:14,830 Známe od počátku, že je to posloupnost znaků. 27 00:01:14,830 --> 00:01:18,130 Ale minulý týden, jsme se ponořili do skutečnosti, že to, co je ve skutečnosti sekvence 28 00:01:18,130 --> 00:01:22,110 postavy, dobře, máme nyní pole znaků. 29 00:01:22,110 --> 00:01:26,450 A my víme, že řetězec, je to pole znaků, na samém konci, 30 00:01:26,450 --> 00:01:30,920 máme tento speciální nulový bajt, to zpětné lomítko 0, která označuje konec 31 00:01:30,920 --> 00:01:32,230 řetězec. 32 00:01:32,230 --> 00:01:36,970 >> A tak řetězec je pole znaky, ale může mít více než 33 00:01:36,970 --> 00:01:39,530 jen pole znaků, můžeme mít řadu kteréhokoli 34 00:01:39,530 --> 00:01:40,890 typ, co chceme. 35 00:01:40,890 --> 00:01:51,570 Takže, pokud si vzpomínáte z minulého týdne, Věk program, který představil David 36 00:01:51,570 --> 00:01:53,560 velmi rychle. 37 00:01:53,560 --> 00:01:57,010 Takže první věc, kterou budeme dělat, je požádat uživatele o celé číslo, 38 00:01:57,010 --> 00:01:58,800 počet lidí v místnosti. 39 00:01:58,800 --> 00:02:01,260 Jakmile budeme mít, že celé číslo, budeme deklarovat pole. 40 00:02:01,260 --> 00:02:02,890 Všimněte si tuto syntaxi konzoly. 41 00:02:02,890 --> 00:02:04,540 Budeš si zvyknout na to. 42 00:02:04,540 --> 00:02:09,430 >> Takže budeme deklarovat pole celých čísel volal věku, a tam jsou 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 tady, je to 4 int i se rovná 0, i je menší než n, i a 45 00:02:16,480 --> 00:02:20,580 a, že je také bude vzor že vám velmi zvyklí. 46 00:02:20,580 --> 00:02:24,000 Vzhledem k tomu, že je docela hodně, jak jste vždy bude iterovat přes pole. 47 00:02:24,000 --> 00:02:26,330 Tak si uvědomit, že n je délka našeho pole. 48 00:02:26,330 --> 00:02:32,120 A tak tady jsme opakovaně žádají na věku osoby i v místnosti. 49 00:02:32,120 --> 00:02:36,640 >> Poté, jdeme dolů, a bez ohledu na libovolná důvod, proč jsme se pak 50 00:02:36,640 --> 00:02:40,220 vytisknout kolik jdou být ode dneška za rok. 51 00:02:40,220 --> 00:02:49,980 A spuštění tohoto programu, pojďme aby věku, tečka lomítko věku. 52 00:02:49,980 --> 00:02:53,010 Takže počet lidí v místnosti, řekněme, že jsou tam tři. 53 00:02:53,010 --> 00:02:59,880 A říkají, že první osoba 13, Další je 26 a poslední 30. 54 00:02:59,880 --> 00:03:05,080 Takže to bude iterovat přes ty tři lidí, vytisknout 14, 27, a 31. 55 00:03:05,080 --> 00:03:16,060 >> Takže si pamatujte, že když jsme se vyhlásit pole velikosti n, indexy v tom, že 56 00:03:16,060 --> 00:03:19,950 pole, pole obsahuje hodnoty a indexy 0, 1, 2, celou cestu 57 00:03:19,950 --> 00:03:21,680 až n minus 1. 58 00:03:21,680 --> 00:03:26,255 Takže, když jsme řekli, že byli tři lidé v místnosti, a dáme sem 59 00:03:26,255 --> 00:03:29,850 První iterace přes tento smyčky, i bude 0. 60 00:03:29,850 --> 00:03:31,650 Takže v indexu 0.. 61 00:03:31,650 --> 00:03:34,540 Jsme přiřazení první věkem uživatel zadá. 62 00:03:34,540 --> 00:03:38,870 Pak v další, jsme zadání Druhá n uživatel zadá, a 63 00:03:38,870 --> 00:03:40,580 vedle dvou, poslední n. 64 00:03:40,580 --> 00:03:44,200 >> Takže si všimnout, že řada velikosti tři nemá nic 65 00:03:44,200 --> 00:03:46,040 v indexu tři. 66 00:03:46,040 --> 00:03:49,036 Toto není platný. 67 00:03:49,036 --> 00:03:50,250 Dobrá. 68 00:03:50,250 --> 00:03:55,136 Takže, jde sem. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Takže teď, že jsme se zabýval polí, máme nějaké znalosti. 71 00:04:01,590 --> 00:04:03,780 Nyní se budeme pohybovat na povel linka argumenty, které se bude 72 00:04:03,780 --> 00:04:05,890 docela relevantní k tomuto problému sadě. 73 00:04:05,890 --> 00:04:09,670 >> Takže až do teď, když jste deklaroval svou hlavní funkci, máme 74 00:04:09,670 --> 00:04:11,230 řekl int main void. 75 00:04:11,230 --> 00:04:14,070 Takže void prostě znamená, že nejsme absolvování některého 76 00:04:14,070 --> 00:04:16,440 argumenty k této funkci. 77 00:04:16,440 --> 00:04:19,190 Nyní budeme vidět, že hlavním může trvat několik argumentů. 78 00:04:19,190 --> 00:04:22,470 Zde jim říkáme int argc a řetězec argv závorky. 79 00:04:22,470 --> 00:04:26,930 Držáky, opět s uvedením že máme co do činění s poli. 80 00:04:26,930 --> 00:04:31,850 Tak tady, string argv držáky, jsme jednání s pole řetězců. 81 00:04:31,850 --> 00:04:35,360 Takže argc, že ​​to bude ukazovat kolik argumenty máme 82 00:04:35,360 --> 00:04:37,580 předán do tohoto programu. 83 00:04:37,580 --> 00:04:46,050 A vidět, co to znamená, pojďme zavřete toto. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Takže až do teď, jsme běžet každý program, jako je tečka lomítko věkových kategorií. 86 00:04:50,790 --> 00:04:55,250 Můžeme také na příkazovém řádku, kolem předat argumenty, tedy termín, příkaz 87 00:04:55,250 --> 00:04:56,550 linka argumenty. 88 00:04:56,550 --> 00:04:59,760 Takže první argument, hello world. 89 00:04:59,760 --> 00:05:03,350 Tak tady, argc bude tři. 90 00:05:03,350 --> 00:05:07,720 Je to počet argumentů na příkazovém řádku. 91 00:05:07,720 --> 00:05:12,840 Argc je vždy alespoň 1, protože dot lomítko věku, sám, se počítá jako jeden z 92 00:05:12,840 --> 00:05:14,490 argumenty příkazového řádku. 93 00:05:14,490 --> 00:05:17,010 >> Pak ahoj je první. 94 00:05:17,010 --> 00:05:20,460 Pokud dot slash věku je zeroth, pak ahoj je první, a svět je 95 00:05:20,460 --> 00:05:22,830 Druhý argument řádek příkaz. 96 00:05:22,830 --> 00:05:29,490 Takže řetězec argv, budeme vidět, obsahuje řetězců, tečka lomítko 97 00:05:29,490 --> 00:05:33,830 věku, ahoj a svět. 98 00:05:33,830 --> 00:05:38,945 A tím, že žádost Davida, jedeme video přehrát zavádějící, že. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [PŘEHRÁVÁNÍ] 101 00:05:43,890 --> 00:05:46,240 >> -Až nyní v programech jsme napsal, že jsme prohlásit 102 00:05:46,240 --> 00:05:48,500 Hlavní jako int main void. 103 00:05:48,500 --> 00:05:51,170 A celou tu dobu, že void má prostě bylo určující, že 104 00:05:51,170 --> 00:05:54,430 Program neponese argumenty příkazového řádku. 105 00:05:54,430 --> 00:05:57,750 Jinými slovy, když uživatel spustí Program, on nebo ona může poskytnout příkazu 106 00:05:57,750 --> 00:06:01,710 argumenty jsou podle psát další slova nebo slovní spojení po programu je 107 00:06:01,710 --> 00:06:03,000 jméno na příkazovém řádku. 108 00:06:03,000 --> 00:06:06,550 >> No, pokud chceš svůj program na přijmout argumenty příkazového řádku, jeden nebo 109 00:06:06,550 --> 00:06:10,540 více takových slov, musíme nahradit ztrátu s několika argumenty. 110 00:06:10,540 --> 00:06:12,200 Tak pojďme na to. 111 00:06:12,200 --> 00:06:15,750 Zahrnout CS50.h. 112 00:06:15,750 --> 00:06:19,360 Zahrnout standardní io.h. 113 00:06:19,360 --> 00:06:20,760 Int main. 114 00:06:20,760 --> 00:06:26,330 A teď, místo toho, void, budu zadat int argc názvem, a 115 00:06:26,330 --> 00:06:28,780 Pole řetězců zvaných argv. 116 00:06:28,780 --> 00:06:31,820 Nyní, argc a argv jsou jednoduše konvence. 117 00:06:31,820 --> 00:06:34,000 >> Mohli jsme nazývají tyto argumenty většina cokoliv chceme. 118 00:06:34,000 --> 00:06:37,630 Ale co je důležité je, že argc je int, protože podle definice je 119 00:06:37,630 --> 00:06:41,360 bude obsahovat počet argumentů, počet slov, že celkem 120 00:06:41,360 --> 00:06:43,380 uživatel zadal na jeho nebo její výzvu. 121 00:06:43,380 --> 00:06:47,910 argv, mezitím, argument, vektor, je bude ve skutečnosti být pole skladování 122 00:06:47,910 --> 00:06:52,020 všechna slova, které má uživatel napsaný na jeho nebo její výzvu. 123 00:06:52,020 --> 00:06:54,500 >> Pojďme pokračovat udělat něco teď s jedním nebo více z těchto 124 00:06:54,500 --> 00:06:55,660 argumenty příkazového řádku. 125 00:06:55,660 --> 00:07:00,070 Zejména, pojďme do toho a tisk bez ohledu na slovo uživatel zadá 126 00:07:00,070 --> 00:07:03,960 po názvu programu na příkazovém řádku. 127 00:07:03,960 --> 00:07:04,730 Otevřete držák. 128 00:07:04,730 --> 00:07:06,240 Zavřete držák. 129 00:07:06,240 --> 00:07:10,510 Printf procent je zpětné lomítko a čárka. 130 00:07:10,510 --> 00:07:14,550 A teď musím říct, printf, jakou hodnotu zapojit do tohoto zástupného symbolu. 131 00:07:14,550 --> 00:07:18,600 Chci první slovo, které má uživatel napsal po názvu programu, 132 00:07:18,600 --> 00:07:23,130 a tak budu specifikovat argv držák 1, v blízkosti 133 00:07:23,130 --> 00:07:24,830 závorka, středník. 134 00:07:24,830 --> 00:07:27,290 >> A teď, proč držák 1 a ne držák 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 Skutečný název programu. 137 00:07:32,620 --> 00:07:36,180 Takže první slovo, které uživatel zadá Po název programu je tím, že 138 00:07:36,180 --> 00:07:38,990 konvence, bude uložené v argv 1. 139 00:07:38,990 --> 00:07:42,380 Pojďme se nyní sestavit a spustit tento program. 140 00:07:42,380 --> 00:07:47,780 >> Ujistěte se argv 0, tečka lomítko argv 0. 141 00:07:47,780 --> 00:07:50,520 A nyní slovo jako ahoj. 142 00:07:50,520 --> 00:07:51,670 Enter. 143 00:07:51,670 --> 00:07:53,520 A tady to máme, ahoj. 144 00:07:53,520 --> 00:07:55,750 >> [END VIDEO PŘEHRÁVÁNÍ] 145 00:07:55,750 --> 00:07:57,000 >> ROB BODEN: Dobře. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Zavřete to. 148 00:08:01,230 --> 00:08:16,730 Takže se podrobněji podíváme na tomto programu, který jsme právě představil k nám, dobře, jen 149 00:08:16,730 --> 00:08:24,710 ukázat, pokud tiskneme argv 0, dělat, teď co je to, argv 0, tečka lomítko argv 0. 150 00:08:24,710 --> 00:08:30,440 Tak, jak se očekávalo, je to vytisknout jméno programu, protože argv 0 je 151 00:08:30,440 --> 00:08:32,970 vždy bude název programu. 152 00:08:32,970 --> 00:08:35,640 Ale pojďme dělat něco bit zajímavější. 153 00:08:35,640 --> 00:08:42,080 >> Takže problému nastavení, budete představil na tuto funkci, atoi. 154 00:08:42,080 --> 00:08:44,440 Tak co budeme používat atoi pro? 155 00:08:44,440 --> 00:08:48,550 To bude konvertovat řetězec na celé číslo. 156 00:08:48,550 --> 00:08:53,280 Takže když jsem předat řetězec, jeden, dva, tři, k atoi, že budete převádět, které 157 00:08:53,280 --> 00:08:56,910 na celé číslo, jeden, dva, tři. 158 00:08:56,910 --> 00:09:01,480 Takže budeme konvertovat první argument řádek příkaz na celé číslo, 159 00:09:01,480 --> 00:09:05,690 a pak už jen vytisknout, že celé číslo. 160 00:09:05,690 --> 00:09:09,680 >> Takže v podstatě, že jsme trochu reimplementing vezmi_int, jen 161 00:09:09,680 --> 00:09:12,350 číslo je zadáno v příkazu linka místo v programu 162 00:09:12,350 --> 00:09:14,560 interaktivně. 163 00:09:14,560 --> 00:09:23,170 Tak, aby argv 0, pojďme dělat je to tady, a zavřít to. 164 00:09:23,170 --> 00:09:27,670 Takže běh argv 0, a pojďme vstoupit číslo, jeden, dva, tři čtyři jedna dvě. 165 00:09:27,670 --> 00:09:30,840 Takže to bude tisknout celé číslo, jeden dva tři čtyři jedna dvě. 166 00:09:30,840 --> 00:09:35,500 Tam jsou některé nuance, aby atoi, že bude to přestat se starat o nic 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 co si myslíte, že se stane jestli jsem to udělat? 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 proč je to? 172 00:09:50,410 --> 00:09:56,060 Podíváte-li se zpět na našeho programu jsme převod argv 1, první 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 není tam žádný argument předaný po názvu programu. 175 00:10:03,350 --> 00:10:08,060 Takže tady vidíme, že se jedná o kočárek programu, protože, když se budeme snažit, aby jej spustit 176 00:10:08,060 --> 00:10:10,530 bez argumentů, to bude jen pád. 177 00:10:10,530 --> 00:10:16,950 >> Takže další společný vzor uvidíte je něco jako, pokud argc je méně 178 00:10:16,950 --> 00:10:21,100 než dva, což naznačuje, že nebyl alespoň název programu a 179 00:10:21,100 --> 00:10:29,100 První argument, pak budeme dělat něco jako printf, nestačí 180 00:10:29,100 --> 00:10:31,190 argumenty příkazového řádku. 181 00:10:31,190 --> 00:10:33,170 To asi není dobrý pro tisk, je to asi něco, jako 182 00:10:33,170 --> 00:10:35,440 byste měli zadat číslo na příkazovém řádku. 183 00:10:35,440 --> 00:10:37,450 Budu prostě skončit tam. 184 00:10:37,450 --> 00:10:39,600 A pak se vraťte 1. 185 00:10:39,600 --> 00:10:44,740 Takže si pamatujte, že na konci našeho programu, pokud se vrátí 0, že druh 186 00:10:44,740 --> 00:10:47,060 indikuje úspěch. 187 00:10:47,060 --> 00:10:50,940 A hlavní také automaticky vrací 0, pokud nechcete. 188 00:10:50,940 --> 00:10:55,800 >> Tak tady jsme přeladění 1 uvést že to není úspěch. 189 00:10:55,800 --> 00:11:01,000 A můžete se vrátit co chcete, jen, 0 znamená úspěch, a 190 00:11:01,000 --> 00:11:03,390 něco signalizuje poruchu. 191 00:11:03,390 --> 00:11:04,855 Takže pojďme spustit tuto verzi věcí. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Takže teď, pokud se nám nepodaří zadat příkazový řádek Argument, že to správně říct, 194 00:11:16,600 --> 00:11:18,290 nám, nestačí příkazového řádku. 195 00:11:18,290 --> 00:11:20,610 Nedokončil větu. 196 00:11:20,610 --> 00:11:24,950 Jinak, pokud jsme skutečně projít to jedno, může dokončit program. 197 00:11:24,950 --> 00:11:27,920 Tak to je, jak byste používat argc v pro ověření počtu 198 00:11:27,920 --> 00:11:30,630 argumenty příkazového řádku, které skutečně prošel. 199 00:11:30,630 --> 00:11:39,360 >> Takže pojďme udělat tento program trochu více složité, a podívejte se na druhý 200 00:11:39,360 --> 00:11:42,180 iterace věcí. 201 00:11:42,180 --> 00:11:46,310 Takže teď nejsme jen tisk První argument řádek příkaz. 202 00:11:46,310 --> 00:11:51,210 Zde jsme iterace z int i rovnými 0, i je menší než argc, i a 203 00:11:51,210 --> 00:11:55,280 plus, a tisk argv, index i. 204 00:11:55,280 --> 00:11:59,300 Takže tento model, opět se jedná o stejný vzor jako dříve, s výjimkou toho, 205 00:11:59,300 --> 00:12:02,600 volání proměnné n, budeme používat argc. 206 00:12:02,600 --> 00:12:09,520 >> Tak to je iterace každý index v poli, a každý tisk 207 00:12:09,520 --> 00:12:11,910 má v tomto poli. 208 00:12:11,910 --> 00:12:20,300 A tak, když jsme se spustit tento program, tak, Nechtěl jsem zadat libovolný příkaz 209 00:12:20,300 --> 00:12:22,540 argumenty, tak to jen tiskne název programu. 210 00:12:22,540 --> 00:12:26,053 Pokud zadám spoustu věcí, to bude vytisknout jeden, každý na samostatném řádku. 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 pojďme o krok dále. 214 00:12:34,770 --> 00:12:38,890 A namísto tisku každý argument na samostatném řádku, pojďme tisknout každý 215 00:12:38,890 --> 00:12:42,590 charakter každého argumentu na vlastním řádku. 216 00:12:42,590 --> 00:12:46,700 Takže si pamatujte, že argv je pole řetězců. 217 00:12:46,700 --> 00:12:50,960 Takže to, co je řetězec, ale řada znaků? 218 00:12:50,960 --> 00:12:57,140 Takže to znamená, že argv je opravdu pole z pole znaků. 219 00:12:57,140 --> 00:13:04,920 A tak, že s využitím, pojďme ignorovat to nyní. 220 00:13:04,920 --> 00:13:08,190 Řekněme zvážit řetězec argv 0. 221 00:13:08,190 --> 00:13:14,170 >> Takže pokud chceme, aby každý znak argv 0 na samostatném řádku, pak chci, 222 00:13:14,170 --> 00:13:19,500 udělat vzor jsme zvyklí, i je menší, než je délka pole, 223 00:13:19,500 --> 00:13:23,990 který zde, je strlen z, to je není to, co chci dělat, řetězec 224 00:13:23,990 --> 00:13:26,450 s se rovná argv 0. 225 00:13:26,450 --> 00:13:30,390 Tak jsem je menší než délka naší pole, které je v tomto případě je pole 226 00:13:30,390 --> 00:13:34,410 znaků, i plus plus. 227 00:13:34,410 --> 00:13:41,040 A tak, jak jsme viděli minulý týden, je to ideální pokud se pohybujeme, že strlen mimo 228 00:13:41,040 --> 00:13:45,210 stavu, se od n přidávat strlen S pokaždé, když jdeme 229 00:13:45,210 --> 00:13:47,720 smyčkou, a to nebude měnit. 230 00:13:47,720 --> 00:13:50,230 Takže budeme nastavit 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 teď, jsme iterace každý index v poli. 234 00:14:01,320 --> 00:14:05,630 A tak, chceme-li tisknout každý charakter v tomto poli, procenta c je 235 00:14:05,630 --> 00:14:06,880 vlajky chceme použít pro znaky. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 A teď držák i bude řetězec, index znak i, takže pokud 238 00:14:19,770 --> 00:14:20,970 string byly ahoj. 239 00:14:20,970 --> 00:14:27,530 pak s 0 bude h, S příchytkou 1 bude e, a tak dále. 240 00:14:27,530 --> 00:14:30,800 >> Takže teď chceme spojit Tyto dvě věci. 241 00:14:30,800 --> 00:14:35,440 Chceme tisknout každý znak každý argument příkazového řádku. 242 00:14:35,440 --> 00:14:38,950 Takže budeme mít vnořené smyčky for. 243 00:14:38,950 --> 00:14:47,480 A obvykle, první čítač je i, další se bude j, n 244 00:14:47,480 --> 00:14:54,450 bude strlen z argv i, i je menší než n, i plus plus. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 A teď, místo tisku argv i tak, argv držák i bude index - 247 00:15:06,870 --> 00:15:14,280 že to bude i-tý příkazového řádku Argument, argv i, j bude 248 00:15:14,280 --> 00:15:16,925 je j-tý znak argument, i-tý. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Zbavím se toho tady teď od dáme to do té smyčky. 251 00:15:24,810 --> 00:15:33,900 Takže je ekvivalentní řetězec s rovnými argv i, a pak je držák j. 252 00:15:33,900 --> 00:15:36,980 >> No, my nepotřebujeme deklarovat tato proměnná y. 253 00:15:36,980 --> 00:15:44,530 Místo toho jsme jen spojit tyto dva do toho, co jsme měli, argv I, J. 254 00:15:44,530 --> 00:15:45,780 >> SPEAKER 1: [neslyšitelné]. 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 Pokud jsem vlastně běžel, by se si to uvědomit. 259 00:15:55,510 --> 00:16:01,210 Takže počítadlo mi záleží v tomto zejména pro 260 00:16:01,210 --> 00:16:05,410 smyčka je j, iterátor. 261 00:16:05,410 --> 00:16:08,560 Takže byste narazit na otázky, pravděpodobně nekonečná smyčka, pokud se 262 00:16:08,560 --> 00:16:09,540 nestanovila, že. 263 00:16:09,540 --> 00:16:12,220 To je důvod, proč jsme také mluvili o ladění dnes. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Takže pojďme spustit tento program. 266 00:16:15,240 --> 00:16:21,200 A pojďme vlastně přidat samostatný printf tady, že bude jen vytisknout 267 00:16:21,200 --> 00:16:27,480 další řádek, protože to znamená, že když jsme spuštění programu, bude tam prázdná 268 00:16:27,480 --> 00:16:31,830 čára mezi každým charakteru každý řádek argumentu příkazu. 269 00:16:31,830 --> 00:16:33,448 No, uvidíme, co 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 nějakou chybu. 273 00:16:39,870 --> 00:16:42,860 Chyba implicitně prohlásil Knihovna funkcí strlen. 274 00:16:42,860 --> 00:16:51,630 >> Takže se vrací do našeho programu, jsem zapomněli hash patří 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ý soubor, který prohlašuje, 277 00:16:57,730 --> 00:16:58,980 Funkce strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, to zkompiluje. 280 00:17:06,060 --> 00:17:09,109 Nyní, pojďme jej spustit. 281 00:17:09,109 --> 00:17:10,930 Tak právě to. 282 00:17:10,930 --> 00:17:17,790 Bude to vytisknout naše název programu, hello world. 283 00:17:17,790 --> 00:17:23,510 Bude to vytisknout každou věc, každý znak, na samostatném řádku. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Takže pojďme vlastně vzít o krok dále. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 A namísto použití string.h, pojďme přemýšlet o tom, jak bychom realizovat naše vlastní 288 00:17:39,700 --> 00:17:41,420 strlen funkce. 289 00:17:41,420 --> 00:17:45,600 Tak jsem si hned dát funkce podpis. 290 00:17:45,600 --> 00:17:52,900 Takže pojďme zavolat my_strlen, a to bude trvat řetězec jako argument, 291 00:17:52,900 --> 00:17:57,220 a očekáváme, že se vrátí délka tohoto řetězce. 292 00:17:57,220 --> 00:18:03,430 Tak, kde je ten chlap? 293 00:18:03,430 --> 00:18:04,990 Ano. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Takže nezapomeňte od dřívějšího snímku, který byl také z minulého týdne, že 296 00:18:12,900 --> 00:18:18,890 řada postav, dobře, řetězec, takže řekněme, že je to náš řetězec s. 297 00:18:18,890 --> 00:18:29,870 Takže pokud s je řetězec, ahoj, a pak, H-E-L-L-O, paměti, že se to 298 00:18:29,870 --> 00:18:35,610 být, a pak to zpětné lomítko 0 znak. 299 00:18:35,610 --> 00:18:39,170 >> Tak jak se dostaneme délku s? 300 00:18:39,170 --> 00:18:43,190 No, trik hledá tento vůle, 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 být něco jako málo 303 00:18:50,270 --> 00:18:51,510 dost postav, které - 304 00:18:51,510 --> 00:18:56,180 Pojďme si to ručně představují jedny čítač, říkejme tuto délku int. 305 00:18:56,180 --> 00:19:00,060 Takže, od tady, my jsme bude iteraci našeho řetězce. 306 00:19:00,060 --> 00:19:04,100 >> Takže první znak, to je H, a není to zpětné lomítko 0, takže 307 00:19:04,100 --> 00:19:05,170 délka je 1. 308 00:19:05,170 --> 00:19:08,050 Iterovat na další znak, E, a to ani zpětné lomítko 0. 309 00:19:08,050 --> 00:19:09,630 Délka 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čně se dostáváme zpětné lomítko 0, a tak to znamená, dobře, 314 00:19:16,690 --> 00:19:17,780 Tento řetězec je u konce. 315 00:19:17,780 --> 00:19:20,130 Takže pojďme se vrátit pět. 316 00:19:20,130 --> 00:19:33,630 >> Takže vlastně provádí jednak tím, že můj délky n se rovná 0, moje 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: [neslyšitelné] 319 00:19:38,000 --> 00:19:38,640 >> ROB BODEN: Oh, střílet. 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élka n rovno 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Takže teď, když s délka není rovné a poté, zpětné lomítko 0. 325 00:19:58,310 --> 00:20:04,660 Takže pamatujte, že toto zpětné lomítko 0, je Skutečný znak, a znamená to, že 326 00:20:04,660 --> 00:20:05,820 konec řetězce. 327 00:20:05,820 --> 00:20:09,850 Stejně jako, také zpětné lomítko n je aktuální znak. 328 00:20:09,850 --> 00:20:14,040 Zpětné lomítko 0 se chystá uvést konec našeho řetězce. 329 00:20:14,040 --> 00:20:15,414 Nechci, aby to dát tam. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 A zatímco s indexované podle délky není rovná null zakončení, poté 332 00:20:25,620 --> 00:20:27,130 jsme jen tak zvýšit délku. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Takže na konci našeho programu, Délka se nakonec bude 335 00:20:34,880 --> 00:20:37,610 být 5 v tomto případě. 336 00:20:37,610 --> 00:20:39,210 A budeme jen vracet délku. 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 teď tady, vůbec se mi nelíbí to my_strlen. 340 00:20:48,290 --> 00:20:50,700 Pojďme zkompilovat, aby se ujistil, všechno běží hladce. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Jsem dělal ve 2? 343 00:20:58,210 --> 00:21:00,565 Nebo to byl 1? 344 00:21:00,565 --> 00:21:01,940 To by mělo stačit. 345 00:21:01,940 --> 00:21:02,690 Dobrá. 346 00:21:02,690 --> 00:21:08,490 Tak tohle je argv 2. 347 00:21:08,490 --> 00:21:11,585 Funguje jak se očekávalo, i když bylo to, že ten, co jsem to udělal v? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Ano. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Tato verze, co neměl printf nový řádek poté, ale to 352 00:21:21,820 --> 00:21:22,910 není žádný rozdíl. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Takže pracoval, jak se očekávalo. 355 00:21:25,780 --> 00:21:34,750 >> Nyní můžeme i kombinovat jeden krok dále, kde Oznámení tady, dobře, 356 00:21:34,750 --> 00:21:38,920 Nejprve jsme popadl strlen z argv i, a pak jsme iterace 357 00:21:38,920 --> 00:21:41,450 každá postava v tomto řetězci. 358 00:21:41,450 --> 00:21:47,480 Takže místo toho, aby dělal to, co kdybychom Jen kombinovat logiku čekání 359 00:21:47,480 --> 00:21:50,740 až jsme narazili zpětné lomítko 0 práva do této smyčky for? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Takže iterovat zatímco argv i, j dělá není rovno zpětné lomítko 0. 362 00:22:07,490 --> 00:22:10,680 Takže první je spustit. 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 tady je tato podmínka říká - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 Pojďme jasné, že. 368 00:22:40,060 --> 00:22:49,140 Takže teď, ať je to naše argv. 369 00:22:49,140 --> 00:22:55,290 Takže, když jsem běžel tento program dříve, argv je pole řetězců. 370 00:22:55,290 --> 00:23:03,100 A tak, když jsem jej spustit s tečkou lomítkem argv 2, hello world, pak argv 371 00:23:03,100 --> 00:23:07,650 sám o sobě je délka 3, pro argv nula, ahoj a svět. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> A v každé z těchto indexů je, Samotný pole, kde to bude 374 00:23:19,660 --> 00:23:23,780 tečka, bude to lomítko, já nevím, v případě, že je správný směr, jsem 375 00:23:23,780 --> 00:23:25,680 Nemyslím, že to bylo. 376 00:23:25,680 --> 00:23:30,110 -R-V pomlčka, potřebují více prostoru. 377 00:23:30,110 --> 00:23:32,570 Pojďme nakrájíme na tomto poli. 378 00:23:32,570 --> 00:23:38,230 -R-V pomlčka 0, a pak zpětné lomítko 0. 379 00:23:38,230 --> 00:23:43,160 A pak v nepořádku bude ahoj. 380 00:23:43,160 --> 00:23:45,910 Řekněme, že H-E zpětné lomítko 0. 381 00:23:45,910 --> 00:23:51,130 A konečně, W-O lomítko 0. 382 00:23:51,130 --> 00:23:59,730 >> Takže algoritmus, který jsme právě napsali, vnořené cykly for, co jsou zač 383 00:23:59,730 --> 00:24:07,321 dělá, je, musíme nejprve čelit i a pak j. 384 00:24:07,321 --> 00:24:15,206 To by bylo jednodušší, s kódem na obrazovka, Vraťme se k tomu. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Tak zjistíte, že i je iterátor, který je iterace každý příkaz 387 00:24:24,600 --> 00:24:25,610 argument řádek. 388 00:24:25,610 --> 00:24:28,870 A j je iterátor Iterace na každý znak v tom, že 389 00:24:28,870 --> 00:24:30,410 argument řádek příkaz. 390 00:24:30,410 --> 00:24:46,755 Takže co to nejvnitřnější printf dělá je, jsme 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 teď, argv 0 7 se chystá 392 00:24:58,680 --> 00:25:00,670 rovná zpětné lomítko 0. 393 00:25:00,670 --> 00:25:05,730 >> Tak jsme se ukončit, že pro smyčce, a teď jsem se opakuje na 1. 394 00:25:05,730 --> 00:25:10,910 A teď jdeme k tisku argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 No, teď, když jsem řez ahoj krátká, argv 1 2 opět bude 396 00:25:17,040 --> 00:25:18,170 zpětné lomítko 0. 397 00:25:18,170 --> 00:25:25,050 A tak, i zvýšit, a pokračovat, a tak dále, dokud se vytisknout všechny 398 00:25:25,050 --> 00:25:28,580 svět, a to jsou tři příkazového řádku argumenty, a budeme ukončit z 399 00:25:28,580 --> 00:25:31,670 vnější smyčka, a dokončit 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 pojďme se sem vrátit. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Takže budete získat nějaké znalosti s argumenty příkazového řádku pro tento 406 00:25:52,370 --> 00:25:54,460 zvláštní problém nastavit. 407 00:25:54,460 --> 00:25:56,630 >> Nyní, ladění. 408 00:25:56,630 --> 00:26:01,680 Takže jste asi už musel udělat některé ladící s vaší předchozí 409 00:26:01,680 --> 00:26:03,120 problém nastavit. 410 00:26:03,120 --> 00:26:08,420 A ještě jedna velmi snadný způsob, jak ladění, Nejprve se pojďme podívat na buggy programu. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 No, procházky tohoto programu, budeme žádat uživatele o 413 00:26:23,830 --> 00:26:29,350 integer, chytit, že celé číslo, a pak, libovolně, máme while, který 414 00:26:29,350 --> 00:26:32,280 se právě chystá decrement i, dokud je to rovná 10. 415 00:26:32,280 --> 00:26:35,820 Pojďme se jen předpokládat, že jsem zadání celé číslo větší než 10. 416 00:26:35,820 --> 00:26:38,700 Takže decrement i tak, aby to rovná 10. 417 00:26:38,700 --> 00:26:42,630 >> A pak máme další while že, když jsem se nerovná 0, máme 418 00:26:42,630 --> 00:26:44,540 bude decrement i o 3. 419 00:26:44,540 --> 00:26:49,790 Takže pokud uvidíte záměr chyby tady je to, že tento bude decrement i na 420 00:26:49,790 --> 00:26:57,010 být 10, a pak to, zatímco smyčka úbytek i z 10 na 7, až 4 na 1, 421 00:26:57,010 --> 00:27:02,880 k negativnímu 2, aby negativní 5, a tak dále, na negativní nekonečna, protože i bude 422 00:27:02,880 --> 00:27:05,920 Nikdy vlastně rovná 0. 423 00:27:05,920 --> 00:27:08,610 A pak na konci tohoto programu, máme funkci foo, který je 424 00:27:08,610 --> 00:27:12,130 jde o tisku, že i. 425 00:27:12,130 --> 00:27:16,520 >> Tak to je krátká a triviální program a chyba je zřejmé, 426 00:27:16,520 --> 00:27:18,790 zvláště poté, co jsem řekl to, co chyba je. 427 00:27:18,790 --> 00:27:24,840 Ale záměr tady je dobře, to by mohlo skutečně vypadat jako některé z vašich 428 00:27:24,840 --> 00:27:30,040 řešení od chamtivý od posledního problém nastavit, a možná to mít 429 00:27:30,040 --> 00:27:32,800 některé nekonečná smyčka v programu, a nemáte tušení, 430 00:27:32,800 --> 00:27:34,100 co to způsobuje. 431 00:27:34,100 --> 00:27:38,690 Takže velmi užitečné pro ladění technika je prostě přidat 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 tady chci printf mimo První cyklus while. 434 00:27:49,200 --> 00:27:53,155 A tady chci printf, a já si jen vytisknout i. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Budu ještě udělat jako první, zatímco smyčka, i. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Venku, druhý cyklus while. 439 00:28:09,040 --> 00:28:12,170 Opět, tisknout uvnitř odtud, hodnota i. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 A pojďme spustit to. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Takže tečka lomítko ladění. 444 00:28:24,800 --> 00:28:25,610 Zadejte celé číslo. 445 00:28:25,610 --> 00:28:28,150 Pojďme udělat 13. 446 00:28:28,150 --> 00:28:28,760 A boom. 447 00:28:28,760 --> 00:28:33,300 Vidíme, že jsme nekonečné smyčkování uvnitř druhé, zatímco smyčky. 448 00:28:33,300 --> 00:28:36,305 Takže teď víme, co je chyba. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Ale printf ladění je naprosto skvělý, ale jakmile se vaše programy se 451 00:28:45,610 --> 00:28:50,560 delší a složitější, existují sofistikovanější řešení 452 00:28:50,560 --> 00:28:51,705 jak věci pracují. 453 00:28:51,705 --> 00:28:52,955 Takže pojďme odstranit všechny tyto printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 A pojďme se ujistěte, já ne něco pokazit. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Takže program, budeme představit se nazývá 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, vlastně, pojďme odstranit ladění pro druhé, a aby ladit znovu. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 No, vlastně první, dobrá lekce V argumenty příkazového řádku. 463 00:29:34,440 --> 00:29:37,780 Všimněte si, že tento Clang příkaz, který je sestavování vše je předán 464 00:29:37,780 --> 00:29:41,300 na příkazovém řádku, tyto argumenty příkazového řádku. 465 00:29:41,300 --> 00:29:46,250 Tak, jak přesně se bude používat argumenty příkazového řádku, jak jsme 466 00:29:46,250 --> 00:29:51,500 předtím, a jak budete v pset 2, to je jak Clang je jejich použití. 467 00:29:51,500 --> 00:30:00,070 >> Tak zjistíte, že to první příznak, pomlčka ggdb3, co že to říkám, kovový zvuk, 468 00:30:00,070 --> 00:30:03,790 měli byste zkompilovat tento soubor s záměr, že jsme se nakonec 469 00:30:03,790 --> 00:30:05,380 je třeba ji ladit. 470 00:30:05,380 --> 00:30:13,840 Takže pokud budete mít tu vlajku, pak můžeme GDB ladění. 471 00:30:13,840 --> 00:30:17,380 A to bude otevírat GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> Takže tam je spousta příkazů že je třeba si zvyknout. 473 00:30:22,920 --> 00:30:27,100 První z nich, že budete pravděpodobně ihned potřebujete, je Run. 474 00:30:27,100 --> 00:30:28,200 Takže to, co je spustit dělat? 475 00:30:28,200 --> 00:30:30,910 Bude to začátek našeho programu. 476 00:30:30,910 --> 00:30:36,180 Tak utíkej, začíná program, program ptá se nás na celé číslo, 13. 477 00:30:36,180 --> 00:30:39,170 A pak je to nekonečná smyčkování jako Očekává se, s výjimkou jsem odstranil 478 00:30:39,170 --> 00:30:40,500 printfs, takže nemáme ani vidět. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Vystoupil normálně. 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šechno zabalené cesta kolem, zpět na - ignorovat to. 484 00:30:53,640 --> 00:30:55,170 Předpokládejme, že nevystoupil normálně. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 K dispozici je složité odpověď. 487 00:31:03,370 --> 00:31:07,890 >> Takže teď, že to není moc užitečné. 488 00:31:07,890 --> 00:31:11,480 Tak právě běží náš program uvnitř Tento debugger se nám nepomůže v žádném 489 00:31:11,480 --> 00:31:15,610 způsobem, protože jsme mohli právě udělal tečka lomítko ladění zvenčí GDB. 490 00:31:15,610 --> 00:31:21,250 Takže jeden příkaz, který pravděpodobně budete - 491 00:31:21,250 --> 00:31:22,970 a já budu skončit to. 492 00:31:22,970 --> 00:31:25,850 Ovládání-d nebo ukončit, a to jak práci. 493 00:31:25,850 --> 00:31:29,550 Takže pojďme otevřít ho znovu. 494 00:31:29,550 --> 00:31:31,130 >> Další příkaz, který budete pravděpodobně okamžitě chcete 495 00:31:31,130 --> 00:31:33,600 zvyknout si je přestávka. 496 00:31:33,600 --> 00:31:37,120 Takže budeme rozbít na hlavní teď, a pak budu vysvětlovat, že. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 No, tady vidíme my nastavit zarážku na tomto řádku debug.c. 499 00:31:46,370 --> 00:31:50,160 Takže to, co zlom znamená, že když jsem typ běh, program bude 500 00:31:50,160 --> 00:31:53,560 pokračovat v jízdě, dokud Praštil jsem zarážku. 501 00:31:53,560 --> 00:31:59,390 Takže, když jsem narazila na příkaz Spustit, spustí program, a pak se zlomí, jakmile to 502 00:31:59,390 --> 00:32:01,940 vstupuje do hlavní funkce. 503 00:32:01,940 --> 00:32:06,930 Přestávka hlavní bude něco jste docela běžně dělat. 504 00:32:06,930 --> 00:32:11,340 >> A teď vám představit některých dalších příkazů. 505 00:32:11,340 --> 00:32:14,330 Všimněte si zde, že říká my zlomil na řádku 11, který je 506 00:32:14,330 --> 00:32:16,230 printf, zadejte celé číslo. 507 00:32:16,230 --> 00:32:21,260 Takže příkaz Další bude, jak jdeme na další řádek kódu. 508 00:32:21,260 --> 00:32:24,810 To se děje, abychom mohli kroku v naší programové řádek po řádku. 509 00:32:24,810 --> 00:32:26,260 Takže příště. 510 00:32:26,260 --> 00:32:29,820 >> Nyní linka 12, jedeme získat celé číslo. 511 00:32:29,820 --> 00:32:30,450 Další. 512 00:32:30,450 --> 00:32:34,290 A pokud jste prostě zmáčknout Enter znovu, bude to opakovat poslední věc, kterou udělal. 513 00:32:34,290 --> 00:32:36,480 Takže nemám potřebu psát Další pokaždé. 514 00:32:36,480 --> 00:32:40,100 Takže zadat číslo, 13. 515 00:32:40,100 --> 00:32:46,940 Takže teď, linka 14, a zároveň i větší než 10, a já budu dělat dál. 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 i decrement znovu. 518 00:32:50,210 --> 00:32:53,620 >> Takže teď, další užitečné příkaz Tisk. 519 00:32:53,620 --> 00:32:55,750 Takže tisku se bude tisknout hodnota proměnné. 520 00:32:55,750 --> 00:32:57,825 Pojďme se vydat na hodnotu proměnné i. 521 00:32:57,825 --> 00:32:58,705 Pojďme tisknout i. 522 00:32:58,705 --> 00:33:00,910 Bude to říct, že jsem je 11. 523 00:33:00,910 --> 00:33:03,330 Teď jsme znovu na Další a zároveň i je větší než 10. 524 00:33:03,330 --> 00:33:05,590 Tak jsem to ještě větší než 10, protože je to 11. 525 00:33:05,590 --> 00:33:06,920 i minus minus. 526 00:33:06,920 --> 00:33:08,250 Pojďme si vytisknout i znovu. 527 00:33:08,250 --> 00:33:10,950 Jak se dalo očekávat, je to 10. 528 00:33:10,950 --> 00:33:12,510 >> Takže teď, příště. 529 00:33:12,510 --> 00:33:16,250 Bude to zpátky do stavu, i je vyšší než 10, ale já je teď 10, tak 530 00:33:16,250 --> 00:33:20,040 že to není větší než 10, takže očekáváme, že to vypadnout z cyklu while. 531 00:33:20,040 --> 00:33:22,220 A teď jsme pod tento řádek kódu. 532 00:33:22,220 --> 00:33:28,750 A další příkaz, List, se právě chystá Pro zobrazení předchozí a další 533 00:33:28,750 --> 00:33:31,240 pár řádků kódu, ve případě, že jste ztratili sami. 534 00:33:31,240 --> 00:33:35,420 Takže jsme prostě vystoupil tento while, a teď jsme vstoupili do této 535 00:33:35,420 --> 00:33:37,080 zatímco smyčka, linka 18. 536 00:33:37,080 --> 00:33:39,860 Takže když jsem se nerovná 0. 537 00:33:39,860 --> 00:33:46,570 A další, i rovná i mínus 3, a my budeme Všimněte si, tak to prostě dál. 538 00:33:46,570 --> 00:33:48,270 A můžeme vytisknout i. 539 00:33:48,270 --> 00:33:49,990 >> Každý příkaz druh má klávesové zkratky. 540 00:33:49,990 --> 00:33:51,720 Tak p je zkratka pro tisk. 541 00:33:51,720 --> 00:33:53,400 Takže můžeme p i. 542 00:33:53,400 --> 00:33:57,550 Jen držte n, nebo aby dělal Další. 543 00:33:57,550 --> 00:33:58,340 Vytisknout i znovu. 544 00:33:58,340 --> 00:34:00,380 Vidíte, teď je to negativní 167. 545 00:34:00,380 --> 00:34:06,030 Takže to bude trvat věčně, ale ne opravdu navždy, protože jste právě viděli, je 546 00:34:06,030 --> 00:34:09,330 bude skutečně skončí na nějakém místě. 547 00:34:09,330 --> 00:34:15,699 >> Tak to je začátek GDB. 548 00:34:15,699 --> 00:34:19,504 Ale pojďme udělat ještě jednu věc v GDB. 549 00:34:19,504 --> 00:34:20,754 Uh, ladění. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Takže, v tomto konkrétním případě, nekonečná smyčka se stalo, že uvnitř 552 00:34:28,534 --> 00:34:30,050 hlavní funkcí. 553 00:34:30,050 --> 00:34:35,779 A teď, prostě přijmout, že jsem bude pohybovat nekonečnou smyčku do 554 00:34:35,779 --> 00:34:37,029 funkce foo. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Jen si uvědomit, že na konci tohoto Program, dobře, to bylo původně 557 00:34:43,730 --> 00:34:46,210 volá foo, který byl právě bude tisknout i. 558 00:34:46,210 --> 00:34:51,880 Ale teď jsme volá foo, který je bude decrement jsem, až je to 0, a 559 00:34:51,880 --> 00:34:54,548 vytisknout tuto proměnnou. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Kromě toho, že. 562 00:34:57,970 --> 00:35:00,175 Proveďte ladění. 563 00:35:00,175 --> 00:35:03,310 A teď, gdb ladění. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Takže když jsem spustit pak se nebudu být schopen skutečně krokovat my 566 00:35:10,580 --> 00:35:11,730 programu řádek po řádku. 567 00:35:11,730 --> 00:35:19,820 Takže pojďme rozbít na hlavní, a poté zadejte příkaz Spustit. 568 00:35:19,820 --> 00:35:28,160 Tak jdi přes to, printf, zadejte čí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žet snižující dokud i je větší než 10. 571 00:35:37,490 --> 00:35:42,840 Pak jedeme do propadnout while, a dostat se do vedení - 572 00:35:42,840 --> 00:35:44,364 pojďme otevřít v samostatném okně. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Tak jsme zmenšena, dokud jsem byl už ne větší než 10, a pak jsme 575 00:35:53,300 --> 00:35:55,700 se nazývá funkce, foo. 576 00:35:55,700 --> 00:36:01,340 >> Takže to, co se stalo, jakmile jsem narazila Funkce foo, tak jsem zavolal foo, a 577 00:36:01,340 --> 00:36:04,030 Pak jsem už neměl kontrolu nad GDB. 578 00:36:04,030 --> 00:36:10,230 Takže jakmile jsem narazila Další na tomto řádku, věci pokračuje, dokud se to stalo, 579 00:36:10,230 --> 00:36:12,400 kde program vystoupil, když - 580 00:36:12,400 --> 00:36:14,450 předpokládat, že neexistovala nakonec. 581 00:36:14,450 --> 00:36:16,390 Viděl jsi, že pauza na chvíli ačkoli. 582 00:36:16,390 --> 00:36:22,040 Tak proč jsem ztratil kontrolu nad Program v tomto bodě? 583 00:36:22,040 --> 00:36:27,540 No, když jsem typ vedle, že jde doslovný další řádek kódu, který 584 00:36:27,540 --> 00:36:28,850 bude provádět. 585 00:36:28,850 --> 00:36:35,950 Takže po řádku 21, další řádek kódu že bude vykonávat je linka 22, 586 00:36:35,950 --> 00:36:38,520 což znamená, že opuštění hlavní. 587 00:36:38,520 --> 00:36:43,810 Takže nechci, aby jen tak na další řádek kódu. 588 00:36:43,810 --> 00:36:48,170 Chci jít do funkce, foo, a pak také krokovat 589 00:36:48,170 --> 00:36:49,830 tyto řádky kódu. 590 00:36:49,830 --> 00:36:53,726 >> Takže to, že máme alternativu. 591 00:36:53,726 --> 00:36:56,770 Pojďme přestat to znovu. 592 00:36:56,770 --> 00:36:58,020 Přestávka hlavní. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, další, další, 13, další, další, další, pečlivě, 595 00:37:06,370 --> 00:37:09,820 předtím, než jsme narazili řádek foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Takže teď jsme na řádku 21, kde říkáme foo. 598 00:37:13,700 --> 00:37:17,100 Nechceme psát dál, protože to bude jen volání funkce foo, a 599 00:37:17,100 --> 00:37:18,710 přejít na další řádek kódu. 600 00:37:18,710 --> 00:37:20,840 Co chceme použít, je krok. 601 00:37:20,840 --> 00:37:25,690 Takže tam je rozdíl mezi krokem a další, kde krok kroky do 602 00:37:25,690 --> 00:37:28,190 fungovat, a další jede přes funkci. 603 00:37:28,190 --> 00:37:32,830 Je to jen provádí celistvost funkce a udržuje v chodu. 604 00:37:32,830 --> 00:37:37,210 >> Takže krok se chystá přivést nás do funkce foo. 605 00:37:37,210 --> 00:37:41,160 A vidíme tady, teď, jsme zpátky na Tento while to, teoreticky, 606 00:37:41,160 --> 00:37:44,190 bude pokračovat navždy. 607 00:37:44,190 --> 00:37:50,420 A pokud jste hit krok, když to není ani funkce pro volání, pak je to 608 00:37:50,420 --> 00:37:51,720 identické Další. 609 00:37:51,720 --> 00:37:55,320 Takže je to pouze tehdy, když jste na řádek, který volá funkci, která Step 610 00:37:55,320 --> 00:37:56,970 se bude lišit od Next. 611 00:37:56,970 --> 00:37:57,930 Takže krok nám přinese zde. 612 00:37:57,930 --> 00:38:02,100 Krok, krok, krok, krok, krok, krok, a Budeme se nekonečná smyčka navždy. 613 00:38:02,100 --> 00:38:06,810 >> Takže jste mohli zvyknout, že vaše způsob identifikace nekonečné smyčky, je 614 00:38:06,810 --> 00:38:08,960 jen držet tuto klávesu Enter na vidět, kde narazíte. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Existují lepší způsoby, jak to udělat, ale teď, že je naprosto dostačující. 617 00:38:14,780 --> 00:38:17,967 A stylisticky, aby odpovídal stylu 50, měl jsem to udělal. 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í příkaz představit. 621 00:38:28,400 --> 00:38:30,810 Dobře, pojďme gdb ladění palců 622 00:38:30,810 --> 00:38:35,580 Takže místo toho, lámání na hlavní, když jsem znát funkci foo je také 623 00:38:35,580 --> 00:38:39,230 problém, pak bych mohl mít jen řekl, rozbít na foo, místo toho. 624 00:38:39,230 --> 00:38:42,310 Řekněme, že jsem se rozbít na hlavní i foo. 625 00:38:42,310 --> 00:38:45,390 Takže si můžete nastavit tolik zarážky jak budete chtít. 626 00:38:45,390 --> 00:38:49,230 Když jsem se napsat slovo pes, to se děje zastavit na - 627 00:38:49,230 --> 00:38:52,180 ooh, pojďme překompilovat, protože Změnil jsem věci. 628 00:38:52,180 --> 00:38:55,950 Uvidíte tento řádek, varování, zdroj soubor je novější než spustitelného souboru. 629 00:38:55,950 --> 00:38:59,680 Takže to znamená, že jsem šel sem a změnil to, aby odpovídaly stylu 630 00:38:59,680 --> 00:39:03,100 50, ale já jsem překompilovat programu. 631 00:39:03,100 --> 00:39:04,870 Takže GDB mě vědom. 632 00:39:04,870 --> 00:39:10,130 Odejdu, aby ladit znovu, hit gdb ladění. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Takže teď, zpátky k tomu, co jsem dělal. 635 00:39:12,800 --> 00:39:15,720 Přestávka hlavní, přerušení foo. 636 00:39:15,720 --> 00:39:20,680 Nyní, když jsem spuštění programu, takže je to bude pokračovat, dokud hity 637 00:39:20,680 --> 00:39:21,320 breakpoint. 638 00:39:21,320 --> 00:39:24,680 To breakpoint se stane být první v hlavní. 639 00:39:24,680 --> 00:39:28,630 A teď, místo toho, aby dělal další, další, další, další, další, až jsem narazila foo, jsem 640 00:39:28,630 --> 00:39:35,230 můžete psát i nadále, což bude pokračovat dokud nenarazíte na další zarážku. 641 00:39:35,230 --> 00:39:37,200 Musím nejprve zadat celé číslo. 642 00:39:37,200 --> 00:39:40,570 Pokračovat bude pokračovat, dokud jsem trefil další breakpoint, což je skutečnost, že 643 00:39:40,570 --> 00:39:43,320 funkce foo. 644 00:39:43,320 --> 00:39:50,130 >> Takže Run poběží, dokud nenarazíte breakpoint, ale stačí pouze zadat příkaz Spustit, když 645 00:39:50,130 --> 00:39:54,060 jste spuštění programu, a poté, od té doby, je to i nadále. 646 00:39:54,060 --> 00:40:01,950 Kdybych to udělal rozbít hlavní a pak běžel, bude to zlomit na 647 00:40:01,950 --> 00:40:03,670 hlavní, a pak pokračovat. 648 00:40:03,670 --> 00:40:10,050 Vzhledem k tomu, nemám bod zlomu na foo, Zadejte celé číslo, pak nyní jsem 649 00:40:10,050 --> 00:40:11,380 nebude rozbít na foo. 650 00:40:11,380 --> 00:40:16,318 Je to prostě bude nekonečno smyčky, dokud 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 Ty by měly začít používat ve vašich problémů sad. 655 00:40:27,790 --> 00:40:30,550 To může být velmi užitečné, identifikovat chyby. 656 00:40:30,550 --> 00:40:35,280 Pokud jste vlastně jen, line-by-line, přejděte prostřednictvím kódu, a porovnat, co je 657 00:40:35,280 --> 00:40:39,740 vlastně děje s tím, co můžete očekávat aby se to stalo, pak je to docela 658 00:40:39,740 --> 00:40:41,060 těžko přehlédnout 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ýden David vyrůstal v tomto tajný klíč kryptografie věci pro 663 00:40:54,040 --> 00:40:59,350 poprvé, kdy nechceme Hesla jen být uloženy na našich 664 00:40:59,350 --> 00:41:03,210 Počítač v některých textového souboru, kde někdo může přijít a jen 665 00:41:03,210 --> 00:41:04,660 otevřete ji a přečtěte si je. 666 00:41:04,660 --> 00:41:07,530 V ideálním případě by se šifrována nějakým způsobem. 667 00:41:07,530 --> 00:41:13,340 A Problem Set 2, budete se zabývat s jednoho způsobu šifrování, 668 00:41:13,340 --> 00:41:16,520 nebo, no, dvě metody, ale nejsou tak velké. 669 00:41:16,520 --> 00:41:20,050 Máte-li dělat hacker vydání, jste také bude jednání s 670 00:41:20,050 --> 00:41:22,150 dešifrování nějaké věci. 671 00:41:22,150 --> 00:41:29,770 >> Takže otázka teď je, dobře, a to i v případě, Máme nejsilnější šifrování 672 00:41:29,770 --> 00:41:34,830 algoritmus na světě, pokud se rozhodnete zvláště chudé heslo, pak to 673 00:41:34,830 --> 00:41:37,720 vám nepomůže moc, protože lidé budou moci na to přijít. 674 00:41:37,720 --> 00:41:41,530 I když viděl zašifrovaný řetězec a vypadá to, že nepořádek z odpadků 675 00:41:41,530 --> 00:41:44,760 to znamená, že nic pro ně, v případě, že ještě stačí vyzkoušet několik hesel 676 00:41:44,760 --> 00:41:50,560 na to přijít, pak nejsou příliš bezpečné. 677 00:41:50,560 --> 00:41:55,890 Takže sledujete video, které je tento bod. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [PŘEHRÁVÁNÍ] 680 00:42:00,970 --> 00:42:02,100 >> -Přilba, vám ďábel. 681 00:42:02,100 --> 00:42:03,370 Co se děje? 682 00:42:03,370 --> 00:42:05,170 Co děláte s mou dcerou? 683 00:42:05,170 --> 00:42:09,910 >> -Dovolte mi představit brilantní mladý plastický chirurg, Dr. Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, největší nos práce člověk v celé 685 00:42:13,730 --> 00:42:16,080 vesmír, a Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -Vaše Výsosti. 687 00:42:17,210 --> 00:42:18,070 >> -Nose práce? 688 00:42:18,070 --> 00:42:18,670 Nerozumím. 689 00:42:18,670 --> 00:42:20,090 Ona už měla nos. 690 00:42:20,090 --> 00:42:21,910 Byl to sladký šestnáct přítomen. 691 00:42:21,910 --> 00:42:22,140 >> -No. 692 00:42:22,140 --> 00:42:23,690 Není to to, co si myslíte. 693 00:42:23,690 --> 00:42:25,420 Je to mnohem, mnohem horší. 694 00:42:25,420 --> 00:42:30,300 Pokud nechcete mi dát kombinaci se vzduch štít, Dr. Schlotkin bude 695 00:42:30,300 --> 00:42:34,226 dát svou dceru zpět svůj 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 jsi to vzal? 699 00:42:40,516 --> 00:42:41,440 >> -Dobře. 700 00:42:41,440 --> 00:42:42,180 Řeknu. 701 00:42:42,180 --> 00:42:43,381 Řeknu. 702 00:42:43,381 --> 00:42:44,263 Ne, tati. 703 00:42:44,263 --> 00:42:45,590 Ne, to nesmíš. 704 00:42:45,590 --> 00:42:46,860 >> -Máš pravdu, má drahá. 705 00:42:46,860 --> 00:42:48,450 Budu si ujít nové nos. 706 00:42:48,450 --> 00:42:52,090 Ale já jsem se mu to říct kombinaci, bez ohledu na to, co. 707 00:42:52,090 --> 00:42:53,680 >> -Velmi dobře. 708 00:42:53,680 --> 00:42:55,685 Dr. Schlotkin, dělat to nejhorší. 709 00:42:55,685 --> 00:42:56,914 >> -Rádo se stalo. 710 00:42:56,914 --> 00:43:00,690 >> [NÁSTROJE JSOU nabroušené] 711 00:43:00,690 --> 00:43:01,910 >> -No. 712 00:43:01,910 --> 00:43:02,520 Počkejte. 713 00:43:02,520 --> 00:43:03,836 Počkejte. 714 00:43:03,836 --> 00:43:05,300 Řeknu. 715 00:43:05,300 --> 00:43:06,880 Řeknu. 716 00:43:06,880 --> 00:43:09,130 >> Jsem věděl, že to bude fungovat. 717 00:43:09,130 --> 00:43:09,900 Dobrá. 718 00:43:09,900 --> 00:43:12,850 Dejte mi ho. 719 00:43:12,850 --> 00:43:16,918 >> -Kombinace 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 >> -Tři. 726 00:43:21,310 --> 00:43:21,798 >> -Tři. 727 00:43:21,798 --> 00:43:22,774 >> -Tři. 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 kombinace je, dva, tři, čtyři, pět. 735 00:43:34,770 --> 00:43:37,460 To je ten nejhloupější kombinace Co jsem kdy v životě slyšel. 736 00:43:37,460 --> 00:43:39,710 To je ten druh věcí idiot bude mít na jeho zavazadlech. 737 00:43:39,710 --> 00:43:42,000 >> -Děkuji vám, Vaše Výsosti. 738 00:43:42,000 --> 00:43:43,530 >> -Co jsi to udělal? 739 00:43:43,530 --> 00:43:44,490 >> Jsem vypnul zdi. 740 00:43:44,490 --> 00:43:45,420 >> -Ne, ne. 741 00:43:45,420 --> 00:43:45,840 Jsi vypnul celý film. 742 00:43:45,840 --> 00:43:46,930 >> -Musel jsem stiskl špatné tlačítko. 743 00:43:46,930 --> 00:43:48,265 >> -No, dal ji zpět. 744 00:43:48,265 --> 00:43:49,110 Vložte film zpět. 745 00:43:49,110 --> 00:43:49,510 >> -Ano, pane. 746 00:43:49,510 --> 00:43:49,917 Ano, pane. 747 00:43:49,917 --> 00:43:50,324 >> -Pojďme, Arnolde. 748 00:43:50,324 --> 00:43:51,140 No, Gretchen. 749 00:43:51,140 --> 00:43:53,060 Samozřejmě, že víš, že jsem to ještě muset účtovat za to. 750 00:43:53,060 --> 00:43:53,440 >> [END VIDEO PŘEHRÁVÁNÍ] 751 00:43:53,440 --> 00:43:54,690 >> ROB BODEN: Dobře. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Takže teď, že jsme už mluvili o bezpečnost v některých ohledech, pěkná 754 00:44:08,430 --> 00:44:16,050 malý filmový plakát, takže v posledních letech dnů, tyto problémy s NSA 755 00:44:16,050 --> 00:44:17,300 sledování všechno. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 To může být obtížné cítit, jako jste vy mít nějaký soukromí v 758 00:44:26,930 --> 00:44:34,540 on-line světě, i když jsem nevěděl si většina detailů PRISM. 759 00:44:34,540 --> 00:44:42,130 Takže pohybuje nad PRISM, nejdeme je třeba o tom mluvit, teď 760 00:44:42,130 --> 00:44:44,030 přemýšlet o svém notebooku. 761 00:44:44,030 --> 00:44:48,360 Tak tady, chci přejít k mému skutečnému účtu, 762 00:44:48,360 --> 00:44:50,370 s mým malým tučňákem. 763 00:44:50,370 --> 00:44:57,310 Takže mám nastaveno heslo, a že heslo je, co chci, aby to bylo. 764 00:44:57,310 --> 00:45:02,430 >> Ale pamatujte si, že to, co jsem přihlášení v s, takže to login 765 00:45:02,430 --> 00:45:04,850 výzva, je nějaký program. 766 00:45:04,850 --> 00:45:07,910 Je nějaký program, který byl napsal nějakou osobou. 767 00:45:07,910 --> 00:45:13,250 A tak, že osoba, pokud jsou zvláště nebezpečný, mohli 768 00:45:13,250 --> 00:45:17,780 již bylo řečeno, v pořádku, takže pokud heslo že jsem se vstoupit, je rovna můj 769 00:45:17,780 --> 00:45:22,800 aktuální heslo, nebo je to stejná na některé speciální hesla - 770 00:45:22,800 --> 00:45:25,550 David je úžasný, nebo tak něco - 771 00:45:25,550 --> 00:45:27,190 nechte je dál 772 00:45:27,190 --> 00:45:33,760 Takže škodlivý programátor může mít přístup ke všem vašim Mac, nebo 773 00:45:33,760 --> 00:45:36,150 Windows, nebo tak něco. 774 00:45:36,150 --> 00:45:41,980 >> Takže to není moc obavy, protože, Myslím, že je to login programu 775 00:45:41,980 --> 00:45:48,720 , který je dodáván s OS X, stovky nebo tisíce lidí, kteří mají 776 00:45:48,720 --> 00:45:50,020 přezkoumat tento kód. 777 00:45:50,020 --> 00:45:55,330 A tak, pokud v kódu někde, jste říci, zda tento řetězec rovná rovná 778 00:45:55,330 --> 00:45:58,860 David je úžasný, login, pak někdo bude, stejně jako, počkejte. 779 00:45:58,860 --> 00:45:59,800 To není v pořádku. 780 00:45:59,800 --> 00:46:01,790 To by nemělo být tady. 781 00:46:01,790 --> 00:46:06,650 Takže to je jeden způsob, jak dostat věci být docela bezpečné. 782 00:46:06,650 --> 00:46:10,300 >> Ale myslet i programů že píšete. 783 00:46:10,300 --> 00:46:13,000 Řekněme, že jste napsal program login. 784 00:46:13,000 --> 00:46:20,440 Tak to login program, který jste napsal, tak samozřejmě, že jste dobrý 785 00:46:20,440 --> 00:46:21,210 programátor. 786 00:46:21,210 --> 00:46:25,610 Nebudeš dát jakýkoliv škodlivý jestliže x rovná se rovná David je úžasné 787 00:46:25,610 --> 00:46:27,860 do vašeho kódu. 788 00:46:27,860 --> 00:46:31,930 Ale tento program, co si použít zkompilovat tento program? 789 00:46:31,930 --> 00:46:34,180 Něco jako Clang. 790 00:46:34,180 --> 00:46:38,460 Takže to, co v případě, že osoba, která se stalo napsat zvonění speciál přejímané v Clang 791 00:46:38,460 --> 00:46:44,310 něco podobného, ​​když jsem sestavování přihlásit programu, zadejte tento kód 792 00:46:44,310 --> 00:46:49,720 do přihlašovacího programu, který říká, pokud x se rovná rovná David je úžasné? 793 00:46:49,720 --> 00:46:59,890 Takže není ještě dost, ale máme stejný vydávat tady, kde kovový zvuk, dobře, 794 00:46:59,890 --> 00:47:03,790 tisíce, ne-li desítky tisíc lidé, se podíval na Clang, mají 795 00:47:03,790 --> 00:47:07,160 Podíval se na své řádků kódu a řekl, v pořádku, nic špatného zde. 796 00:47:07,160 --> 00:47:10,680 Je zřejmé, že nikdo se dělá nic to škodlivý. 797 00:47:10,680 --> 00:47:15,780 >> Ale to, co je zvonění sám, jako, co když jsem sestavit zvonění? 798 00:47:15,780 --> 00:47:20,900 Co když mám nějaký kompilátor, který sestavuje zvonění, které vloží do Clang 799 00:47:20,900 --> 00:47:25,610 Tento speciální hack, který říká, všechno v pořádku, když jsem se sestavit zvonění, pak 800 00:47:25,610 --> 00:47:31,290 spustitelný bych se měla speciálně vypadat uvnitř přihlašovací programu a vložkou 801 00:47:31,290 --> 00:47:34,230 toto heslo, rovná se rovná Dave je úžasné? 802 00:47:34,230 --> 00:47:37,990 Takže si pamatujte, že váš kompilátor sám musí být sestaven na nějakém místě. 803 00:47:37,990 --> 00:47:42,810 Takže jestli to, co se rozhodnete sestavit zvonění s, je sám o sobě škodlivý, pak 804 00:47:42,810 --> 00:47:45,580 by mohl být zašroubován celý cesta v řadě. 805 00:47:45,580 --> 00:47:49,630 >> Takže tady máme Ken Thompson a Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Tak tohle je kultovní fotografie. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie je na pravé straně. 808 00:47:55,470 --> 00:47:58,740 Je major - 809 00:47:58,740 --> 00:48:03,640 skoro napsal C. Tak můžete děkuji mu za tuto třídu. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson je na levé straně. 811 00:48:04,840 --> 00:48:07,780 Dva z nich v podstatě napsal UNIX. 812 00:48:07,780 --> 00:48:10,140 No, oni byli hlavními přispěvateli v Unixu. 813 00:48:10,140 --> 00:48:11,310 Tam byly některé další. 814 00:48:11,310 --> 00:48:16,240 Takže Ken Thompson, na nějakém místě, vyhrává Turing Award. 815 00:48:16,240 --> 00:48:20,860 A ocenění Turing, vždycky jsem slyšel je odkazoval se na tuto cestu, je to 816 00:48:20,860 --> 00:48:23,100 Nobelova cena za počítačové vědy. 817 00:48:23,100 --> 00:48:27,500 >> Takže na Turing Award, má na dát jeho děkovací řeči. 818 00:48:27,500 --> 00:48:31,790 A dává tomuto velmi slavný projev Nyní, s názvem Úvahy o důvěřující 819 00:48:31,790 --> 00:48:35,620 Důvěra, kterou jsme spojili Chcete-li na stránkách kurzu. 820 00:48:35,620 --> 00:48:41,670 A v této řeči, on říká, všechno v pořádku, tak jsem napsal UNIX, a teď všichni 821 00:48:41,670 --> 00:48:43,320 si lidé používáte UNIX. 822 00:48:43,320 --> 00:48:46,960 Teď si uvědomte, že dnes je Linux přímý potomek UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X přímo používá UNIX. 824 00:48:50,140 --> 00:48:53,810 Windows není tak moc, ale hodně myšlenek byly převzaty ze systému UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Takže půjde až do fáze, a říká, v pořádku, jsem napsal UNIX. 826 00:48:59,220 --> 00:49:03,940 A stejně tak vy víte, že jsem moci přihlásit do každé 827 00:49:03,940 --> 00:49:05,590 jeden z vašich počítačů. 828 00:49:05,590 --> 00:49:14,280 Protože jsem si jeden z těchto speciálních pokud x rovná se rovná Ken Thomson je úžasné, 829 00:49:14,280 --> 00:49:16,350 pak jsem dovoleno se přihlásit. 830 00:49:16,350 --> 00:49:18,370 Takže lidé jsou jako, no, Jak jsi to udělal? 831 00:49:18,370 --> 00:49:21,090 Podívali jsme se na přihlašovací programu a nic tam. 832 00:49:21,090 --> 00:49:24,700 Je to jako, no, jsem upravil kompilátor přihlásit přihlašovací programu 833 00:49:24,700 --> 00:49:30,490 takže přihlášení Program nyní bude mít že x se 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 říkají, dobře, že to není pravda. 836 00:49:33,120 --> 00:49:35,740 Díváme se na kompilátoru, a Kompilátor nemá žádné řádky 837 00:49:35,740 --> 00:49:36,400 Kód takhle. 838 00:49:36,400 --> 00:49:40,540 Je to jako, OK, ale to, co jste kompilace kompilátoru se? 839 00:49:40,540 --> 00:49:44,810 A myslí si, a je to, jako, no, Já jsem ten, kdo ti dal kompilátor 840 00:49:44,810 --> 00:49:50,580 kterou používáte pro kompilaci kompilátoru, tak jste kompilaci kompilátor, který 841 00:49:50,580 --> 00:49:56,390 sama o sobě je škodlivý, a bude přerušit program login. 842 00:49:56,390 --> 00:49:59,360 Takže v podstatě, v tomto bodě, tam je žádný způsob, jak byste se mohli podívat na zdroje 843 00:49:59,360 --> 00:50:02,450 Kód přihlašovací programu vidět, co je špatně. 844 00:50:02,450 --> 00:50:04,220 Dalo by se dokonce podívat do zdrojový kód kompilátoru 845 00:50:04,220 --> 00:50:06,790 vidět, co je špatně. 846 00:50:06,790 --> 00:50:11,940 >> Budete muset podívat na stroji kód, skutečný binární ze 847 00:50:11,940 --> 00:50:16,760 sestaven kompilátor vidět, počkejte, to řádky kódu by tu být. 848 00:50:16,760 --> 00:50:22,130 Ale Ken Thompson to vzal jeden krok dále a řekl, dobře, tam jsou 849 00:50:22,130 --> 00:50:25,980 Tyto speciální programy, které skutečně pomůže vám číst binární programů, 850 00:50:25,980 --> 00:50:29,340 a tak pokud někdo používá tento program, číst binární, by vidět tyto 851 00:50:29,340 --> 00:50:30,490 řádků kódu. 852 00:50:30,490 --> 00:50:34,020 Byl upraven ty programy, které říkají, všechno Dobrá, když se díváte na 853 00:50:34,020 --> 00:50:38,460 kompilátor, neukazují to zejména sada binární. 854 00:50:38,460 --> 00:50:42,830 >> Takže pak je třeba vzít, že krok dále a v podstatě, které by mohly mít 855 00:50:42,830 --> 00:50:46,210 přijatá více úrovní nepřímé, a na nějakém místě, nikdo je vlastně 856 00:50:46,210 --> 00:50:47,990 bude kontrola. 857 00:50:47,990 --> 00:50:52,590 Takže poučení z příběhu je, že jste nebude psát 858 00:50:52,590 --> 00:50:54,340 Zvonění v této třídě. 859 00:50:54,340 --> 00:50:57,020 Budeš používat lezení Zvonění hodně v této třídě. 860 00:50:57,020 --> 00:51:00,490 Pro všechny víte, Clang je škodlivý program, který je sabotovat každý 861 00:51:00,490 --> 00:51:03,520 jediný program, který jsem kdy sestavil. 862 00:51:03,520 --> 00:51:08,206 A nechat na tom velmi neblahé na vědomí, že se uvidíme ve středu. 863 00:51:08,206 --> 00:51:10,030 >> [APPLAUSE] 864 00:51:10,030 --> 00:51:12,935 >> Reproduktoru 2: V dalším CS50. 865 00:51:12,935 --> 00:51:14,580 >> SPEAKER 3: Neopovažuj se říkat, že. 866 00:51:14,580 --> 00:51:15,930 Můžete to udělat. 867 00:51:15,930 --> 00:51:19,440 Vy jste to udělal dříve, můžete to udělat dnes, můžete to udělat zítra. 868 00:51:19,440 --> 00:51:20,930 Vy jste dělal to několik let. 869 00:51:20,930 --> 00:51:22,790 Stačí jít tam a udělat. 870 00:51:22,790 --> 00:51:24,310 Můžete to udělat. 871 00:51:24,310 --> 00:51:26,102 >> [MUSIC PŘEHRÁVÁNÍ]