1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [Music kucheza] 3 00:00:11,210 --> 00:00:12,100 >> Rob BODEN: All wa kulia. 4 00:00:12,100 --> 00:00:15,620 Kwa hiyo, jambo la kwanza kwanza, video kutoka uso ukoo. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [Video avspelning] 7 00:00:22,560 --> 00:00:23,370 >> -All haki. 8 00:00:23,370 --> 00:00:27,150 Hii ni CS50, na hii ni mwanzo wa wiki tatu. 9 00:00:27,150 --> 00:00:29,980 Samahani sikuweza kuwa pamoja nanyi huko leo, lakini naomba kuanzisha 10 00:00:29,980 --> 00:00:32,880 CS50 ya mwenyewe Rob Boden. 11 00:00:32,880 --> 00:00:33,872 >> [Mwisho video avspelning] 12 00:00:33,872 --> 00:00:39,340 >> [Makofi na Cheers] 13 00:00:39,340 --> 00:00:41,277 >> Rob BODEN: Filamu katika kwamba video ni ajabu. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Sawa. 16 00:00:47,770 --> 00:00:50,960 Hivyo kwanza, kuna mwingine chakula cha mchana. 17 00:00:50,960 --> 00:00:52,330 Ni kesho saa 1:15. 18 00:00:52,330 --> 00:00:54,480 Hakuna chakula cha mchana ni Ijumaa hii. 19 00:00:54,480 --> 00:00:55,810 Ni kwa Quora. 20 00:00:55,810 --> 00:01:00,190 Na Tommy si hapa bado, lakini moja ya watu huko mkuu wa zamani wa CF ni, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Hivyo yeye guy furaha. 23 00:01:02,730 --> 00:01:04,819 Unapaswa kuja. 24 00:01:04,819 --> 00:01:05,900 >> Sawa. 25 00:01:05,900 --> 00:01:11,360 Hivyo wiki iliyopita, tulianza kuvunja mbali juu ya nini string kweli ni. 26 00:01:11,360 --> 00:01:14,830 Tumekuwa inajulikana tangu mwanzo kwamba ni mlolongo wa wahusika. 27 00:01:14,830 --> 00:01:18,130 Lakini wiki iliyopita, sisi delved katika ukweli kwamba ni nini kweli mlolongo wa 28 00:01:18,130 --> 00:01:22,110 wahusika, vizuri, sasa tuna arrays ya wahusika. 29 00:01:22,110 --> 00:01:26,450 Na tunajua kwamba kamba, ni safu ya wahusika, mwishoni mwa sana, 30 00:01:26,450 --> 00:01:30,920 tuna hii null byte maalum, hii backslash 0, inaonyesha kwamba mwisho wa 31 00:01:30,920 --> 00:01:32,230 kamba. 32 00:01:32,230 --> 00:01:36,970 >> Na hivyo string ni safu ya wahusika, lakini tunaweza kuwa na zaidi ya 33 00:01:36,970 --> 00:01:39,530 tu safu ya wahusika, tunaweza kuwa na safu ya yoyote 34 00:01:39,530 --> 00:01:40,890 aina ya kitu tunataka. 35 00:01:40,890 --> 00:01:51,570 Hivyo, kama unakumbuka kutoka wiki iliyopita, Umri mpango huo David ilianzisha 36 00:01:51,570 --> 00:01:53,560 kweli haraka. 37 00:01:53,560 --> 00:01:57,010 Kitu hivyo kwanza sisi ni kwenda kufanya ni kuuliza user kwa integer, 38 00:01:57,010 --> 00:01:58,800 idadi ya watu katika chumba hicho. 39 00:01:58,800 --> 00:02:01,260 Mara baada ya sisi kuwa na kwamba integer, sisi ni kutangaza safu. 40 00:02:01,260 --> 00:02:02,890 Taarifa hii syntax bracket. 41 00:02:02,890 --> 00:02:04,540 Wewe ni kwenda kupata kutumika hiyo. 42 00:02:04,540 --> 00:02:09,430 >> Hivyo sisi ni kutangaza safu ya integers aitwaye milele, na kuna n 43 00:02:09,430 --> 00:02:12,080 integers katika safu hii. 44 00:02:12,080 --> 00:02:16,480 Hivyo hii mfano haki hapa, hii 4 int i ni sawa na 0, i ni chini ya n, i pamoja na 45 00:02:16,480 --> 00:02:20,580 pamoja na kwamba pia ni kwenda kuwa mfano kwamba kupata sana kutumika. 46 00:02:20,580 --> 00:02:24,000 Kwa sababu hiyo pretty kiasi gani uko daima kwenda iterate juu ya arrays. 47 00:02:24,000 --> 00:02:26,330 Ili kukumbuka kwamba n ni urefu wa safu yetu. 48 00:02:26,330 --> 00:02:32,120 Na hivyo hapa, sisi ni mara kwa mara kuuliza kwa umri wa mtu i katika chumba hicho. 49 00:02:32,120 --> 00:02:36,640 >> Baada ya hayo, sisi kwenda chini, na kwa chochote sababu kiholela, sisi kisha 50 00:02:36,640 --> 00:02:40,220 magazeti nje umri gani wao wanaenda kuwa mwaka kuanzia sasa. 51 00:02:40,220 --> 00:02:49,980 Na kuendesha programu kwamba, hebu kufanya milele, dot kufyeka milele. 52 00:02:49,980 --> 00:02:53,010 Hivyo idadi ya watu katika chumba, hebu sema huko ni tatu. 53 00:02:53,010 --> 00:02:59,880 Na kusema, mtu wa kwanza ni 13, pili ni 26, na mwisho ni 30. 54 00:02:59,880 --> 00:03:05,080 Hivyo basi utakuwa iterate juu ya wale watatu watu, magazeti nje 14, 27, na 31. 55 00:03:05,080 --> 00:03:16,060 >> Basi kumbuka kwamba wakati sisi kutangaza safu ya ukubwa n, fahirisi katika 56 00:03:16,060 --> 00:03:19,950 safu, safu ina maadili na fahirisi 0, 1, 2, njia yote 57 00:03:19,950 --> 00:03:21,680 hadi n minus 1. 58 00:03:21,680 --> 00:03:26,255 Hivyo wakati sisi alisema kulikuwa na watu watatu katika chumba, na sisi kuweka katika hapa 59 00:03:26,255 --> 00:03:29,850 iteration kwanza kwa njia hii kitanzi, i ni kwenda 0. 60 00:03:29,850 --> 00:03:31,650 Hivyo katika index 0. 61 00:03:31,650 --> 00:03:34,540 Sisi ni kumshirikisha kwanza umri mtumiaji inaingia. 62 00:03:34,540 --> 00:03:38,870 Kisha katika moja ijayo, sisi ni kuingia pili n mtumiaji inaingia, na katika 63 00:03:38,870 --> 00:03:40,580 karibu na mbili, n mwisho. 64 00:03:40,580 --> 00:03:44,200 >> Hivyo taarifa kwamba safu ya ukubwa tatu haina chochote 65 00:03:44,200 --> 00:03:46,040 katika ripoti tatu. 66 00:03:46,040 --> 00:03:49,036 Hii si halali. 67 00:03:49,036 --> 00:03:50,250 Sawa. 68 00:03:50,250 --> 00:03:55,136 Kwa hiyo, kurejea hapa. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Hivyo sasa kwamba tumekuwa kushughulikiwa na arrays, tuna baadhi ya uzoefu. 71 00:04:01,590 --> 00:04:03,780 Sasa tunakwenda kuendelea na amri line hoja, ambayo itakuwa ni ya 72 00:04:03,780 --> 00:04:05,890 pretty husika na kuweka tatizo hili. 73 00:04:05,890 --> 00:04:09,670 >> Hivyo hadi sasa, wakati wowote wameweza alitangaza kazi yako kuu, tumekuwa 74 00:04:09,670 --> 00:04:11,230 alisema int kuu ni batili. 75 00:04:11,230 --> 00:04:14,070 Hivyo utupu tu ina maana kwamba sisi si kupita yoyote 76 00:04:14,070 --> 00:04:16,440 hoja ya kazi hii. 77 00:04:16,440 --> 00:04:19,190 Sasa tunakwenda kuona kwamba kuu wanaweza kuchukua baadhi ya hoja. 78 00:04:19,190 --> 00:04:22,470 Hapa sisi kuwaita int argc na kamba mabano argv. 79 00:04:22,470 --> 00:04:26,930 mabano, kwa mara nyingine tena, kuonyesha kwamba sisi ni kushughulika na arrays. 80 00:04:26,930 --> 00:04:31,850 Hivyo hapa, mabano kamba argv, sisi ni kushughulika na safu ya masharti. 81 00:04:31,850 --> 00:04:35,360 Hivyo argc, ambayo inaenda zinaonyesha jinsi hoja nyingi tumekuwa 82 00:04:35,360 --> 00:04:37,580 kupita kwa mpango huu. 83 00:04:37,580 --> 00:04:46,050 Na kuona kwamba maana yake ni nini, hebu kuifunga. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Hivyo hadi sasa, tumekuwa kukimbia kila mpango kama dot kufyeka milele. 86 00:04:50,790 --> 00:04:55,250 Tunaweza pia, kwa amri line, siku za nyuma kupita hoja, hivyo neno, amri 87 00:04:55,250 --> 00:04:56,550 line hoja. 88 00:04:56,550 --> 00:04:59,760 Hivyo hoja ya kwanza, hello dunia. 89 00:04:59,760 --> 00:05:03,350 Hivyo hapa, argc itakuwa tatu. 90 00:05:03,350 --> 00:05:07,720 Ni hesabu ya hoja katika mstari amri. 91 00:05:07,720 --> 00:05:12,840 Argc ni daima angalau 1, tangu dot kufyeka milele, yenyewe, makosa kama moja ya 92 00:05:12,840 --> 00:05:14,490 hoja mstari amri. 93 00:05:14,490 --> 00:05:17,010 >> Kisha hujambo ni ya kwanza. 94 00:05:17,010 --> 00:05:20,460 Kama dot slash umri ni 0, basi hujambo ni ya kwanza, na dunia ni 95 00:05:20,460 --> 00:05:22,830 pili mstari amri hoja. 96 00:05:22,830 --> 00:05:29,490 Hivyo kamba argv, tunakwenda kuona, ina masharti, dot slash 97 00:05:29,490 --> 00:05:33,830 milele, hello, na dunia. 98 00:05:33,830 --> 00:05:38,945 Na, kwa ombi Daudi, tunakwenda kucheza video kuanzisha hiyo. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [Video avspelning] 101 00:05:43,890 --> 00:05:46,240 >> -Up mpaka sasa katika programu tumekuwa imeandikwa, tumekuwa kutangaza 102 00:05:46,240 --> 00:05:48,500 kuu kama int kuu ni batili. 103 00:05:48,500 --> 00:05:51,170 Na muda wote huu, kwamba utupu ina tu kuwa kubainisha kwamba 104 00:05:51,170 --> 00:05:54,430 haina mpango wa kuchukua yoyote hoja mstari amri. 105 00:05:54,430 --> 00:05:57,750 Kwa maneno mengine, wakati mtumiaji anaendesha mpango, anaweza kutoa amri 106 00:05:57,750 --> 00:06:01,710 line hoja kwa kuandika ziada maneno au misemo baada ya mpango wa 107 00:06:01,710 --> 00:06:03,000 jina katika haraka. 108 00:06:03,000 --> 00:06:06,550 >> Naam, kama wewe unataka mpango wako kwa kuchukua hoja mstari amri moja au 109 00:06:06,550 --> 00:06:10,540 maneno zaidi hiyo, tunahitaji kuchukua nafasi ya utupu na michache ya hoja. 110 00:06:10,540 --> 00:06:12,200 Basi hebu kufanya hivyo. 111 00:06:12,200 --> 00:06:15,750 Ni pamoja na CS50.h. 112 00:06:15,750 --> 00:06:19,360 Pamoja na kiwango io.h. 113 00:06:19,360 --> 00:06:20,760 Int kuu. 114 00:06:20,760 --> 00:06:26,330 Na sasa, badala ya batili, mimi nina kwenda bayana int aitwaye argc, na 115 00:06:26,330 --> 00:06:28,780 safu ya masharti aitwaye argv. 116 00:06:28,780 --> 00:06:31,820 Sasa, argc na argv ni tu mikataba. 117 00:06:31,820 --> 00:06:34,000 >> Tunaweza kuitwa hoja hizi wengi chochote tunataka. 118 00:06:34,000 --> 00:06:37,630 Lakini jambo muhimu ni kwamba argc ni int kwa sababu, kwa ufafanuzi, ni 119 00:06:37,630 --> 00:06:41,360 kwenda vyenye hoja kuhesabu, idadi ya maneno katika jumla kwamba 120 00:06:41,360 --> 00:06:43,380 mtumiaji typed katika yake haraka. 121 00:06:43,380 --> 00:06:47,910 argv, wakati huo huo, hoja vector, ni kwenda kweli kuwa safu ya kuhifadhi 122 00:06:47,910 --> 00:06:52,020 maneno yote kwamba mtumiaji ina typed katika yake haraka. 123 00:06:52,020 --> 00:06:54,500 >> Hebu kuendelea kufanya kitu sasa kwa moja au zaidi ya haya 124 00:06:54,500 --> 00:06:55,660 hoja mstari amri. 125 00:06:55,660 --> 00:07:00,070 Hasa, hebu kwenda mbele na magazeti chochote neno aina ya mtumiaji 126 00:07:00,070 --> 00:07:03,960 baada ya jina mpango wa katika haraka. 127 00:07:03,960 --> 00:07:04,730 Open bracket. 128 00:07:04,730 --> 00:07:06,240 Karibu bracket. 129 00:07:06,240 --> 00:07:10,510 Asilimia printf s backslash na comma. 130 00:07:10,510 --> 00:07:14,550 Na sasa mimi haja ya kuwaambia printf thamani nini kuziba ndani ya kwamba placeholder. 131 00:07:14,550 --> 00:07:18,600 Nataka neno la kwanza kwamba mtumiaji ina typed baada ya jina mpango huo, 132 00:07:18,600 --> 00:07:23,130 na hivyo mimi nina kwenda kwa kutaja argv bracket 1, karibu 133 00:07:23,130 --> 00:07:24,830 mabano, semicolon. 134 00:07:24,830 --> 00:07:27,290 >> Sasa, kwa nini bracket 1 na si bracket 0? 135 00:07:27,290 --> 00:07:30,990 Naam, ni zamu nje, moja kwa moja kuhifadhiwa katika argv 0 ni kwenda kuwa 136 00:07:30,990 --> 00:07:32,620 mpango wa jina halisi. 137 00:07:32,620 --> 00:07:36,180 Hivyo neno la kwanza kwamba aina user baada ya jina mpango wa ni, kwa 138 00:07:36,180 --> 00:07:38,990 mkataba huo, kwenda kuwa kuhifadhiwa katika argv 1. 139 00:07:38,990 --> 00:07:42,380 Hebu sasa kukusanya na kuendesha mpango huu. 140 00:07:42,380 --> 00:07:47,780 >> Kufanya argv 0, dot slash argv 0. 141 00:07:47,780 --> 00:07:50,520 Na sasa neno kama hello. 142 00:07:50,520 --> 00:07:51,670 Kuingia. 143 00:07:51,670 --> 00:07:53,520 Na huko sisi kuwa nayo, hello. 144 00:07:53,520 --> 00:07:55,750 >> [Mwisho video avspelning] 145 00:07:55,750 --> 00:07:57,000 >> Rob BODEN: All wa kulia. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Karibu hiyo. 148 00:08:01,230 --> 00:08:16,730 Hivyo kuchukua kuangalia katika mpango kwamba sisi tu ilianzisha kwetu, vizuri, 149 00:08:16,730 --> 00:08:24,710 kuonyesha, kama sisi magazeti argv 0, kufanya, sasa ni nini, argv 0, dot slash argv 0. 150 00:08:24,710 --> 00:08:30,440 Hivyo, kama ilivyotarajiwa, ni uchapishaji nje Jina la mpango, tangu argv 0 ni 151 00:08:30,440 --> 00:08:32,970 daima itakuwa jina ya mpango huo. 152 00:08:32,970 --> 00:08:35,640 Lakini hebu kufanya kitu a kidogo zaidi ya kuvutia. 153 00:08:35,640 --> 00:08:42,080 >> Hivyo katika kuweka tatizo, wewe utakuwa na kuletwa na kazi hii, atoi. 154 00:08:42,080 --> 00:08:44,440 Basi je, sisi kutumia atoi kwa? 155 00:08:44,440 --> 00:08:48,550 Hiyo kwenda kubadilisha kamba integer. 156 00:08:48,550 --> 00:08:53,280 Basi, ikiwa mimi kupita kamba, moja mbili, tatu, kwa atoi, kwamba utakuwa kubadilisha kwamba 157 00:08:53,280 --> 00:08:56,910 kwa integer, moja mbili tatu. 158 00:08:56,910 --> 00:09:01,480 Hivyo sisi ni kwenda kubadilisha kwanza amri line hoja ya integer, 159 00:09:01,480 --> 00:09:05,690 na kisha tu magazeti kwamba integer. 160 00:09:05,690 --> 00:09:09,680 >> Hivyo kimsingi, sisi ni aina ya reimplementing GetInt, tu 161 00:09:09,680 --> 00:09:12,350 integer ni aliingia kwa amri line badala ya katika mpango 162 00:09:12,350 --> 00:09:14,560 interactively. 163 00:09:14,560 --> 00:09:23,170 Hivyo basi, na kufanya argv 0, hebu kufanya katika hapa, na kuziba hiyo. 164 00:09:23,170 --> 00:09:27,670 Hivyo mbio argv 0, na hebu kuingia integer, moja mbili tatu nne moja mbili. 165 00:09:27,670 --> 00:09:30,840 Hivyo utakuwa magazeti integer, moja mbili tatu nne moja mbili. 166 00:09:30,840 --> 00:09:35,500 Kuna baadhi ya mambo ya siri kwa atoi kwamba kutakuwa na kuacha kujali juu ya kitu chochote 167 00:09:35,500 --> 00:09:39,040 zaidi ya halali numeric tabia, lakini hiyo haina jambo. 168 00:09:39,040 --> 00:09:42,870 >> Basi je, unafikiri hutokea kama mimi kufanya hili? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Mkato wa kosa. 171 00:09:47,050 --> 00:09:50,410 Hivyo ni kwa nini hiyo? 172 00:09:50,410 --> 00:09:56,060 Kama ukiangalia nyuma katika mpango wetu, sisi ni kuwabadili argv 1, hoja ya kwanza 173 00:09:56,060 --> 00:09:59,610 baada ya jina mpango, integer. 174 00:09:59,610 --> 00:10:03,350 Lakini hakuna hoja kupita baada ya jina mpango. 175 00:10:03,350 --> 00:10:08,060 Hivyo hapa, sisi kuona kwamba hii ni buggy mpango, tangu, kama sisi kujaribu kuendesha 176 00:10:08,060 --> 00:10:10,530 bila hoja yoyote, itakuwa tu ajali. 177 00:10:10,530 --> 00:10:16,950 >> Hivyo lingine mfano wa kawaida utaona ni kitu kama, kama argc ni chini ya 178 00:10:16,950 --> 00:10:21,100 miaka miwili, kuonyesha kwamba kulikuwa na si angalau jina mpango na a 179 00:10:21,100 --> 00:10:29,100 Hoja ya kwanza, basi tutaweza kufanya kitu kama printf, si ya kutosha 180 00:10:29,100 --> 00:10:31,190 hoja mstari amri. 181 00:10:31,190 --> 00:10:33,170 Kwamba pengine si moja nzuri ya magazeti, pengine ni kitu, kama 182 00:10:33,170 --> 00:10:35,440 unapaswa kuingia integer katika mstari amri. 183 00:10:35,440 --> 00:10:37,450 Mimi itabidi mwisho ni huko. 184 00:10:37,450 --> 00:10:39,600 Na kisha kurudi 1. 185 00:10:39,600 --> 00:10:44,740 Basi kumbuka kwamba mwishoni mwa wetu mpango, kama sisi kurudi 0, kwamba aina ya 186 00:10:44,740 --> 00:10:47,060 inaonyesha mafanikio. 187 00:10:47,060 --> 00:10:50,940 Na kuu pia moja kwa moja anarudi 0 kama huna. 188 00:10:50,940 --> 00:10:55,800 >> Hivyo hapa, sisi ni retuning 1 zinaonyesha kwamba si mafanikio. 189 00:10:55,800 --> 00:11:01,000 Na unaweza kurejea chochote unataka, tu, 0 inaonyesha mafanikio, na 190 00:11:01,000 --> 00:11:03,390 kitu kingine chochote inaonyesha kushindwa. 191 00:11:03,390 --> 00:11:04,855 Hivyo basi kukimbia version huu wa mambo. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Basi sasa, kama hatuwezi kuingia amri line hoja, kutakuwa na usahihi kuwaambia 194 00:11:16,600 --> 00:11:18,290 sisi, si ya kutosha mstari amri. 195 00:11:18,290 --> 00:11:20,610 Je, si kumaliza adhabu. 196 00:11:20,610 --> 00:11:24,950 Mwingine, kama sisi kweli kupita moja, inaweza kukamilisha mpango. 197 00:11:24,950 --> 00:11:27,920 Hivyo hii ni jinsi gani kutumia argc katika ili kuhalalisha idadi ya 198 00:11:27,920 --> 00:11:30,630 amri line hoja kwamba ni kweli kupita. 199 00:11:30,630 --> 00:11:39,360 >> Basi hebu kufanya mpango huu kidogo zaidi ngumu, na kuangalia pili 200 00:11:39,360 --> 00:11:42,180 iteration ya mambo. 201 00:11:42,180 --> 00:11:46,310 Basi sasa, sisi siyo kuchapa tu amri ya kwanza line hoja. 202 00:11:46,310 --> 00:11:51,210 Hapa, sisi ni iterating kutoka int i usawa 0, i ni chini ya argc, i pamoja na 203 00:11:51,210 --> 00:11:55,280 plus, na uchapishaji argv, index i. 204 00:11:55,280 --> 00:11:59,300 Hivyo muundo huu, tena, hii ni sawa mfano kama kabla, ila badala 205 00:11:59,300 --> 00:12:02,600 wito variable n, sisi ni kutumia argc. 206 00:12:02,600 --> 00:12:09,520 >> Hivyo hii ni iterating juu ya kila index katika safu, na uchapishaji kila 207 00:12:09,520 --> 00:12:11,910 hiki katika safu. 208 00:12:11,910 --> 00:12:20,300 Na hivyo, wakati sisi kuendesha mpango huu, vizuri, Mimi hakuingia line amri yoyote 209 00:12:20,300 --> 00:12:22,540 hoja, hivyo tu prints mpango jina. 210 00:12:22,540 --> 00:12:26,053 Kama mimi kuingia rundo la vitu, kutakuwa na magazeti moja, kila juu ya line yake mwenyewe. 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 Basi hebu kuchukua hatua hii moja zaidi. 214 00:12:34,770 --> 00:12:38,890 Na badala ya uchapishaji hoja kila juu ya line yake mwenyewe, hebu magazeti ya kila 215 00:12:38,890 --> 00:12:42,590 tabia ya hoja kila juu ya line yake mwenyewe. 216 00:12:42,590 --> 00:12:46,700 Ili kukumbuka kwamba argv ni safu ya masharti. 217 00:12:46,700 --> 00:12:50,960 Kwa hiyo kile ni kamba, lakini safu ya wahusika? 218 00:12:50,960 --> 00:12:57,140 Hivyo hiyo ina maana kwamba argv ni kweli safu ya safu ya wahusika. 219 00:12:57,140 --> 00:13:04,920 Hivyo kuchukua faida ya kwamba, hebu kupuuza hii kwa sasa. 220 00:13:04,920 --> 00:13:08,190 Hebu tu kufikiria kamba argv 0. 221 00:13:08,190 --> 00:13:14,170 >> Hivyo kama tunataka kuleta kila tabia ya argv 0 juu ya line yake mwenyewe, kisha Mimi nataka 222 00:13:14,170 --> 00:13:19,500 kufanya mfano sisi ni kutumika, i ni chini ya urefu wa safu, 223 00:13:19,500 --> 00:13:23,990 ambayo hapa, ni strlen ya, hiyo ni si nini nataka kufanya, kamba 224 00:13:23,990 --> 00:13:26,450 s argv 0 sawa. 225 00:13:26,450 --> 00:13:30,390 Hivyo i ni chini ya urefu wetu safu, ambayo katika kesi hii ni safu 226 00:13:30,390 --> 00:13:34,410 ya wahusika, i pamoja na plus. 227 00:13:34,410 --> 00:13:41,040 Na hivyo, kama tuliona wiki iliyopita, ni bora kama sisi hoja kwamba strlen nje 228 00:13:41,040 --> 00:13:45,210 ya hali, tangu n kuwa na kuongeza strlen ya s kila wakati sisi kwenda 229 00:13:45,210 --> 00:13:47,720 kwa njia ya kitanzi, na ni si kwenda kuwa kubadilisha. 230 00:13:47,720 --> 00:13:50,230 Hivyo tutaweza kuweka sawa na n zaidi ya hapa. 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 Basi sasa, sisi ni iterating juu ya kila index katika safu. 234 00:14:01,320 --> 00:14:05,630 Na hivyo, kama tunataka magazeti ya kila tabia katika safu kwamba, asilimia c ni 235 00:14:05,630 --> 00:14:06,880 bendera tunataka kutumia kwa wahusika. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 Na sasa bracket i ni kwenda kuwa kamba, index tabia i, hivyo kama 238 00:14:19,770 --> 00:14:20,970 kamba walikuwa hello. 239 00:14:20,970 --> 00:14:27,530 kisha s 0 ni kwenda kuwa h, s bracket 1 itakuwa e, na kadhalika. 240 00:14:27,530 --> 00:14:30,800 >> Hivyo sasa tunataka kuchanganya mambo haya mawili. 241 00:14:30,800 --> 00:14:35,440 Tunataka magazeti ya kila tabia ya ya kila hoja ya mstari amri. 242 00:14:35,440 --> 00:14:38,950 Hivyo sisi ni kwenda kuwa na Furushi kwa kitanzi. 243 00:14:38,950 --> 00:14:47,480 Na conventionally, kukabiliana na kwanza ni i, ya pili ni kwenda kuwa j, n 244 00:14:47,480 --> 00:14:54,450 itakuwa strlen ya argv i, i ni chini ya n, i pamoja na plus. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 Na sasa badala ya uchapishaji argv i, hivyo bracket argv i ni kwenda index - 247 00:15:06,870 --> 00:15:14,280 kwamba kinaendelea kuwa i-th amri line hoja, argv i, j ni kwenda 248 00:15:14,280 --> 00:15:16,925 kuwa tabia jth ya i-th hoja. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Mimi itabidi kujikwamua hii hapa sasa tangu sisi kuiweka katika kitanzi. 251 00:15:24,810 --> 00:15:33,900 Hivyo ni sawa na kamba s usawa argv i, na kisha s bracket j. 252 00:15:33,900 --> 00:15:36,980 >> Naam, sisi hawana haja ya kutangaza hii s kutofautiana. 253 00:15:36,980 --> 00:15:44,530 Badala yake, tutaweza tu kuchanganya haya mbili katika kile tulikuwa, argv i, j. 254 00:15:44,530 --> 00:15:45,780 >> SPIKA 1: [inaudible]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> Rob BODEN: wito Good. 257 00:15:49,680 --> 00:15:52,936 Hivyo hii ni kuvunjwa. 258 00:15:52,936 --> 00:15:55,510 Kama mimi kwa kweli mbio, tunataka kuwa barabara hii. 259 00:15:55,510 --> 00:16:01,210 Hivyo kukabiliana na mimi huduma ya juu katika hii maalum kwa ajili ya 260 00:16:01,210 --> 00:16:05,410 kitanzi ni j, iterator. 261 00:16:05,410 --> 00:16:08,560 Hivyo ingekuwa kukimbia katika masuala, pengine usio kitanzi, kama sisi 262 00:16:08,560 --> 00:16:09,540 alikuwa si fasta kwamba. 263 00:16:09,540 --> 00:16:12,220 Hiyo ni kwa nini sisi ni pia kuzungumza kuhusu debugging leo. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Basi hebu kuendesha mpango huu. 266 00:16:15,240 --> 00:16:21,200 Na hebu kweli kuongeza printf tofauti haki hapa kwamba tu magazeti 267 00:16:21,200 --> 00:16:27,480 line nyingine, tangu hii ina maana wakati sisi kuendesha programu, kutakuwa na tupu 268 00:16:27,480 --> 00:16:31,830 line katika kati ya kila tabia ya kila amri line hoja. 269 00:16:31,830 --> 00:16:33,448 Naam, tutaweza kuona kwamba maana yake ni nini. 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 Got baadhi ya mdudu. 273 00:16:39,870 --> 00:16:42,860 Makosa inamuunga kutangaza kazi maktaba strlen. 274 00:16:42,860 --> 00:16:51,630 >> Hivyo kwenda nyuma katika mpango wetu, mimi alisahau hash ni pamoja na string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Hivyo string.h ni kwenda kuwa header faili kwamba anatangaza 277 00:16:57,730 --> 00:16:58,980 kazi strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, inaandaa. 280 00:17:06,060 --> 00:17:09,109 Sasa, hebu kukimbia. 281 00:17:09,109 --> 00:17:10,930 Hivyo tu. 282 00:17:10,930 --> 00:17:17,790 Ni kwenda na magazeti nje yetu jina mpango, hello dunia. 283 00:17:17,790 --> 00:17:23,510 Ni kwenda na magazeti kila kitu, kila tabia, juu ya line yake mwenyewe. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Basi hebu kweli kuchukua hii hatua moja zaidi. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 Na badala ya kutumia string.h, hebu kufikiri kuhusu jinsi tunatarajia kutekeleza yetu wenyewe 288 00:17:39,700 --> 00:17:41,420 strlen kazi. 289 00:17:41,420 --> 00:17:45,600 Kwa hiyo nitakuwa mara moja kutoa kazi sahihi. 290 00:17:45,600 --> 00:17:52,900 Basi hebu kuwaita katika my_strlen, na ni kwenda kuchukua kamba kama hoja, 291 00:17:52,900 --> 00:17:57,220 na sisi kutarajia kurejea urefu wa kamba hiyo. 292 00:17:57,220 --> 00:18:03,430 Kwa hiyo, ambapo ni kwamba guy? 293 00:18:03,430 --> 00:18:04,990 Ndiyo. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Basi kumbuka kutoka slide awali kwamba naye alikuwa wa wiki iliyopita, kwamba 296 00:18:12,900 --> 00:18:18,890 safu ya wahusika, vizuri, kamba, hivyo hebu sema hii ni kamba yetu s. 297 00:18:18,890 --> 00:18:29,870 Hivyo kama s ni kamba, hello, basi, H-E-L-L-O, katika kumbukumbu, ambayo inaenda 298 00:18:29,870 --> 00:18:35,610 kuwa, na kisha backslash hii 0 tabia. 299 00:18:35,610 --> 00:18:39,170 >> Hivyo ni jinsi gani sisi kupata urefu wa s? 300 00:18:39,170 --> 00:18:43,190 Naam, hila ni kuangalia kwa hii kuwepo kwa kuzorota 0 tabia, null hii 301 00:18:43,190 --> 00:18:44,380 Terminator. 302 00:18:44,380 --> 00:18:50,270 Hivyo algorithm Je kwenda kuwa kitu kama chache 303 00:18:50,270 --> 00:18:51,510 wahusika wa kutosha kwamba - 304 00:18:51,510 --> 00:18:56,180 hebu kuwa hii mkono kuwakilisha baadhi counter, hebu wito urefu int. 305 00:18:56,180 --> 00:19:00,060 Hivyo, kuanzia zaidi ya hapa, sisi ni kwenda iterate juu ya kamba yetu. 306 00:19:00,060 --> 00:19:04,100 >> Hivyo tabia ya kwanza, ni H, na siyo nyuma kufyeka 0, hivyo 307 00:19:04,100 --> 00:19:05,170 urefu ni 1. 308 00:19:05,170 --> 00:19:08,050 Iterate na tabia ya pili, E, na siyo backslash 0. 309 00:19:08,050 --> 00:19:09,630 Urefu ni 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 Na hatimaye, sisi kufikia backslash 0, na hivyo kuwa njia, vizuri, 314 00:19:16,690 --> 00:19:17,780 kamba huu ni juu. 315 00:19:17,780 --> 00:19:20,130 Basi hebu kurudi 5. 316 00:19:20,130 --> 00:19:33,630 >> Hivyo kweli utekelezaji wa kwamba, kwanza, n yangu urefu sawa na 0, upande wangu wa kulia. 317 00:19:33,630 --> 00:19:36,088 Na tunakwenda iterate - 318 00:19:36,088 --> 00:19:38,000 >> SPIKA 1: [inaudible] 319 00:19:38,000 --> 00:19:38,640 >> Rob BODEN: Oh, risasi. 320 00:19:38,640 --> 00:19:39,870 Wito nzuri. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 Hivyo n urefu sawa na 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Basi sasa, wakati s urefu haina sawa na kisha, backslash 0. 325 00:19:58,310 --> 00:20:04,660 Basi kumbuka, hii backslash 0, ni tabia ya halisi, na inaonyesha 326 00:20:04,660 --> 00:20:05,820 mwisho wa kamba. 327 00:20:05,820 --> 00:20:09,850 Tu kama, pia, backslash n ni tabia ya halisi. 328 00:20:09,850 --> 00:20:14,040 Backslash 0 ni kwenda zinaonyesha mwisho wa kamba yetu. 329 00:20:14,040 --> 00:20:15,414 Sitaki kuweka kwamba huko. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 Na wakati s indexed na urefu ni si sawa na null Terminator, basi 332 00:20:25,620 --> 00:20:27,130 sisi ni kwenda tu nyongeza urefu. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Basi, mwishoni mwa mpango wetu, urefu ni hatimaye kwenda 335 00:20:34,880 --> 00:20:37,610 kuwa 5 katika kesi hii. 336 00:20:37,610 --> 00:20:39,210 Na sisi itabidi kurudi urefu. 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 Hivyo sasa hapa chini, mimi si kufanya my_strlen. 340 00:20:48,290 --> 00:20:50,700 Hebu kukusanya ni kuhakikisha kila kitu anaendesha vizuri. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Ilikuwa mimi kufanya katika 2? 343 00:20:58,210 --> 00:21:00,565 Au ni kwamba 1? 344 00:21:00,565 --> 00:21:01,940 Kwamba lazima kufanya. 345 00:21:01,940 --> 00:21:02,690 Sawa. 346 00:21:02,690 --> 00:21:08,490 Hivyo hii ni argv 2. 347 00:21:08,490 --> 00:21:11,585 Kazi kama ilivyotarajiwa, ingawa ilikuwa ni kwamba mmoja mimi alifanya hivyo katika? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Ndiyo. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Hii toleo la mambo hawakuwa na printf mpya line baada ya, lakini 352 00:21:21,820 --> 00:21:22,910 haina tofauti yoyote. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Hivyo kazi kama ilivyotarajiwa. 355 00:21:25,780 --> 00:21:34,750 >> Sasa tunaweza hata kuchanganya hatua hii moja zaidi, ambapo taarifa hapa, vizuri, 356 00:21:34,750 --> 00:21:38,920 kwanza, sisi ni grabbing strlen ya argv i, na kisha sisi ni iterating juu ya 357 00:21:38,920 --> 00:21:41,450 kila tabia katika kamba hiyo. 358 00:21:41,450 --> 00:21:47,480 Hivyo badala ya kufanya hivyo, nini kama sisi tu kuchanganya mantiki hii ya kusubiri 359 00:21:47,480 --> 00:21:50,740 mpaka sisi kugonga backslash 0 haki ndani ya hii kwa kitanzi? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Hivyo iterate wakati argv i, j gani backslash si sawa 0. 362 00:22:07,490 --> 00:22:10,680 Hivyo basi kukimbia yake ya kwanza. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Sawa. 365 00:22:21,180 --> 00:22:27,655 Hivyo hapa, hali hii ni kusema - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 hebu wazi kwamba. 368 00:22:40,060 --> 00:22:49,140 Basi sasa, basi hii kuwa argv yetu. 369 00:22:49,140 --> 00:22:55,290 Hivyo wakati mimi tu mbio mpango kwamba kabla, argv ni safu ya masharti. 370 00:22:55,290 --> 00:23:03,100 Na hivyo, kama mimi kuendesha kwa dot slash argv 2, hello dunia, basi argv 371 00:23:03,100 --> 00:23:07,650 yenyewe ni urefu 3, kwa argv sifuri, hello, na dunia. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> Na ndani ya kila mmoja wa fahirisi hizi ni, yenyewe safu, ambapo hii utakuwa 374 00:23:19,660 --> 00:23:23,780 dot, hii itakuwa slash, sijui kama hiyo ilikuwa ni mwelekeo sahihi, mimi 375 00:23:23,780 --> 00:23:25,680 sidhani ilivyokuwa. 376 00:23:25,680 --> 00:23:30,110 -R-V dash, unahitaji nafasi zaidi. 377 00:23:30,110 --> 00:23:32,570 Hebu kukatwa katika safu hii. 378 00:23:32,570 --> 00:23:38,230 -R-V dash 0, na kisha backslash 0. 379 00:23:38,230 --> 00:23:43,160 Na kisha katika disarray itakuwa hello. 380 00:23:43,160 --> 00:23:45,910 Hebu sema, H-E backslash 0. 381 00:23:45,910 --> 00:23:51,130 Na hatimaye, W-O backslash 0. 382 00:23:51,130 --> 00:23:59,730 >> Hivyo algorithm kwamba sisi tu aliandika, Furushi kwa tanzi, nini wao ni 383 00:23:59,730 --> 00:24:07,321 kufanya ni, sisi kwanza na kukabiliana na i na kisha j. 384 00:24:07,321 --> 00:24:15,206 Hii itakuwa rahisi na kanuni juu ya screen, Hebu kwenda nyuma ya hii. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Hivyo taarifa kwamba i ni iterator kwamba iterating juu ya kila amri 387 00:24:24,600 --> 00:24:25,610 line hoja. 388 00:24:25,610 --> 00:24:28,870 Na j ni iterator iterating juu ya tabia ya kila mmoja katika 389 00:24:28,870 --> 00:24:30,410 amri line hoja. 390 00:24:30,410 --> 00:24:46,755 Kwa hiyo kile printf hii ndani kabisa ni kufanya ni, tuna 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, lakini sasa, argv 0 7 ni kwenda 392 00:24:58,680 --> 00:25:00,670 backslash sawa 0. 393 00:25:00,670 --> 00:25:05,730 >> Hivyo basi sisi exit kwamba kwa kitanzi, na sasa i iterates 1. 394 00:25:05,730 --> 00:25:10,910 Na sasa tunakwenda magazeti argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 vizuri, sasa, tangu mimi kukata hujambo short, argv 1 2 kwa mara nyingine tena kwenda kuwa 396 00:25:17,040 --> 00:25:18,170 backslash 0. 397 00:25:18,170 --> 00:25:25,050 Na hivyo, nyongeza i na kuendelea, na kadhalika, mpaka sisi magazeti nje yote ya 398 00:25:25,050 --> 00:25:28,580 dunia, na wale ni tatu mstari amri hoja, na tutaweza exit nje ya 399 00:25:28,580 --> 00:25:31,670 yttersta kitanzi, na kumaliza programu yetu. 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 >> Basi hebu kurudi hapa. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Hivyo itabidi kupata baadhi ya uzoefu na hoja mstari amri juu ya hili 406 00:25:52,370 --> 00:25:54,460 tatizo fulani kuweka. 407 00:25:54,460 --> 00:25:56,630 >> Sasa, debugging. 408 00:25:56,630 --> 00:26:01,680 Hivyo pengine tayari alikuwa na kufanya baadhi debugging na uliopita yako 409 00:26:01,680 --> 00:26:03,120 kuweka tatizo. 410 00:26:03,120 --> 00:26:08,420 Na njia moja rahisi sana ya debugging, kwanza, hebu tuangalie mpango buggy. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 Vizuri, kutembea kwa njia ya mpango huu, tunakwenda kuomba user kwa 413 00:26:23,830 --> 00:26:29,350 integer, kunyakua kwamba integer, na kisha, kiholela, tuna wakati kitanzi kwamba 414 00:26:29,350 --> 00:26:32,280 ni kwenda tu kuongezwa i mpaka ni sawa na 10. 415 00:26:32,280 --> 00:26:35,820 Hebu kudhani tu mimi nina kuingia integer zaidi ya 10. 416 00:26:35,820 --> 00:26:38,700 Hivyo kuongezwa i mpaka ni sawa na 10. 417 00:26:38,700 --> 00:26:42,630 >> Na kisha sisi kuwa na mwingine kitanzi wakati kwamba, wakati i haina sawa 0, sisi ni 418 00:26:42,630 --> 00:26:44,540 kwenda kuongezwa i na 3. 419 00:26:44,540 --> 00:26:49,790 Hivyo kama unaweza kuona dhamira ya mdudu hapa, ni kwamba hii utakuwa kuongezwa i kwa 420 00:26:49,790 --> 00:26:57,010 kuwa 10, na kisha hii itakuwa wakati kitanzi decrement i kutoka 10, 7, 4, 1, 421 00:26:57,010 --> 00:27:02,880 hasi 2, hasi 5, na kadhalika, kwa infinity hasi, tangu i mapenzi 422 00:27:02,880 --> 00:27:05,920 kweli kamwe sawa 0. 423 00:27:05,920 --> 00:27:08,610 Na kisha mwishoni mwa mpango huu, tuna foo kazi ambayo ni 424 00:27:08,610 --> 00:27:12,130 kwenda juu ya magazeti kuwa i. 425 00:27:12,130 --> 00:27:16,520 >> Hivyo hii ni ya muda mfupi na yasiyo na maana mpango, na mdudu ni dhahiri, 426 00:27:16,520 --> 00:27:18,790 hasa baada ya mimi tu alisema nini mdudu mara. 427 00:27:18,790 --> 00:27:24,840 Lakini nia hapa ni vizuri, hii inaweza kweli kuangalia kama baadhi ya yako 428 00:27:24,840 --> 00:27:30,040 ufumbuzi kutoka tamaa kutoka mwisho kuweka tatizo, na labda huna na 429 00:27:30,040 --> 00:27:32,800 baadhi kitanzi usio katika mpango wako, na wewe huna wazo 430 00:27:32,800 --> 00:27:34,100 nini kusababisha athari yake. 431 00:27:34,100 --> 00:27:38,690 Hivyo muhimu sana debugging mbinu ni kwa kuongeza tu printfs 432 00:27:38,690 --> 00:27:40,180 wote juu ya kanuni yako. 433 00:27:40,180 --> 00:27:49,200 >> Hivyo hapa nataka printf nje kwanza kitanzi wakati. 434 00:27:49,200 --> 00:27:53,155 Na hapa nataka printf, na mimi itabidi magazeti i. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Mimi itabidi hata kufanya kwanza wakati kitanzi, i. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Nje, pili kitanzi wakati. 439 00:28:09,040 --> 00:28:12,170 Kwa mara nyingine tena, magazeti ndani ya hapa, thamani i. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 Na hebu kukimbia hii. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Hivyo dot slash utatuzi. 444 00:28:24,800 --> 00:28:25,610 Kuingia integer. 445 00:28:25,610 --> 00:28:28,150 Hebu kufanya 13. 446 00:28:28,150 --> 00:28:28,760 Na boom. 447 00:28:28,760 --> 00:28:33,300 Tunaona kwamba sisi ni looping usio ndani ya wakati pili kitanzi. 448 00:28:33,300 --> 00:28:36,305 Basi sasa sisi kujua nini mdudu ni. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Lakini debugging printf ni kubwa kikamilifu, lakini mara moja programu yako kupata 451 00:28:45,610 --> 00:28:50,560 tena na ngumu zaidi, kuna ufumbuzi kisasa zaidi kwa 452 00:28:50,560 --> 00:28:51,705 kupata mambo kazi. 453 00:28:51,705 --> 00:28:52,955 Basi hebu kuondoa printfs hayo yote. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 Na hebu kuhakikisha mimi si kuvunja chochote. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Hivyo mpango tunakwenda kuanzisha inaitwa 458 00:29:14,180 --> 00:29:16,715 GDB, kwa GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 Vizuri, kwa kweli, hebu kuondoa utatuzi kwa a pili, na kufanya utatuzi tena. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 Vizuri, kwa kweli kwanza, somo nzuri katika hoja mstari amri. 463 00:29:34,440 --> 00:29:37,780 Taarifa kwamba amri hii Clang kwamba ni kuandaa kila kitu ni kuwa alipita 464 00:29:37,780 --> 00:29:41,300 katika mstari amri, hizi hoja mstari amri. 465 00:29:41,300 --> 00:29:46,250 Hivyo ni jinsi gani wewe ni kwenda kutumia hoja mstari amri, kama sisi 466 00:29:46,250 --> 00:29:51,500 walivyofanya zamani, na kama wewe katika pset 2, kwamba ni jinsi gani Clang ni kutumia yao. 467 00:29:51,500 --> 00:30:00,070 >> Hivyo taarifa kwamba hii kwanza flag, dash ggdb3, nini hiyo akisema ni, Clang, 468 00:30:00,070 --> 00:30:03,790 unapaswa kukusanya faili hili kwa kusudi sisi hatimaye 469 00:30:03,790 --> 00:30:05,380 haja Debug yake. 470 00:30:05,380 --> 00:30:13,840 Hivyo muda mrefu kama una kwamba flag, basi tunaweza GDB utatuzi. 471 00:30:13,840 --> 00:30:17,380 Na kutakuwa na kufungua GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> Hivyo kuna mengi ya amri kwamba unahitaji kupata kutumika. 473 00:30:22,920 --> 00:30:27,100 Kwanza moja kwamba itabidi pengine mara moja haja ni kukimbia. 474 00:30:27,100 --> 00:30:28,200 Kwa hiyo kile ni kukimbia kwenda kufanya nini? 475 00:30:28,200 --> 00:30:30,910 Ni kwenda kuanza programu yetu. 476 00:30:30,910 --> 00:30:36,180 Hivyo kukimbia, kuanzisha mpango, mpango anauliza sisi kwa integer, 13. 477 00:30:36,180 --> 00:30:39,170 Na kisha ni looping usio kama ilivyotarajiwa, ila mimi kuondolewa 478 00:30:39,170 --> 00:30:40,500 printfs, hivyo hatuna hata kuona kwamba. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Exited kawaida. 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 Ni inawezekana kwamba amefungwa wote njia ya kuzunguka, nyuma - kupuuza hiyo. 484 00:30:53,640 --> 00:30:55,170 Kudhani kuwa hakuwa exit kawaida. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Kuna jibu ngumu hiyo. 487 00:31:03,370 --> 00:31:07,890 >> Basi sasa, si kwamba ni muhimu sana. 488 00:31:07,890 --> 00:31:11,480 Hivyo tu kuendesha programu yetu ndani ya debugger hii haina kutusaidia katika yoyote 489 00:31:11,480 --> 00:31:15,610 njia, tangu sisi wangefanya tu dot kufyeka utatuzi kutoka nje GDB. 490 00:31:15,610 --> 00:31:21,250 Hivyo amri moja kwamba itabidi pengine - 491 00:31:21,250 --> 00:31:22,970 na mimi itabidi kuacha hii. 492 00:31:22,970 --> 00:31:25,850 Kudhibiti-d au kuacha, wote kazi. 493 00:31:25,850 --> 00:31:29,550 Basi hebu kufungua tena. 494 00:31:29,550 --> 00:31:31,130 >> Amri nyingine ambayo pengine utasikia mara moja wanataka 495 00:31:31,130 --> 00:31:33,600 kuzoea ni Break. 496 00:31:33,600 --> 00:31:37,120 Hivyo tutaweza kuvunja juu ya kuu kwa sasa, na basi mimi itabidi kueleza kwamba. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 Naam, hapa tunaona sisi kuweka breakpoint katika mstari huu katika debug.c. 499 00:31:46,370 --> 00:31:50,160 Kwa hiyo kile mapumziko njia ni kwamba wakati mimi aina ya kukimbia, mpango ni kwenda 500 00:31:50,160 --> 00:31:53,560 kuendelea mbio hadi Mimi kugonga breakpoint. 501 00:31:53,560 --> 00:31:59,390 Hivyo wakati mimi kugonga kukimbia, mpango kuanza, na kisha inavunja haraka kama 502 00:31:59,390 --> 00:32:01,940 inaingia kazi kuu. 503 00:32:01,940 --> 00:32:06,930 Kuvunja kuu ni kwenda kuwa kitu wewe pretty kawaida kufanya. 504 00:32:06,930 --> 00:32:11,340 >> Na sasa, kwa kuanzisha wewe kwa baadhi ya amri zaidi. 505 00:32:11,340 --> 00:32:14,330 Taarifa hapa, kwamba ni kusema sisi kuvunja katika mstari wa 11, ambayo ni 506 00:32:14,330 --> 00:32:16,230 printf, kuingia integer. 507 00:32:16,230 --> 00:32:21,260 Hivyo amri ya pili ni kwenda kuwa jinsi sisi kwenda mstari wa pili code. 508 00:32:21,260 --> 00:32:24,810 Hii ni kwenda kuruhusu sisi hatua kupitia mpango line yetu kwa line. 509 00:32:24,810 --> 00:32:26,260 Hivyo ijayo. 510 00:32:26,260 --> 00:32:29,820 >> Sasa line 12, tunakwenda kupata integer. 511 00:32:29,820 --> 00:32:30,450 Next. 512 00:32:30,450 --> 00:32:34,290 Na kama wewe tu hit Enter tena, itabidi Rudia jambo la mwisho alivyofanya. 513 00:32:34,290 --> 00:32:36,480 Hivyo mimi si haja ya aina ijayo kila wakati. 514 00:32:36,480 --> 00:32:40,100 Hivyo kuingia integer, 13. 515 00:32:40,100 --> 00:32:46,940 Basi sasa, mstari wa 14, wakati i ni mkubwa ya 10, na mimi itabidi kufanya ijayo. 516 00:32:46,940 --> 00:32:48,685 Na tunaona tunakwenda kuongezwa i. 517 00:32:48,685 --> 00:32:50,210 Hivyo sisi ni kwenda kwa kuongezwa i tena. 518 00:32:50,210 --> 00:32:53,620 >> Basi sasa, mwingine ni muhimu amri ni Print. 519 00:32:53,620 --> 00:32:55,750 Hivyo Print ni kwenda magazeti nje thamani ya kutofautiana. 520 00:32:55,750 --> 00:32:57,825 Hebu kuleta thamani ya kutofautiana i. 521 00:32:57,825 --> 00:32:58,705 Hebu magazeti i. 522 00:32:58,705 --> 00:33:00,910 Ni kwenda kusema i ni 11. 523 00:33:00,910 --> 00:33:03,330 Sasa sisi Ifwatayo tena wakati i ni zaidi ya 10. 524 00:33:03,330 --> 00:33:05,590 Hivyo i bado ni kubwa kuliko 10, tangu ni 11. 525 00:33:05,590 --> 00:33:06,920 i minus minus. 526 00:33:06,920 --> 00:33:08,250 Hebu magazeti i tena. 527 00:33:08,250 --> 00:33:10,950 Kama ilivyotarajiwa, ni 10. 528 00:33:10,950 --> 00:33:12,510 >> Basi sasa, ijayo. 529 00:33:12,510 --> 00:33:16,250 Ni kurejea na hali, i ni zaidi ya 10, lakini i ni sasa 10, hivyo 530 00:33:16,250 --> 00:33:20,040 si zaidi ya 10, hivyo tunatarajia kwa kuanguka nje ya kitanzi wakati. 531 00:33:20,040 --> 00:33:22,220 Na sasa tuko chini ya kwamba mstari wa kanuni. 532 00:33:22,220 --> 00:33:28,750 Na amri nyingine, Orodha, ni kwenda tu kuonyesha uliopita na ujao 533 00:33:28,750 --> 00:33:31,240 michache ya mstari wa kanuni, katika kesi waliopotea mwenyewe. 534 00:33:31,240 --> 00:33:35,420 Hivyo sisi tu exited kitanzi hii wakati, na sasa tumeingia hii 535 00:33:35,420 --> 00:33:37,080 wakati kitanzi, line 18. 536 00:33:37,080 --> 00:33:39,860 Hivyo wakati i haina sawa 0. 537 00:33:39,860 --> 00:33:46,570 Na, pili, i sawa na i minus 3, na sisi itabidi taarifa, hii itabidi kuendelea. 538 00:33:46,570 --> 00:33:48,270 Na tunaweza magazeti i. 539 00:33:48,270 --> 00:33:49,990 >> Kila amri aina ya ina njia za mkato. 540 00:33:49,990 --> 00:33:51,720 Hivyo p ni short kwa Print. 541 00:33:51,720 --> 00:33:53,400 Hivyo tunaweza p i. 542 00:33:53,400 --> 00:33:57,550 Tu kuweka kufanya n, au kuendelea kufanya Next. 543 00:33:57,550 --> 00:33:58,340 Magazeti i tena. 544 00:33:58,340 --> 00:34:00,380 Unaweza kuona sasa ni hasi 167. 545 00:34:00,380 --> 00:34:06,030 Hivyo hii itakuwa kwenda juu ya milele, lakini si kweli milele, tangu wewe tu kuona, ni 546 00:34:06,030 --> 00:34:09,330 kweli mwisho wakati fulani. 547 00:34:09,330 --> 00:34:15,699 >> Hivyo kwamba ni Mwanzo GDB. 548 00:34:15,699 --> 00:34:19,504 Lakini hebu kufanya jambo moja zaidi katika GDB. 549 00:34:19,504 --> 00:34:20,754 Uh, utatuzi. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Hivyo, katika kesi hii, usio kitanzi kilichotokea kwa kuwa ndani ya 552 00:34:28,534 --> 00:34:30,050 kazi kuu. 553 00:34:30,050 --> 00:34:35,779 Na kwa sasa, kukubali tu kwamba mimi nina wanaenda usio kitanzi katika 554 00:34:35,779 --> 00:34:37,029 foo kazi. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Kumbuka tu kwamba, mwishoni mwa hii mpango, vizuri, hii awali ilikuwa 557 00:34:43,730 --> 00:34:46,210 wito foo, ambayo ilikuwa tu kwenda magazeti i. 558 00:34:46,210 --> 00:34:51,880 Lakini sasa sisi ni wito foo, ambayo ni kwenda kuongezwa i mpaka ni 0, na 559 00:34:51,880 --> 00:34:54,548 kisha magazeti kwamba kutofautiana. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Ila hiyo. 562 00:34:57,970 --> 00:35:00,175 Kufanya utatuzi. 563 00:35:00,175 --> 00:35:03,310 Na sasa, GDB utatuzi. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Basi, ikiwa mimi kukimbia tu basi mimi nina si kwenda kuwa na uwezo wa kweli hatua kwa njia yangu 566 00:35:10,580 --> 00:35:11,730 mpango line-na-line. 567 00:35:11,730 --> 00:35:19,820 Basi hebu kuvunja katika kuu, na basi aina ya kukimbia. 568 00:35:19,820 --> 00:35:28,160 Hivyo kwenda kwa njia hii, printf, kuingia integer, kupata integer, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Hivyo sisi ni kwenda kuweka decrementing mpaka i ni zaidi ya 10. 571 00:35:37,490 --> 00:35:42,840 Kisha tunakwenda kuanguka kwa njia ya wakati kitanzi, na kupata line - 572 00:35:42,840 --> 00:35:44,364 hebu kufungua it up katika dirisha tofauti. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Hivyo sisi decremented mpaka i alikuwa tena zaidi ya 10, na kisha sisi 575 00:35:53,300 --> 00:35:55,700 aitwaye kazi, foo. 576 00:35:55,700 --> 00:36:01,340 >> Hivyo kilichotokea kwa haraka kama mimi hit kazi foo, vizuri, mimi kuitwa foo, na 577 00:36:01,340 --> 00:36:04,030 basi mimi tena alikuwa na mamlaka juu ya GDB. 578 00:36:04,030 --> 00:36:10,230 Basi kwa haraka kama mimi hit Ifwatayo katika mstari huu, mambo iliendelea hadi hii ilitokea, 579 00:36:10,230 --> 00:36:12,400 ambapo mpango exited wakati - 580 00:36:12,400 --> 00:36:14,450 kudhani haikuwepo hatimaye. 581 00:36:14,450 --> 00:36:16,390 Unaweza kuona ni pause kwa kidogo ingawa. 582 00:36:16,390 --> 00:36:22,040 Hivyo kwa nini mimi kupoteza udhibiti wa mpango katika hatua hiyo? 583 00:36:22,040 --> 00:36:27,540 Naam, wakati mimi aina ya pili, kwamba huenda halisi mstari wa pili kificho kwamba 584 00:36:27,540 --> 00:36:28,850 nitafanya. 585 00:36:28,850 --> 00:36:35,950 Hivyo, baada ya line 21, mstari wa pili code kwamba nitafanya ni line 22, 586 00:36:35,950 --> 00:36:38,520 ambayo ni, exiting kutoka kuu. 587 00:36:38,520 --> 00:36:43,810 Hivyo Sitaki kwenda tu kwa line ya pili ya code. 588 00:36:43,810 --> 00:36:48,170 Mimi nataka kwenda katika kazi, foo, na kisha pia hatua kupitia 589 00:36:48,170 --> 00:36:49,830 wale mistari ya maadili. 590 00:36:49,830 --> 00:36:53,726 >> Hivyo kwa kuwa, tuna mbadala. 591 00:36:53,726 --> 00:36:56,770 Hebu kuacha tena. 592 00:36:56,770 --> 00:36:58,020 Kuvunja kuu. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, pili, pili, 13, pili, pili, pili, kwa makini, 595 00:37:06,370 --> 00:37:09,820 kabla ya sisi kugonga line foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Basi sasa, tuko katika mstari 21, ambapo sisi kuwaita foo. 598 00:37:13,700 --> 00:37:17,100 Hatutaki aina ya pili, tangu kwamba wataita kazi foo, na 599 00:37:17,100 --> 00:37:18,710 kwenda mstari wa pili code. 600 00:37:18,710 --> 00:37:20,840 Nini tunataka kutumia ni hatua ya. 601 00:37:20,840 --> 00:37:25,690 Hivyo kuna tofauti kati ya hatua na Next, ambapo hatua hatua katika 602 00:37:25,690 --> 00:37:28,190 kazi, na wa pili huenda juu ya kazi. 603 00:37:28,190 --> 00:37:32,830 Ni tu executes ukamilifu wa kazi na anaendelea kwenda. 604 00:37:32,830 --> 00:37:37,210 >> Hivyo hatua ni anaenda kututoa katika kazi, foo. 605 00:37:37,210 --> 00:37:41,160 Na sisi kuona hapa, sasa, tuko nyuma katika kitanzi hii wakati kwamba, katika nadharia, 606 00:37:41,160 --> 00:37:44,190 kwenda kuendelea milele. 607 00:37:44,190 --> 00:37:50,420 Na kama wewe hit Hatua, wakati ni hata kazi ya wito, basi ni 608 00:37:50,420 --> 00:37:51,720 kufanana na Next. 609 00:37:51,720 --> 00:37:55,320 Hivyo ni tu wakati uko katika line kwamba wito kazi ambayo Hatua ya 610 00:37:55,320 --> 00:37:56,970 ni kwenda tofauti na Next. 611 00:37:56,970 --> 00:37:57,930 Hivyo Hatua ya kuleta sisi hapa. 612 00:37:57,930 --> 00:38:02,100 Hatua, hatua, hatua, hatua, hatua, hatua, na tutaweza tu usio kitanzi milele. 613 00:38:02,100 --> 00:38:06,810 >> Basi unaweza kuzoea kwamba kama yako njia ya kutambua loops usio na mipaka, ni 614 00:38:06,810 --> 00:38:08,960 tu kufanya hii Enter muhimu kwa kuona ambapo wewe kukwama. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Kuna njia bora ya kufanya hivyo, lakini kwa sasa, kwamba ni kikamilifu kutosha. 617 00:38:14,780 --> 00:38:17,967 Na stylistically, kuendana na Sinema 50, mimi wanapaswa aliyefanya hivyo. 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 >> Hivyo amri moja mwisho kuanzisha. 621 00:38:28,400 --> 00:38:30,810 Naam, hebu GDB utatuzi in 622 00:38:30,810 --> 00:38:35,580 Hivyo badala ya kuvunja katika kuu, kama mimi kujua foo kazi ni pia 623 00:38:35,580 --> 00:38:39,230 tatizo, basi mimi naweza kuwa na haki akasema, kuvunja katika foo, badala yake. 624 00:38:39,230 --> 00:38:42,310 Hebu sema mimi kuvunja katika wote kuu na foo. 625 00:38:42,310 --> 00:38:45,390 Hivyo unaweza kuweka breakpoints kama wengi kama unataka. 626 00:38:45,390 --> 00:38:49,230 Wakati mimi aina kukimbia, ni kwenda kuacha katika - 627 00:38:49,230 --> 00:38:52,180 ooh, hebu recompile, tangu Mimi iliyopita mambo. 628 00:38:52,180 --> 00:38:55,950 Utaona hii line, Onyo, chanzo file ni zaidi ya hivi karibuni kuliko kutekelezwa. 629 00:38:55,950 --> 00:38:59,680 Hivyo hiyo ina maana kwamba mimi tu akaenda katika hapa na iliyopita hizi kuendana na Sinema 630 00:38:59,680 --> 00:39:03,100 50, lakini sikuweza recompile mpango. 631 00:39:03,100 --> 00:39:04,870 Hivyo GDB hufanya mimi kufahamu ya kwamba. 632 00:39:04,870 --> 00:39:10,130 Mimi itabidi kujiondoa, kufanya utatuzi tena, hit GDB utatuzi. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Basi sasa, nyuma kwa nini mimi alikuwa akifanya. 635 00:39:12,800 --> 00:39:15,720 Kuvunja kuu, mapumziko foo. 636 00:39:15,720 --> 00:39:20,680 Sasa kama mimi kuendesha programu, hivyo ni kwenda kuendelea mpaka hits 637 00:39:20,680 --> 00:39:21,320 breakpoint. 638 00:39:21,320 --> 00:39:24,680 Breakpoint kinachotokea kwa kuwa wa kwanza katika kuu. 639 00:39:24,680 --> 00:39:28,630 Sasa, badala ya kufanya pili, pili, pili, pili, pili, hata mimi kugonga foo, mimi 640 00:39:28,630 --> 00:39:35,230 unaweza aina kuendelea, ambayo itaendelea mpaka hit breakpoint ijayo. 641 00:39:35,230 --> 00:39:37,200 Mimi na kuingia integer kwanza. 642 00:39:37,200 --> 00:39:40,570 Kuendelea itaendelea mpaka mimi hit breakpoint ya pili, ambayo ni kwamba 643 00:39:40,570 --> 00:39:43,320 kazi ya foo. 644 00:39:43,320 --> 00:39:50,130 >> Hivyo kukimbia kukimbia mpaka hit breakpoint, lakini wewe tu aina kukimbia wakati 645 00:39:50,130 --> 00:39:54,060 wewe ni mapya mpango, na kisha, kutoka hapo juu, ni kuendelea. 646 00:39:54,060 --> 00:40:01,950 Kama mimi tu alifanya kuvunja kuu na basi mbio, utakuwa kuvunja katika 647 00:40:01,950 --> 00:40:03,670 kuu, na kisha kuendelea. 648 00:40:03,670 --> 00:40:10,050 Tangu sina hatua ya mapumziko katika foo, kuingia integer, kisha sasa mimi nina 649 00:40:10,050 --> 00:40:11,380 si kwenda kuvunja katika foo. 650 00:40:11,380 --> 00:40:16,318 Ni tu kwenda kwa usio kitanzi mpaka hiyo. 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 >> Hivyo kwamba ni Intro kwa GDB. 654 00:40:24,420 --> 00:40:27,790 Unapaswa kuanza kutumia katika seti tatizo lako. 655 00:40:27,790 --> 00:40:30,550 Ni inaweza kuwa na manufaa sana kutambua mende. 656 00:40:30,550 --> 00:40:35,280 Kama kweli tu, line-na-line, kwenda kwa njia ya kanuni yako, na kulinganisha nini ni 657 00:40:35,280 --> 00:40:39,740 kweli kinachotokea na unatarajia nini kutokea, basi ni pretty 658 00:40:39,740 --> 00:40:41,060 vigumu miss mende yako. 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 >> Hivyo wiki iliyopita David kuletwa hadi hii siri muhimu cryptography mambo kwa 663 00:40:54,040 --> 00:40:59,350 mara ya kwanza, ambapo hatutaki nywila tu kuhifadhiwa kwenye wetu 664 00:40:59,350 --> 00:41:03,210 kompyuta katika baadhi Nakala faili wazi, ambapo mtu anaweza kuja juu na tu 665 00:41:03,210 --> 00:41:04,660 kufungua it up na kusoma yao. 666 00:41:04,660 --> 00:41:07,530 Kusema ukweli, wangekuwa encrypted katika baadhi ya njia. 667 00:41:07,530 --> 00:41:13,340 Na katika tatizo kuweka 2, wewe utakuwa kushughulika kwa njia moja ya kuficha, 668 00:41:13,340 --> 00:41:16,520 au, vizuri, njia mbili, lakini wao ni si kubwa sana. 669 00:41:16,520 --> 00:41:20,050 Kama wewe kufanya hacker toleo, wewe ni pia kwenda kushughulika na 670 00:41:20,050 --> 00:41:22,150 decrypting baadhi ya mambo. 671 00:41:22,150 --> 00:41:29,770 >> Hivyo suala sasa ni vizuri, hata kama tuna encryption nguvu 672 00:41:29,770 --> 00:41:34,830 algorithm katika dunia, kama wewe kuchagua password hasa maskini, basi ni 673 00:41:34,830 --> 00:41:37,720 si kukusaidia sana, tangu watu bado kuwa na uwezo wa kufikiri nje. 674 00:41:37,720 --> 00:41:41,530 Hata kama kuona kamba encrypted na inaonekana kama fujo ya takataka 675 00:41:41,530 --> 00:41:44,760 hiyo ina maana kitu kwao, kama wao bado tu haja ya kujaribu nywila chache 676 00:41:44,760 --> 00:41:50,560 takwimu ni nje, basi si salama sana. 677 00:41:50,560 --> 00:41:55,890 Hivyo kuangalia video kwamba hufanya hatua hiyo. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [Video avspelning] 680 00:42:00,970 --> 00:42:02,100 >> -Helmeti, ninyi Fiend. 681 00:42:02,100 --> 00:42:03,370 Nini kinaendelea? 682 00:42:03,370 --> 00:42:05,170 Unafanya nini kwa binti yangu? 683 00:42:05,170 --> 00:42:09,910 >> -Niruhusu kuanzisha kipaji vijana plastiki upasuaji, Dk Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, pua kubwa kazi ya mtu katika eneo lote la 685 00:42:13,730 --> 00:42:16,080 ulimwengu, na Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -Wako Mtukufu. 687 00:42:17,210 --> 00:42:18,070 >> -Nose kazi? 688 00:42:18,070 --> 00:42:18,670 Sielewi. 689 00:42:18,670 --> 00:42:20,090 Yeye tayari alikuwa na pua kazi. 690 00:42:20,090 --> 00:42:21,910 Ilikuwa tamu kumi na sita sasa. 691 00:42:21,910 --> 00:42:22,140 >> -No. 692 00:42:22,140 --> 00:42:23,690 Ni nini unafikiri. 693 00:42:23,690 --> 00:42:25,420 Ni kiasi, mbaya zaidi. 694 00:42:25,420 --> 00:42:30,300 Kama huna nipe mchanganyiko ngao hewa, Dk Schlotkin mapenzi 695 00:42:30,300 --> 00:42:34,226 kutoa binti wako nyuma pua yake ya zamani. 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 Wapi unaweza kupata kwamba? 699 00:42:40,516 --> 00:42:41,440 >> -All haki. 700 00:42:41,440 --> 00:42:42,180 Mimi nitakuambia. 701 00:42:42,180 --> 00:42:43,381 Mimi nitakuambia. 702 00:42:43,381 --> 00:42:44,263 No, baba. 703 00:42:44,263 --> 00:42:45,590 No, lazima si. 704 00:42:45,590 --> 00:42:46,860 >> -You're haki, mpenzi wangu. 705 00:42:46,860 --> 00:42:48,450 Mimi itabidi miss pua yako mpya. 706 00:42:48,450 --> 00:42:52,090 Lakini mimi si kumwambia macho, bila kujali. 707 00:42:52,090 --> 00:42:53,680 >> -Very vizuri. 708 00:42:53,680 --> 00:42:55,685 Dr Schlotkin, kufanya mbaya yako. 709 00:42:55,685 --> 00:42:56,914 >> -My furaha. 710 00:42:56,914 --> 00:43:00,690 >> [Vifaa kikiwa kinanolewa] 711 00:43:00,690 --> 00:43:01,910 >> -No. 712 00:43:01,910 --> 00:43:02,520 Kusubiri. 713 00:43:02,520 --> 00:43:03,836 Kusubiri. 714 00:43:03,836 --> 00:43:05,300 Mimi nitakuambia. 715 00:43:05,300 --> 00:43:06,880 Mimi nitakuambia. 716 00:43:06,880 --> 00:43:09,130 >> -I alijua ingekuwa kazi. 717 00:43:09,130 --> 00:43:09,900 Sawa. 718 00:43:09,900 --> 00:43:12,850 Unipe. 719 00:43:12,850 --> 00:43:16,918 >> -Macho ni moja. 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 >> -Mbili. 723 00:43:19,358 --> 00:43:19,846 >> -Mbili. 724 00:43:19,846 --> 00:43:20,822 >> -Mbili. 725 00:43:20,822 --> 00:43:21,310 >> -Tatu. 726 00:43:21,310 --> 00:43:21,798 >> -Tatu. 727 00:43:21,798 --> 00:43:22,774 >> -Tatu. 728 00:43:22,774 --> 00:43:23,262 >> Nne. 729 00:43:23,262 --> 00:43:23,750 >> Nne. 730 00:43:23,750 --> 00:43:26,150 >> Nne. 731 00:43:26,150 --> 00:43:27,010 >> -Tano. 732 00:43:27,010 --> 00:43:27,670 >> -Tano. 733 00:43:27,670 --> 00:43:29,010 >> -Tano. 734 00:43:29,010 --> 00:43:34,770 >> -Basi macho ni moja, mbili, tatu, nne, tano. 735 00:43:34,770 --> 00:43:37,460 Hiyo ni stupidest mchanganyiko Mimi umewahi kusikia katika maisha yangu. 736 00:43:37,460 --> 00:43:39,710 Hiyo ni aina ya kitu idiot ingekuwa juu ya mizigo yake. 737 00:43:39,710 --> 00:43:42,000 >> -Asante, Mtukufu yako. 738 00:43:42,000 --> 00:43:43,530 >> -Je, nini? 739 00:43:43,530 --> 00:43:44,490 >> -I akageuka mbali ukuta. 740 00:43:44,490 --> 00:43:45,420 >> -No wewe wala. 741 00:43:45,420 --> 00:43:45,840 Wewe akageuka mbali movie nzima. 742 00:43:45,840 --> 00:43:46,930 >> -I lazima taabu kifungo sahihi. 743 00:43:46,930 --> 00:43:48,265 >> -Naam, kuweka nyuma. 744 00:43:48,265 --> 00:43:49,110 Kuweka movie nyuma. 745 00:43:49,110 --> 00:43:49,510 >> -Ndiyo, bwana. 746 00:43:49,510 --> 00:43:49,917 Ndiyo, bwana. 747 00:43:49,917 --> 00:43:50,324 >> -Twendeni, Arnold. 748 00:43:50,324 --> 00:43:51,140 Haya, na Gretchen. 749 00:43:51,140 --> 00:43:53,060 Bila shaka, unajua mimi utakuwa bado na muswada wewe kwa hili. 750 00:43:53,060 --> 00:43:53,440 >> [Mwisho video avspelning] 751 00:43:53,440 --> 00:43:54,690 >> Rob BODEN: All wa kulia. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Hivyo sasa kwamba tuko tayari kuzungumza juu ya usalama katika baadhi ya njia, nice 754 00:44:08,430 --> 00:44:16,050 kidogo movie bango, hivyo katika siku za karibuni siku, masuala haya na NSA 755 00:44:16,050 --> 00:44:17,300 ufuatiliaji kila kitu. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 Inaweza kuwa vigumu kuhisi kama wewe kuwa na aina fulani ya faragha katika 758 00:44:26,930 --> 00:44:34,540 dunia online, ingawa mimi naweza kusema wewe zaidi ya maelezo ya Prism. 759 00:44:34,540 --> 00:44:42,130 Hivyo kwa kusonga zaidi ya Prism, sisi siyo kwenda kuwa kuzungumza juu ya kwamba, sasa 760 00:44:42,130 --> 00:44:44,030 kufikiri juu ya Laptop yako. 761 00:44:44,030 --> 00:44:48,360 Hivyo hapa, nataka kubadili akaunti yangu halisi, 762 00:44:48,360 --> 00:44:50,370 na Penguin yangu kidogo. 763 00:44:50,370 --> 00:44:57,310 Hivyo nina kuweka password, na kwamba password ni chochote mimi nataka kuwa. 764 00:44:57,310 --> 00:45:02,430 >> Lakini kumbuka kwamba nini mimi magogo katika na, hivyo kuingia hii 765 00:45:02,430 --> 00:45:04,850 haraka, ni mpango wa baadhi. 766 00:45:04,850 --> 00:45:07,910 Ni baadhi ya mpango huo ilikuwa iliyoandikwa na baadhi mtu. 767 00:45:07,910 --> 00:45:13,250 Na hivyo, mtu kwamba, kama ni hasa malicious, hawakuweza 768 00:45:13,250 --> 00:45:17,780 wamesema, haki ya wote, hivyo kama password kwamba mimi kuingia ni sawa na yangu 769 00:45:17,780 --> 00:45:22,800 password halisi, au ni sawa kwa baadhi password maalum - 770 00:45:22,800 --> 00:45:25,550 David ni wa kushangaza au kitu - 771 00:45:25,550 --> 00:45:27,190 basi wasitoke 772 00:45:27,190 --> 00:45:33,760 Hivyo malicious programu inaweza kuwa na kupata yote ya Macs yako, au 773 00:45:33,760 --> 00:45:36,150 Windows, au kitu chochote. 774 00:45:36,150 --> 00:45:41,980 >> Hivyo kwamba ni si mengi ya wasiwasi, tangu, I mean, hii ni programu ya kuingia 775 00:45:41,980 --> 00:45:48,720 hiyo kusafirishwa kwa OS X, mamia au maelfu ya watu na 776 00:45:48,720 --> 00:45:50,020 upya kanuni hii. 777 00:45:50,020 --> 00:45:55,330 Na hivyo, kama, katika kanuni yako mahali fulani, unaweza kusema kama kamba hiki ni sawa na usawa 778 00:45:55,330 --> 00:45:58,860 David ni wa kushangaza, kuingia, basi mtu ni kwenda kuwa, kama, kusubiri. 779 00:45:58,860 --> 00:45:59,800 Hii siyo haki. 780 00:45:59,800 --> 00:46:01,790 Hii haipaswi kuwa hapa. 781 00:46:01,790 --> 00:46:06,650 Hivyo kwamba ni njia moja sisi kupata mambo kuwa aina ya salama. 782 00:46:06,650 --> 00:46:10,300 >> Lakini kufikiri juu ya hata programu kwamba kuandika. 783 00:46:10,300 --> 00:46:13,000 Hebu sema wewe aliandika mpango wa kuingia. 784 00:46:13,000 --> 00:46:20,440 Hivyo mpango huu kuingia kwamba aliandika, hivyo ni wazi, ni vizuri 785 00:46:20,440 --> 00:46:21,210 programu. 786 00:46:21,210 --> 00:46:25,610 Wewe si kwenda kuweka yoyote malicious kama x sawa na sawa na David ni wa kushangaza 787 00:46:25,610 --> 00:46:27,860 katika kanuni yako. 788 00:46:27,860 --> 00:46:31,930 Lakini mpango huu, je, kutumia kukusanya mpango huu? 789 00:46:31,930 --> 00:46:34,180 Kitu kama Clang. 790 00:46:34,180 --> 00:46:38,460 Basi nini kama mtu ambaye kilichotokea kwa kuandika Clang maalum cased katika Clang 791 00:46:38,460 --> 00:46:44,310 kitu kama, kama mimi kuandaa kuingia mpango, kisha kuingia kanuni hii 792 00:46:44,310 --> 00:46:49,720 katika mpango wa kuingia kwamba anasema, kama x sawa na sawa na David ni wa kushangaza? 793 00:46:49,720 --> 00:46:59,890 Hivyo bado kabisa, lakini sisi kuwa sawa kutoa hapa, ambapo Clang, vizuri, 794 00:46:59,890 --> 00:47:03,790 maelfu, kama si mamia ya maelfu ya watu, inaonekana katika Clang, na 795 00:47:03,790 --> 00:47:07,160 inaonekana katika mistari yake ya kanuni na akasema, yote ya haki, kuna kitu mbaya hapa. 796 00:47:07,160 --> 00:47:10,680 Ni wazi, hakuna mmoja anafanya kitu chochote hii mbaya. 797 00:47:10,680 --> 00:47:15,780 >> Lakini nini Clang yenyewe, kama, nini kama mimi kukusanya Clang? 798 00:47:15,780 --> 00:47:20,900 Nini kama mimi na baadhi compiler kwamba inaandaa Clang kwamba kuwekeza katika Clang 799 00:47:20,900 --> 00:47:25,610 hii hack maalum ambayo anasema, haki ya wote, wakati mimi kukusanya Clang, basi 800 00:47:25,610 --> 00:47:31,290 kutekelezwa mimi kupata lazima hasa kuangalia ndani ya mpango wa kuingia na kuingiza 801 00:47:31,290 --> 00:47:34,230 password hii, ni sawa na usawa Dave ni wa kushangaza? 802 00:47:34,230 --> 00:47:37,990 Ili kukumbuka kwamba compiler yako yenyewe mahitaji ya kukusanywa wakati fulani. 803 00:47:37,990 --> 00:47:42,810 Hivyo kama nini wewe kuchagua kukusanya Clang na, yenyewe ni malicious, basi 804 00:47:42,810 --> 00:47:45,580 inaweza kuwa Star zima njia ya chini line. 805 00:47:45,580 --> 00:47:49,630 >> Hivyo hapa, tuna Ken Thompson na Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Hivyo hii ni iconic photo. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie ni juu ya haki. 808 00:47:55,470 --> 00:47:58,740 Yeye ni kubwa - 809 00:47:58,740 --> 00:48:03,640 pretty much aliandika C. Hivyo unaweza kumshukuru kwa ajili ya darasa hili. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson juu ya kushoto. 811 00:48:04,840 --> 00:48:07,780 wawili kimsingi aliandika UNIX. 812 00:48:07,780 --> 00:48:10,140 Naam, walikuwa wachangiaji wakuu katika UNIX. 813 00:48:10,140 --> 00:48:11,310 Kulikuwa na baadhi ya watu wengine. 814 00:48:11,310 --> 00:48:16,240 Hivyo Ken Thompson, wakati fulani, atashinda tuzo ya Turing. 815 00:48:16,240 --> 00:48:20,860 Na tuzo Turing, nimekuwa daima kusikia ni inatazamwa njia hii, ni 816 00:48:20,860 --> 00:48:23,100 Tuzo ya Tuzo ya sayansi ya kompyuta. 817 00:48:23,100 --> 00:48:27,500 >> Hivyo katika tuzo Turing, ana kutoa hotuba yake ya kukubali. 818 00:48:27,500 --> 00:48:31,790 Na yeye anatoa hotuba hii maarufu sana sasa, iitwayo tafakari juu ya kuamini 819 00:48:31,790 --> 00:48:35,620 Trust, ambayo sisi kuwa na uhusiano kwa kwenye tovuti bila shaka. 820 00:48:35,620 --> 00:48:41,670 Na katika hotuba hii, anasema, haki ya wote, hivyo niliandika UNIX, na sasa yote ya 821 00:48:41,670 --> 00:48:43,320 ninyi watu kwa kutumia UNIX. 822 00:48:43,320 --> 00:48:46,960 Sasa, kumbuka leo kwamba Linux ni ukoo wa UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X moja kwa moja anatumia UNIX. 824 00:48:50,140 --> 00:48:53,810 Windows haina sana, lakini mengi ya mawazo walichukuliwa kutoka UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Basi unaendelea hadi hatua na anasema, yote ya haki, niliandika UNIX. 826 00:48:59,220 --> 00:49:03,940 Na hivyo tu guys kujua, mimi nina uwezo wa kuingia ndani ya kila 827 00:49:03,940 --> 00:49:05,590 mmoja wa kompyuta yako. 828 00:49:05,590 --> 00:49:14,280 Tangu mimi kuweka moja ya haya maalum kama x sawa na sawa na Ken Thomson ni wa kushangaza, 829 00:49:14,280 --> 00:49:16,350 basi mimi nina kuruhusiwa kuingia. 830 00:49:16,350 --> 00:49:18,370 Hivyo watu ni kama, vizuri, how'd unaweza kufanya hivyo? 831 00:49:18,370 --> 00:49:21,090 Sisi inaonekana katika mpango wa kuingia na kitu huko. 832 00:49:21,090 --> 00:49:24,700 Yeye ni kama, vizuri, mimi iliyopita compiler kuingia katika mpango wa kuingia 833 00:49:24,700 --> 00:49:30,490 ili programu kuingia sasa itakuwa na kwamba x sawa na sawa na Ken Thompson 834 00:49:30,490 --> 00:49:31,700 ni ya kutisha. 835 00:49:31,700 --> 00:49:33,120 >> Na wanasema, vizuri, kwamba si kweli. 836 00:49:33,120 --> 00:49:35,740 Sisi ni kuangalia compiler, na compiler hana mistari yoyote ya 837 00:49:35,740 --> 00:49:36,400 code kama hiyo. 838 00:49:36,400 --> 00:49:40,540 Yeye ni kama, OK, lakini nini ni kuandaa compiler na? 839 00:49:40,540 --> 00:49:44,810 Na wanafikiri, na yeye, kama, vizuri, Mimi nina aliyetoa compiler 840 00:49:44,810 --> 00:49:50,580 unatumia kukusanya compiler, hivyo wewe ni kuandaa compiler, kwamba 841 00:49:50,580 --> 00:49:56,390 yenyewe ni malicious, na mapenzi kuvunja mpango wa kuingia. 842 00:49:56,390 --> 00:49:59,360 Hivyo kimsingi, katika hatua hiyo, kuna hakuna njia unaweza kuangalia katika chanzo 843 00:49:59,360 --> 00:50:02,450 kanuni za mpango wa kuingia kuona nini ni makosa. 844 00:50:02,450 --> 00:50:04,220 Unaweza hata kuangalia katika chanzo code ya mkusanyaji 845 00:50:04,220 --> 00:50:06,790 kuona nini ni makosa. 846 00:50:06,790 --> 00:50:11,940 >> Ungependa haja ya kuangalia mashine code, binary halisi ya 847 00:50:11,940 --> 00:50:16,760 ulioandaliwa compiler kuona, kusubiri, hizi mstari wa kanuni lazima kuwa hapa. 848 00:50:16,760 --> 00:50:22,130 Lakini Ken Thompson alichukua hatua moja zaidi na kusema, vizuri, kuna 849 00:50:22,130 --> 00:50:25,980 programu hizi maalum kwamba kweli kukusaidia kusoma binary wa mipango, 850 00:50:25,980 --> 00:50:29,340 na hivyo kama mtu kutumika mpango kwamba kwa kusoma binary, wangeweza kuona haya 851 00:50:29,340 --> 00:50:30,490 mistari ya kificho. 852 00:50:30,490 --> 00:50:34,020 Yeye iliyopita programu hizo kwa kusema, kila haki, kama wewe ni kuangalia 853 00:50:34,020 --> 00:50:38,460 compiler, hawaonyeshi fulani seti ya binary. 854 00:50:38,460 --> 00:50:42,830 >> Hivyo basi unahitaji kuchukua hatua zaidi na kimsingi, ambayo inaweza kuwa na 855 00:50:42,830 --> 00:50:46,210 kuchukuliwa ngazi mbalimbali ya indirection, na wakati fulani, hakuna mtu kweli 856 00:50:46,210 --> 00:50:47,990 kwenda kuwa na kuangalia. 857 00:50:47,990 --> 00:50:52,590 Hivyo maadili ya hadithi ni, wewe ni si kwenda kuwa kuandika 858 00:50:52,590 --> 00:50:54,340 Clang katika darasa hili. 859 00:50:54,340 --> 00:50:57,020 Wewe ni kwenda kutumia kupanda Clang mengi katika darasa hili. 860 00:50:57,020 --> 00:51:00,490 Kwa ajili ya wote unajua, Clang ni malicious mpango huo ni sabotaging kila 861 00:51:00,490 --> 00:51:03,520 mpango moja ve milele ulioandaliwa. 862 00:51:03,520 --> 00:51:08,206 Na kuondoka juu ya kwamba ominous sana kumbuka, kuona juu ya Jumatano. 863 00:51:08,206 --> 00:51:10,030 >> [Makofi] 864 00:51:10,030 --> 00:51:12,935 >> SPIKA 2: Katika CS50 ijayo. 865 00:51:12,935 --> 00:51:14,580 >> SPIKA 3: Je, si kuthubutu kusema kwamba. 866 00:51:14,580 --> 00:51:15,930 Unaweza kufanya hivyo. 867 00:51:15,930 --> 00:51:19,440 Umefanya kosa hii kabla, unaweza kufanya hivyo leo, unaweza kufanya hivyo kesho. 868 00:51:19,440 --> 00:51:20,930 Tumekuwa kufanya hivyo kwa miaka. 869 00:51:20,930 --> 00:51:22,790 Tu kwenda huko na kufanya hivyo. 870 00:51:22,790 --> 00:51:24,310 Unaweza kufanya hivyo. 871 00:51:24,310 --> 00:51:26,102 >> [Music kucheza]