1 00:00:00,000 --> 00:00:02,760 [Powered by Google Translate] [WIKI 5] 2 00:00:02,760 --> 00:00:04,760 [David J. Malan, Chuo Kikuu cha Harvard] 3 00:00:04,760 --> 00:00:11,990 [Hii ni CS50.] [CS50.TV] 4 00:00:11,990 --> 00:00:17,780 [Mwanamke] Yeye amelala; kuhusu nini, mimi sijui. 5 00:00:17,780 --> 00:00:20,300 [Man] Basi nini sisi kujua? 6 00:00:20,300 --> 00:00:24,120 [Mwanamke] Hiyo saa 9:15, Ray Santoya ilikuwa kwa ATM. 7 00:00:24,120 --> 00:00:27,420 [Man] Hivyo swali ni, nini ilikuwa yeye kufanya saa 9:16? 8 00:00:27,420 --> 00:00:29,980 [Mwanamke] Risasi mm 9 katika kitu fulani. 9 00:00:29,980 --> 00:00:31,900 Labda aliona sniper. 10 00:00:31,900 --> 00:00:34,000 [Man] Au alikuwa anafanya kazi pamoja naye. 11 00:00:34,000 --> 00:00:36,330 [Mwanamke] Subiri. Nenda moja nyuma. 12 00:00:36,330 --> 00:00:38,330 [Man] Unaona nini? 13 00:00:38,330 --> 00:00:44,520 [♫ muziki Suspenseful ♫] 14 00:00:44,520 --> 00:00:48,320 [Mwanamke] Lete uso wake juu. Kamili screen. 15 00:00:48,320 --> 00:00:51,230 [Man] glasi wake. >> Kuna reflection. 16 00:00:51,230 --> 00:01:00,810 [♫ muziki Suspenseful ♫] 17 00:01:00,810 --> 00:01:03,580 [Man] Hiyo baseball Nuevita wa timu. Hiyo ni alama yao. 18 00:01:03,580 --> 00:01:07,790 [Mwanamke] Na yeye ni kuzungumza na mtu yeyote, s amevaa kwamba Jacket. 19 00:01:07,790 --> 00:01:13,730 >> [Daudi Malan] hiyo, hili ni CS50 wiki 5, na leo sisi uharibifu kidogo ya televisheni na sinema kwa ajili yenu. 20 00:01:13,730 --> 00:01:16,170 Hiyo wakati wowote wewe ni kuangalia show kama hii moja hapa, 21 00:01:16,170 --> 00:01:19,910 na Cops kusema "Je, wewe safi kuwa hadi?" au "Kuongeza," 22 00:01:19,910 --> 00:01:21,900 hakuna kuongeza katika ulimwengu wa kweli. 23 00:01:21,900 --> 00:01:25,220 Kwa kweli, nini wewe kweli ni kupata kitu kidogo kama hii. 24 00:01:25,220 --> 00:01:27,570 Nimekuwa anapigiwa moja ya picha wafanyakazi kutoka ukurasa. 25 00:01:27,570 --> 00:01:30,980 Hii ni programu inayoitwa Photoshop. Hii ni 1 ya Bowdens 2, 26 00:01:30,980 --> 00:01:36,300 1 ya 3 Bowdens kweli, leo, kwa sababu tuna Bi Bowden hapa pia, na Rob na Paulo. 27 00:01:36,300 --> 00:01:41,950 Lakini hapa ni Rob kwenye screen, na kama sisi zoom katika juu ya glint kwamba yeye daima alikuwa katika jicho lake, 28 00:01:41,950 --> 00:01:47,600 nini hasa kuona kwamba ni nini kuona ni nini kupata. 29 00:01:47,600 --> 00:01:51,690 Hii ni "kuimarishwa," hivyo "CSI" kuwa ni kidogo makosa. 30 00:01:51,690 --> 00:01:55,190 Kuna mmoja video nyingine, kama tunaweza kuchukua juu ya "CSI" tu kidogo tena. 31 00:01:55,190 --> 00:01:58,500 Hii moja ni maneno nice atatoa sasa kama unataka 32 00:01:58,500 --> 00:02:10,280 sauti za kiufundi kwa rafiki yako wakati, kwa kweli, wewe ni kusema kitu kabisa. 33 00:02:10,280 --> 00:02:12,970 >> [Man] Kwa muda wa wiki Nimekuwa kuchunguza mauaji Killer Cabby 34 00:02:12,970 --> 00:02:15,360 na fascination fulani morbid. 35 00:02:15,360 --> 00:02:17,160 [Mama # 1] Hii ni katika muda halisi. 36 00:02:17,160 --> 00:02:22,930 [Mama # 2] Mimi utaunda interface GUI kutumia Visual Basic, kuona kama naweza kufuatilia anwani ya IP. 37 00:02:22,930 --> 00:02:29,570 >> [Malan] Basi audio nje ya Sync kando, kujenga interface GUI kutumia Visual Basic 38 00:02:29,570 --> 00:02:31,820 kufuatilia anwani ya IP ni kamili nonsense. 39 00:02:31,820 --> 00:02:33,840 Siku hizi bila kutumia Visual Basic, 40 00:02:33,840 --> 00:02:38,920 hakuna haja kwa GUI, na anwani ya IP alikuwa mrefu kitaalam sahihi. 41 00:02:38,920 --> 00:02:41,730 Hivyo kuweka jicho nje kwa ajili ya haya, na moja ya favorites yangu: 42 00:02:41,730 --> 00:02:45,070 Hii moja ni kidogo zaidi arcane, kwa sababu unahitaji kujua lugha tofauti. 43 00:02:45,070 --> 00:02:47,860 Kuna lugha inayoitwa Lengo-C, ambayo ni superset ya C. 44 00:02:47,860 --> 00:02:51,960 Ambayo ina maana ya C plus baadhi ya vipengele ziada, kati yao kitu-oriented programu. 45 00:02:51,960 --> 00:02:55,070 Na hii ni lugha ya kwamba Apple ina umaarufu kwa ajili ya programu iOS. 46 00:02:55,070 --> 00:02:58,760 Na hivyo hapa ni picha ya video kutoka show tofauti kabisa, kutoka "Hesabu," 47 00:02:58,760 --> 00:03:02,450 kwamba kama kweli kuangalia kwa karibu juu ya TiVo yako na pause wakati wa kulia, 48 00:03:02,450 --> 00:03:07,700 utaona kwamba nini re kuangalia ni nini si kabisa kinachoelezwa. 49 00:03:07,700 --> 00:03:11,170 Na napenda kujaribu tofauti audio kontakt hapa na kuona kama hatuwezi 50 00:03:11,170 --> 00:03:13,780 kuweka audio katika Sync wakati huu. 51 00:03:13,780 --> 00:03:20,530 Mimi kukupa "Hesabu." 52 00:03:20,530 --> 00:03:23,240 >> [Man # 1] Ni ya 32-bit IPv4 anuani. 53 00:03:23,240 --> 00:03:38,930 [Man # 2] IP, hiyo ni ya internet. >> Private mtandao. Ni Anita binafsi ya mtandao. 54 00:03:38,930 --> 00:03:43,810 [Malan] Sawa. Hii ni Lengo-C, na ni kwa ajili ya kuchorea mpango baadhi mtoto wa, 55 00:03:43,810 --> 00:03:51,140 kama unaweza labda infer kutoka jina la kutofautiana huko. 56 00:03:51,140 --> 00:03:54,410 Hivyo hivyo, basi, ilikuwa "Hesabu." Hivyo leo na wiki hii sisi kuanzisha 57 00:03:54,410 --> 00:03:57,740 kidogo ya dunia ya forensics na muktadha katika matatizo kwa sababu hiyo. 58 00:03:57,740 --> 00:04:00,590 Leo itakuwa hotuba abbreviated kwa sababu kuna tukio maalum katika hapa 59 00:04:00,590 --> 00:04:05,530 baadaye, hivyo tutaweza kuchukua Peek, na tease wanafunzi wote na wazazi sawa leo 60 00:04:05,530 --> 00:04:07,420 na baadhi ya mambo ambayo ni juu ya upeo wa macho. 61 00:04:07,420 --> 00:04:12,240 Kati yao, kama ya Jumatatu, utakuwa chache wanafunzi zaidi. 62 00:04:12,240 --> 00:04:16,050 EdX, Harvard na mits mpya online mpango kwa wazi courseware 63 00:04:16,050 --> 00:04:19,120 na zaidi, ni uzinduzi juu ya chuo cha Harvard juu ya Jumatatu. 64 00:04:19,120 --> 00:04:21,490 Ambayo ina maana ya kuja Jumatatu utakuwa - kama ya kuhesabu mwisho, 65 00:04:21,490 --> 00:04:26,210 86,000 classmates ziada itakuwa kufuatia pamoja na mihadhara CS50 ya 66 00:04:26,210 --> 00:04:29,170 na sehemu na walkthroughs na seti tatizo. 67 00:04:29,170 --> 00:04:32,350 Na kama sehemu ya hii, utakuwa kuwa wanachama wa darasa uzinduzi wa 68 00:04:32,350 --> 00:04:35,090 CS50 na sasa CS50x. 69 00:04:35,090 --> 00:04:39,310 >> Kama sehemu ya hili, sasa, kutambua kwamba kutakuwa na baadhi upsides pia. 70 00:04:39,310 --> 00:04:43,790 Ili kupata tayari kwa ajili ya hii, kwa idadi kubwa ya wanafunzi, 71 00:04:43,790 --> 00:04:47,180 inatosha kusema kwamba hata kama tuna TFS 108 na CAS, 72 00:04:47,180 --> 00:04:50,790 si bora kabisa mwanafunzi / mwalimu uwiano mara moja sisi hit 80,000 wanafunzi wengine. 73 00:04:50,790 --> 00:04:52,850 Hivyo sisi siyo kwenda kuwa grading wengi tatizo seti manually. 74 00:04:52,850 --> 00:04:55,920 Hivyo ilianzisha wiki hii katika kuweka tatizo itakuwa CS50 Check, 75 00:04:55,920 --> 00:04:58,450 ambayo ni kwenda kuwa mstari amri shirika ndani ya appliance 76 00:04:58,450 --> 00:05:01,200 kwamba utapata mara moja update baadaye mwishoni mwa wiki hii, 77 00:05:01,200 --> 00:05:03,200 na wewe utakuwa na uwezo wa kukimbia amri, angalia 50, 78 00:05:03,200 --> 00:05:06,500 juu ya pset yako mwenyewe, na utapata baadhi ya maoni ya kama mpango wako ni 79 00:05:06,500 --> 00:05:11,160 sahihi au yasiyo sahihi kulingana na design mbalimbali specifikationer kwamba tuna zinazotolewa. 80 00:05:11,160 --> 00:05:13,580 Hivyo zaidi juu ya kuwa na vipimo tatizo kuweka na 81 00:05:13,580 --> 00:05:17,240 Classmates CS50x itakuwa kutumia hii kama vile. 82 00:05:17,240 --> 00:05:19,230 >> Hivyo tatizo kuweka 4 ni wote kuhusu forensics. 83 00:05:19,230 --> 00:05:21,940 Na kipande hii ulitokana na baadhi ya mambo halisi ya maisha, 84 00:05:21,940 --> 00:05:24,620 ambapo nilipokuwa katika shule ya kuhitimu, mimi interned kwa wakati na 85 00:05:24,620 --> 00:05:28,650 Ofisi Jina Middlesex ya Wilaya ya Mwanasheria kufanya kazi ya kuchunguza mauaji 86 00:05:28,650 --> 00:05:31,650 na mpelelezi wao risasi kuchunguza mauaji, na nini hii yalifikia 87 00:05:31,650 --> 00:05:35,260 ni, nadhani nilivyoeleza wiki iliyopita chache, ni Misa Jimbo polisi au watu wengine 88 00:05:35,260 --> 00:05:39,000 ingekuwa kuja katika, wangeweza kuacha mbali mambo kama anatoa ngumu na CD na disks floppy 89 00:05:39,000 --> 00:05:42,340 na kama, na kisha lengo la ofisi forensics ilikuwa ili kuhakikisha kama 90 00:05:42,340 --> 00:05:44,600 kulikuwa au hakuwa na ushahidi wa aina fulani. 91 00:05:44,600 --> 00:05:48,010 Hii ilikuwa Maalum Uchunguzi Unit, hivyo ilikuwa nyeupe-collar uhalifu, 92 00:05:48,010 --> 00:05:52,350 ilikuwa zaidi kumsumbua aina ya uhalifu, 93 00:05:52,350 --> 00:05:55,990 chochote kuwashirikisha baadhi ya aina ya vyombo vya habari digital; zinageuka kuwa si kwamba watu wengi 94 00:05:55,990 --> 00:05:59,370 kuandika barua pepe akisema "Mimi alifanya hivyo." 95 00:05:59,370 --> 00:06:03,290 Hivyo mara nyingi kabisa upekuzi forensics hawakufika matunda yote sana, 96 00:06:03,290 --> 00:06:05,850 lakini wakati mwingine watu bila kuandika barua pepe kama hizo. 97 00:06:05,850 --> 00:06:08,490 Hivyo wakati mwingine juhudi walipewa zawadi. 98 00:06:08,490 --> 00:06:14,420 >> Lakini kuwaongoza hadi pset hii ya kuchunguza mauaji, tutaweza kuwa kuanzisha katika pset 4 kidogo ya graphics. 99 00:06:14,420 --> 00:06:18,260 Hivyo pengine kuchukua mambo haya kwa nafasi, JPEGs GIFs, na kama siku hizi, 100 00:06:18,260 --> 00:06:21,640 lakini kama kweli kufikiri juu yake, sanamu, kiasi kama uso wa Rob, 101 00:06:21,640 --> 00:06:24,430 inaweza kuwa inatokana kama mlolongo wa dots, au Ukubwa. 102 00:06:24,430 --> 00:06:26,680 Sasa, katika kesi ya uso wa Rob, kuna kila aina ya rangi, 103 00:06:26,680 --> 00:06:29,940 na sisi kuanza kuona dots mtu binafsi, otherwide inayojulikana kama, saizi ya 104 00:06:29,940 --> 00:06:31,610 mara moja tulianza zoom in 105 00:06:31,610 --> 00:06:35,590 Lakini kama sisi kurahisisha dunia kidogo, na kusema tu kwamba hii hapa ni Rob 106 00:06:35,590 --> 00:06:40,560 katika nyeusi na nyeupe, vizuri, kuwakilisha nyeusi na nyeupe tunaweza tu kutumia binary. 107 00:06:40,560 --> 00:06:44,960 Na kama sisi ni kwenda kutumia binary, 1 au 0, tunaweza kueleza picha hii sawa 108 00:06:44,960 --> 00:06:51,970 ya uso wa Rob smiling na muundo huu wa bits: 11000011 inawakilisha 109 00:06:51,970 --> 00:06:55,160 nyeupe, nyeupe, nyeusi, nyeusi, nyeusi, nyeusi, nyeupe nyeupe. 110 00:06:55,160 --> 00:06:59,290 Na hivyo si leap kubwa, basi, kuanza kuzungumza juu ya picha colourful. 111 00:06:59,290 --> 00:07:01,920 Mambo ambayo unaweza kuiona kwenye Facebook au kuchukua na kamera ya digital, 112 00:07:01,920 --> 00:07:04,730 lakini, kwa hakika, linapokuja rangi, unahitaji bits zaidi. 113 00:07:04,730 --> 00:07:08,470 Na kawaida kabisa katika ulimwengu wa picha ni kutumia si 1-bit Michezo, 114 00:07:08,470 --> 00:07:12,730 kama hii unaonyesha, lakini 24-bit Michezo, ambapo kwa kweli kupata mamilioni ya rangi. 115 00:07:12,730 --> 00:07:15,430 Hivyo kama katika kesi wakati sisi zoomed katika juu ya jicho Rob wa, 116 00:07:15,430 --> 00:07:19,270 kwamba ilikuwa na idadi yoyote ya mamilioni ya uwezekano tofauti colorful. 117 00:07:19,270 --> 00:07:22,260 >> Hivyo tutaweza kuanzisha hii katika tatizo kuweka 4 kama vile katika walkthrough, 118 00:07:22,260 --> 00:07:27,050 ambayo itakuwa leo saa 3:30 badala ya 2:30 kawaida kwa sababu ya hotuba ya Ijumaa hapa. 119 00:07:27,050 --> 00:07:29,930 Lakini video itakuwa online, kama kawaida, kesho. 120 00:07:29,930 --> 00:07:31,880 Tutaweza pia kuanzisha wewe format faili nyingine. 121 00:07:31,880 --> 00:07:34,150 Hivyo hii ni makusudi maana ya kuangalia vitisho mara ya kwanza, 122 00:07:34,150 --> 00:07:38,980 lakini hii ni baadhi tu nyaraka kwa ajili ya struct C. 123 00:07:38,980 --> 00:07:42,280 Ni zinageuka kuwa Microsoft, miaka iliyopita, umesaidia wanatangaza hii format, 124 00:07:42,280 --> 00:07:46,630 kuitwa bitmap faili format, BMP, na hii ilikuwa super-rahisi, 125 00:07:46,630 --> 00:07:50,390 colourful graphical faili format ambayo ilitumika kwa muda kabisa 126 00:07:50,390 --> 00:07:53,640 na wakati mwingine bado kwa wallpapers kwenye kopyuta. 127 00:07:53,640 --> 00:07:57,410 Kama unafikiri nyuma kwa Windows XP na milima rolling na anga ya bluu, 128 00:07:57,410 --> 00:08:00,660 kwamba ilikuwa kawaida BMP, au picha bitmap, na bitmaps 129 00:08:00,660 --> 00:08:03,340 ni furaha kwa ajili yetu kwa sababu wana kidogo zaidi utata. 130 00:08:03,340 --> 00:08:05,640 Ni kabisa kama rahisi kama hii ya gridi ya 0 na 1 ya; 131 00:08:05,640 --> 00:08:10,680 badala yake, una vitu kama header mwanzoni ya faili. 132 00:08:10,680 --> 00:08:15,520 Hivyo kwa maneno mengine, ndani ya faili bmp. Ni rundo zima la wa 0 na 1 ya, 133 00:08:15,520 --> 00:08:18,070 lakini kuna baadhi ya ziada 0 na 1 ya huko. 134 00:08:18,070 --> 00:08:21,450 Na zinageuka kuwa kile ambacho tumekuwa pengine kuchukuliwa kwa nafasi kwa miaka, 135 00:08:21,450 --> 00:08:27,040 file format kama. doc xls au. au. mp3 au. mp4, 136 00:08:27,040 --> 00:08:29,910 chochote format faili kwamba wewe ni ukoo na. 137 00:08:29,910 --> 00:08:31,900 Naam, ni nini hata maana ya kuwa format faili? 138 00:08:31,900 --> 00:08:35,740 Kwa sababu mwisho wa siku, wote wa files haya sisi kutumia kuwa tu 0 na 1 ya 139 00:08:35,740 --> 00:08:39,950 na labda wale 0 na 1 ya kuwakilisha, b, c, kupitia ASCII au kama, 140 00:08:39,950 --> 00:08:42,030 lakini kwa njia ya mwisho wa siku, ni tu 0 na 1 ya. 141 00:08:42,030 --> 00:08:45,300 >> Hivyo binadamu tu mara kwa mara ya kuamua mzulia faili mpya format 142 00:08:45,300 --> 00:08:49,420 ambapo wao standardize nini mwelekeo wa bits kwa kweli maana. 143 00:08:49,420 --> 00:08:52,790 Na katika kesi hii hapa, folks ambao iliyoundwa bitmap faili format 144 00:08:52,790 --> 00:08:58,260 alisema kuwa katika Byte sana kwanza katika faili bitmap, kama ulionyehsa kwa kukabiliana 0, kuna, 145 00:08:58,260 --> 00:09:02,320 kuna kwenda kuwa baadhi isiyoeleweka kirahisi aitwaye variable kuitwa bfType, 146 00:09:02,320 --> 00:09:06,510 ambayo tu anasimama kwa ajili ya aina bitmap faili; ni aina gani ya faili bitmap hii ni. 147 00:09:06,510 --> 00:09:10,780 Unaweza infer, pengine, kutoka safu ya pili kwamba kukabiliana 2, Byte idadi 2, 148 00:09:10,780 --> 00:09:15,980 ina mfano wa Mungu na 0 1 kwamba inawakilisha nini? 149 00:09:15,980 --> 00:09:18,320 ukubwa wa kitu fulani, na unaendelea kutoka huko. 150 00:09:18,320 --> 00:09:20,660 Hivyo katika tatizo kuweka 4, wewe utakuwa kutembea kwa njia ya baadhi ya mambo haya. 151 00:09:20,660 --> 00:09:24,480 >> Sisi si kuishia kujali juu ya wote, lakini taarifa ni kuanza kupata kuvutia 152 00:09:24,480 --> 00:09:30,780 kuzunguka mstari au Byte 54, rgbtBlue, Green na Red. 153 00:09:30,780 --> 00:09:35,280 Kama ve milele habari kifupi RGB, nyekundu kijani bluu, hii ni kumbukumbu ya kwamba. 154 00:09:35,280 --> 00:09:37,840 Kwa sababu ni zamu nje unaweza rangi rangi zote za upinde wa mvua 155 00:09:37,840 --> 00:09:41,580 na baadhi ya macho ya nyekundu na bluu na kijani. 156 00:09:41,580 --> 00:09:46,560 Na, kwa kweli, wazazi katika chumba wapate kukumbuka baadhi ya madomo mwanzo. 157 00:09:46,560 --> 00:09:49,360 Siku hizi, wewe tu kuona 1 mwanga mkali kuja nje ya Lens. 158 00:09:49,360 --> 00:09:52,870 Lakini nyuma katika siku, wewe alikuwa Lens nyekundu, Lens bluu, na Lens kijani 159 00:09:52,870 --> 00:09:56,620 na pamoja nao kwa lengo la screen na sumu picha colourful. 160 00:09:56,620 --> 00:09:59,590 Na mara nyingi kabisa katikati ya shule na shule za sekondari ingekuwa lenses wale 161 00:09:59,590 --> 00:10:02,680 milele-ili-kidogo potovu, hivyo walikuwa aina ya kuona picha mara mbili au tatu, 162 00:10:02,680 --> 00:10:07,500 lakini kwamba alikuwa na wazo. You alikuwa nyekundu na kijani na bluu mwanga uchoraji picha. 163 00:10:07,500 --> 00:10:09,570 Na kanuni hiyo ni kutumika katika kompyuta. 164 00:10:09,570 --> 00:10:12,000 >> Hivyo kati ya changamoto, basi, kwa ajili yenu katika tatizo kuweka 4 165 00:10:12,000 --> 00:10:16,080 itakuwa ni ya mambo kadhaa, moja ni kweli resize picha. 166 00:10:16,080 --> 00:10:18,050 Kuchukua katika muundo wa wa 0 na 1 ya, 167 00:10:18,050 --> 00:10:22,840 kufikiri ambayo chunks ya ya 0 na 1 ya kuwakilisha nini katika muundo kama hii, 168 00:10:22,840 --> 00:10:26,800 na kisha kufikiri ni jinsi gani ya kuiga saizi: boundin, blues, wiki 169 00:10:26,800 --> 00:10:32,460 ndani ili wakati picha inaonekana kama hii ya awali, ili kuangalia kama hii badala baada ya hapo. 170 00:10:32,460 --> 00:10:35,590 Miongoni mwa changamoto nyingine, pia, ni kwenda kuwa kuwa wewe utakuwa mitupu 171 00:10:35,590 --> 00:10:38,900 picha ya kuchunguza mauaji ya faili halisi kutoka kamera ya digital 172 00:10:38,900 --> 00:10:42,410 na juu ya kamera kwamba, mara moja juu ya muda, walikuwa rundo zima la photos. 173 00:10:42,410 --> 00:10:47,030 Tatizo ni, sisi ajali erased au alikuwa image kupotoshwa kwa namna fulani. 174 00:10:47,030 --> 00:10:51,040 Mambo mabaya kutokea kwa kamera ya digital, na hivyo sisi haraka kunakiliwa yote ya ya 0 na 1 ya 175 00:10:51,040 --> 00:10:55,410 mbali ya kwamba kadi kwa ajili yenu, kuokolewa kwao wote katika faili 1 kubwa, na kisha tutaweza mkono wao kwa wewe 176 00:10:55,410 --> 00:11:00,000 katika tatizo kuweka 4 ili uweze kuandika mpango katika C na ambayo kupona 177 00:11:00,000 --> 00:11:02,660 wote wa JPEGs hizo, walau. 178 00:11:02,660 --> 00:11:06,280 Na zinageuka JPEGs kwamba, ingawa wao ni kiasi fulani ya muundo tata ya SVG, 179 00:11:06,280 --> 00:11:09,580 wao uko magumu zaidi kuliko uso hii smiling hapa. 180 00:11:09,580 --> 00:11:14,320 Ni zinageuka kuwa kila JPEG kuanza na mwelekeo huo wa wa 0 na 1 ya. 181 00:11:14,320 --> 00:11:18,820 Hivyo kwa kutumia kitanzi wakati au kwa kitanzi au sawa, 182 00:11:18,820 --> 00:11:22,350 unaweza iterate juu ya wote 0 na 1 katika picha hii ya kuchunguza mauaji 183 00:11:22,350 --> 00:11:26,670 na kila wakati unaweza kuona mfano maalum ambacho defined katika vipimo kuweka tatizo la, 184 00:11:26,670 --> 00:11:29,770 unaweza kudhani, 'Oh, hapa ni pamoja na uwezekano juu sana, 185 00:11:29,770 --> 00:11:33,520 mwanzo wa JPEG, 'na kwa haraka kama wewe kupata mfano huo, 186 00:11:33,520 --> 00:11:36,050 baadhi idadi ya ka au kilobytes au megabaiti baadaye, 187 00:11:36,050 --> 00:11:40,550 unaweza kudhani, 'Ooh! Hapa ni JPEG pili, picha mimi alichukua baada ya moja ya kwanza. 188 00:11:40,550 --> 00:11:44,720 Hebu kuacha kusoma kwamba faili kwanza, kuanza kuandika hii moja mpya. ' 189 00:11:44,720 --> 00:11:49,980 Na pato la mpango wako kwa pset 4 ni kwenda kuwa kama wengi kama 50 JPEGs. 190 00:11:49,980 --> 00:11:52,400 Na kama siyo 50 JPEGs, una kidogo ya kitanzi. 191 00:11:52,400 --> 00:11:55,580 Kama una idadi ya usio wa JPEGs, una kitanzi usio. 192 00:11:55,580 --> 00:11:58,280 Hivyo kwamba, pia, itakuwa kesi ya kawaida kabisa. 193 00:11:58,280 --> 00:12:00,280 Hiyo ni nini juu ya upeo wa macho. 194 00:12:00,280 --> 00:12:03,740 >> Maswali 0, nyuma yetu. Kutambua, kwa email yangu, kwamba invariably kuna folks 195 00:12:03,740 --> 00:12:06,820 wote ambao ni furaha, ni aina ya neutral, na kusikitisha kuzunguka Jaribio 0 muda. 196 00:12:06,820 --> 00:12:10,160 Na tafadhali kufikia nje kwangu, TFS kichwa, Zamyla, TF yako mwenyewe 197 00:12:10,160 --> 00:12:14,120 au moja ya CAS kwa kuwa wewe kujua kama ungependa kujadili jinsi mambo akaenda. 198 00:12:14,120 --> 00:12:16,460 >> Hivyo kumvutia wazazi hapa katika chumba, 199 00:12:16,460 --> 00:12:23,990 kile ni maktaba CS50? Kazi nzuri. 200 00:12:23,990 --> 00:12:32,280 Nini maktaba CS50? Yeah? [Mwanafunzi majibu, unintelligible] 201 00:12:32,280 --> 00:12:35,730 >> Okay, nzuri. Hivyo ni kuweka prewritten ya kificho kwamba sisi, wafanyakazi, aliandika, 202 00:12:35,730 --> 00:12:38,460 sisi kutoa na wewe, kwa kutoa functionalities baadhi ya kawaida. 203 00:12:38,460 --> 00:12:42,290 Stuff like kupata yangu string; kupata yangu int, wote wa kazi ambayo yameorodheshwa hapa. 204 00:12:42,290 --> 00:12:45,260 Kuanzia sasa, sisi kuanza kwa kweli kuchukua magurudumu haya mafunzo mbali. 205 00:12:45,260 --> 00:12:48,230 Hivyo sisi ni kwenda kuanza kuchukua "kamba" kutoka kwenu, 206 00:12:48,230 --> 00:12:52,790 ambayo, wanakumbuka, mara tu kisawe kwa ajili ya aina yale halisi data? Char *. 207 00:12:52,790 --> 00:12:57,020 Hivyo kwa wazazi, kwamba labda - kwamba ni nzuri, hivyo * Char tutaweza kuanza kuona 208 00:12:57,020 --> 00:13:00,810 juu ya screen wote zaidi kama sisi kuondoa "kamba" kutoka msamiati wetu, 209 00:13:00,810 --> 00:13:02,760 angalau linapokuja kweli kuandika code. 210 00:13:02,760 --> 00:13:06,240 Vile vile, tutaweza kuacha kutumia baadhi ya kazi hizi kama mengi, 211 00:13:06,240 --> 00:13:08,390 kwa sababu mipango yetu ni kwenda kupata kisasa zaidi 212 00:13:08,390 --> 00:13:11,370 badala tu ya kuandika mipango kwamba kukaa pale na blinking haraka, 213 00:13:11,370 --> 00:13:13,580 kusubiri kwa mtumiaji na aina kitu in 214 00:13:13,580 --> 00:13:15,220 Utapata pembejeo yako kutoka mahali pengine. 215 00:13:15,220 --> 00:13:18,720 Kwa mfano, utapata yao kutoka katika mfululizo wa bits kwenye gari mitaa ngumu. 216 00:13:18,720 --> 00:13:23,340 Wewe utakuwa badala kupata yao katika siku zijazo kutoka uhusiano wa mtandao, baadhi tovuti mahali fulani. 217 00:13:23,340 --> 00:13:27,460 Basi hebu peel safu nyuma hii kwa mara ya kwanza, na kuvuta up appliance CS50 218 00:13:27,460 --> 00:13:32,300 na faili hii inaitwa CS50.h, ambayo wewe tumekuwa mkali ikiwa ni pamoja na kwa wiki. 219 00:13:32,300 --> 00:13:34,380 >> Lakini hebu kweli kuona nini ndani ya hii. 220 00:13:34,380 --> 00:13:38,250 Hivyo juu ya faili katika bluu ni tu rundo zima la maoni, 221 00:13:38,250 --> 00:13:41,340 udhamini habari na leseni. Hii ni aina ya dhana ya kawaida 222 00:13:41,340 --> 00:13:44,600 katika programu, kwa sababu mengi ya programu siku hizi ni nini inayoitwa "chanzo wazi," 223 00:13:44,600 --> 00:13:46,940 ambayo ina maana kwamba mtu ameandika code 224 00:13:46,940 --> 00:13:50,060 na alifanya hivyo kwa uhuru zaidi, si tu kukimbia na kutumia, 225 00:13:50,060 --> 00:13:53,660 lakini kwa kweli kusoma na kubadilisha na kuunganisha katika kazi yako mwenyewe. 226 00:13:53,660 --> 00:13:55,790 Hivyo kwamba ni nini tumekuwa kutumia, wazi chanzo programu, 227 00:13:55,790 --> 00:13:58,030 angalau katika fomu ndogo sana. 228 00:13:58,030 --> 00:14:01,860 Kama mimi kitabu chini cha maoni, ingawa, tutaweza kuanza kuona baadhi ya mambo zaidi ya ukoo. 229 00:14:01,860 --> 00:14:08,090 Hivyo taarifa juu hapa, kwamba faili CS50.h ni pamoja na rundo zima la files header. 230 00:14:08,090 --> 00:14:11,160 Sasa, wengi wa hawa hatujaona kabla, lakini moja ni 231 00:14:11,160 --> 00:14:15,640 zinazojulikana, ambayo ya hizi sisi kuonekana, angalau kwa ufupi, hivi sasa? 232 00:14:15,640 --> 00:14:18,720 Yeah, kiwango maktaba. Stdlib.h ina malloc, 233 00:14:18,720 --> 00:14:21,590 hivyo mara moja tulipoanza kuzungumza kuhusu mgao nguvu kumbukumbu, 234 00:14:21,590 --> 00:14:24,960 ambayo tutaweza kurudi wiki ijayo kama vizuri, sisi ilianza ikiwa ni pamoja na faili hilo. 235 00:14:24,960 --> 00:14:29,660 Ni zinageuka kuwa bool na kweli na uongo si kweli zipo katika C, per se, 236 00:14:29,660 --> 00:14:32,460 isipokuwa wewe ni pamoja na faili hii hapa. 237 00:14:32,460 --> 00:14:35,770 Hivyo tuna, kwa wiki, ikiwa ni pamoja na kiwango wamekuwa bool.h 238 00:14:35,770 --> 00:14:39,020 hivyo kwamba unaweza kutumia dhana ya bool, kweli au uongo. 239 00:14:39,020 --> 00:14:41,830 Bila hili, ungependa kuwa na aina ya bandia na kutumia int 240 00:14:41,830 --> 00:14:45,920 na tu kiholela kudhani kwamba 0 ni uongo na 1 ni kweli. 241 00:14:45,920 --> 00:14:49,980 >> Sasa, kama sisi kitabu chini zaidi, hapa ni ufafanuzi yetu ya kamba. 242 00:14:49,980 --> 00:14:54,820 Ni zinageuka, kama tumekuwa alisema kabla, kwamba ambapo * hii ni kweli haina jambo. 243 00:14:54,820 --> 00:14:56,750 Unaweza hata kuwa na nafasi pande zote. 244 00:14:56,750 --> 00:15:01,550 Sisi, hii muhula, wamekuwa kukuza kama hii kufanya wazi kwamba * ina nini na aina. 245 00:15:01,550 --> 00:15:05,370 Lakini kutambua, kama kawaida, kama siyo kidogo zaidi ya kawaida, ni kuweka huko 246 00:15:05,370 --> 00:15:07,480 lakini functionally ni kitu kimoja. 247 00:15:07,480 --> 00:15:11,070 Lakini sasa, kama sisi kusoma chini zaidi, hebu kuchukua kuangalia kusema, GetInt, 248 00:15:11,070 --> 00:15:15,350 kwa sababu sisi kutumika kwamba, pengine, kabla ya kitu kingine chochote hii muhula. 249 00:15:15,350 --> 00:15:19,620 Na hapa ni GetInt. Hii ni nini? 250 00:15:19,620 --> 00:15:24,650 Hii ni mfano. Hivyo mara nyingi, tuna kuweka prototypes katika vilele vya wetu c files., 251 00:15:24,650 --> 00:15:28,190 lakini unaweza pia kuweka prototypes katika files header,. files h, 252 00:15:28,190 --> 00:15:32,110 kama hii moja hapa, hivyo kwamba wakati wewe kuandika baadhi ya majukumu 253 00:15:32,110 --> 00:15:36,790 kwamba unataka watu wengine kuwa na uwezo wa kutumia, ambayo ni hasa kesi na maktaba CS50, 254 00:15:36,790 --> 00:15:40,900 wewe si tu kutekeleza majukumu yako katika kitu kama CS50.c, 255 00:15:40,900 --> 00:15:46,720 wewe pia kuweka prototypes si wakati juu ya faili kwamba, lakini wakati juu ya faili header, 256 00:15:46,720 --> 00:15:50,810 basi kwamba faili header ni nini marafiki na wafanyakazi wenzake ni pamoja na, 257 00:15:50,810 --> 00:15:52,800 na mkali pamoja katika kanuni zao wenyewe. 258 00:15:52,800 --> 00:15:55,440 Hivyo muda wote huu tumekuwa pamoja wote prototypes hizi 259 00:15:55,440 --> 00:15:59,870 ufanisi katika juu ya faili yako, lakini kwa njia ya hii ni pamoja na utaratibu mkali 260 00:15:59,870 --> 00:16:03,320 kwamba kimsingi nakala na pastes faili hii katika yako mwenyewe. 261 00:16:03,320 --> 00:16:06,400 Sasa, hapa ni baadhi ya nyaraka uungwana kina. 262 00:16:06,400 --> 00:16:08,880 >> Tumekuwa pretty much kuchukuliwa kwa nafasi ya kuwa GetInt anapata int, 263 00:16:08,880 --> 00:16:10,740 lakini zinageuka kuna kesi kona baadhi, haki? 264 00:16:10,740 --> 00:16:14,320 Nini kama mtumiaji aina katika idadi hiyo ni njia kubwa mno? 265 00:16:14,320 --> 00:16:17,350 quintillion, kwamba tu hawezi fit ndani ya int? 266 00:16:17,350 --> 00:16:21,180 Je, ni tabia yanayotarajiwa? Naam, walau, ni kutabirika. 267 00:16:21,180 --> 00:16:23,460 Hivyo katika kesi hii, kama kweli kusoma magazeti faini, 268 00:16:23,460 --> 00:16:27,850 utaona kwamba kama mstari hauwezi kusoma, hii INT_MAX atakaporudi. 269 00:16:27,850 --> 00:16:30,800 Sisi sijawahi kuongelea kuhusu hili, lakini kwa kuzingatia mtaji wake, 270 00:16:30,800 --> 00:16:33,030 ni nini, pengine? 271 00:16:33,030 --> 00:16:36,610 Ni mara kwa mara, hivyo ni baadhi ya mara kwa mara maalum kwamba pengine alitangaza 272 00:16:36,610 --> 00:16:39,460 katika moja ya files wale header kwamba ni juu ya juu katika faili, 273 00:16:39,460 --> 00:16:43,400 na INT_MAX pengine ni kitu kama, ukali, bilioni 2. 274 00:16:43,400 --> 00:16:48,160 wazo kuwa kuwa sababu tunahitaji namna fulani yanamaanisha kwamba kitu potoka, 275 00:16:48,160 --> 00:16:51,090 sisi, ndiyo, na idadi bilioni 4 katika ovyo yetu, 276 00:16:51,090 --> 00:16:53,980 hasi juu ya bilioni 2 hadi bilioni 2, kutoa au kuchukua. 277 00:16:53,980 --> 00:16:58,030 Naam, ni ya kawaida katika programu hii ni wewe kuiba moja tu ya wale idadi. 278 00:16:58,030 --> 00:17:02,250 Labda 0, labda bilioni 2, labda hasi bilioni 2. 279 00:17:02,250 --> 00:17:06,720 Hivyo wewe kutumia moja ya maadili yako iwezekanavyo ili uweze kufanya kwa dunia 280 00:17:06,720 --> 00:17:10,089 kwamba kama kitu fulani kitaenda vibaya, nitarudi thamani hii super-kubwa. 281 00:17:10,089 --> 00:17:13,329 Lakini hutaki mtumiaji kuandika kitu cryptic kama "2, 3, 4 ..." 282 00:17:13,329 --> 00:17:17,079 ya idadi kubwa kweli kweli, ambapo badala generalize kama mara kwa mara. 283 00:17:17,079 --> 00:17:19,380 Hivyo kweli, kama wewe walikuwa kuwa anal majuma machache yaliyopita, 284 00:17:19,380 --> 00:17:23,800 wakati wowote wewe piga GetInt, unapaswa kuwa na hali ya kuangalia kama. 285 00:17:23,800 --> 00:17:27,109 Je aina user katika INT_MAX, au zaidi hasa, 286 00:17:27,109 --> 00:17:29,900 alifanya GetInt kurudi INT_MAX? Kwa sababu kama ni hivyo, 287 00:17:29,900 --> 00:17:35,140 kwamba kwa kweli ina maana hawakuwa unapoandika; kitu potoka katika kesi hii. 288 00:17:35,140 --> 00:17:38,970 Hivyo hii ni nini ujumla inayojulikana kama thamani "sentinel", ambayo ina maana maalum. 289 00:17:38,970 --> 00:17:41,020 >> Naam, hebu sasa kurejea katika c. Files. 290 00:17:41,020 --> 00:17:44,500 Faili C limekuwepo katika appliance kwa muda fulani, 291 00:17:44,500 --> 00:17:47,540 na, kwa kweli, appliance ina precompiled kwa wewe 292 00:17:47,540 --> 00:17:49,720 ndani ya jambo kwamba sisi kuitwa "kitu kificho," 293 00:17:49,720 --> 00:17:52,940 lakini ni tu Haijalishi wewe ambapo ni kwa sababu mfumo anajua, 294 00:17:52,940 --> 00:17:54,780 katika kesi hii, ambako ni, appliance. 295 00:17:54,780 --> 00:18:00,620 Lakini hebu kitabu chini sasa kwa GetInt, na kuona jinsi GetInt imekuwa ikifanya kazi muda wote huu. 296 00:18:00,620 --> 00:18:02,380 Hivyo hapa tuna sawa maoni kutoka kabla. 297 00:18:02,380 --> 00:18:04,930 Hebu kuvuta tu sehemu ya kificho, 298 00:18:04,930 --> 00:18:07,410 na kile sisi kwa GetInt ni zifuatazo. 299 00:18:07,410 --> 00:18:12,770 Inachukua hakuna pembejeo na kuirudisha int, wakati (wa kweli), hivyo tuna makusudi usio kitanzi 300 00:18:12,770 --> 00:18:16,560 lakini, labda, tutaweza kuvunja nje ya hii kwa namna fulani, au kurudi kutoka ndani ya hii. 301 00:18:16,560 --> 00:18:19,890 Basi hebu angalia jinsi hii matendo. Naam, sisi wanaonekana kuwa na kutumia GetString 302 00:18:19,890 --> 00:18:22,550 katika mstari huu wa kwanza ndani ya kitanzi, 166. 303 00:18:22,550 --> 00:18:25,320 Hii sasa ni mazoezi mazuri kwa sababu chini ya mazingira gani 304 00:18:25,320 --> 00:18:30,820 inaweza GetString kurudi hii maalum Keyword, null? 305 00:18:30,820 --> 00:18:38,460 Kama kitu fulani kitaenda vibaya. Je, inaweza kwenda vibaya wakati wewe piga kitu kama GetString? 306 00:18:38,460 --> 00:18:42,550 Yeah? [Mwanafunzi jibu, unintelligible] >> Yeah. Hivyo labda malloc inashindwa. 307 00:18:42,550 --> 00:18:45,310 Mahali fulani chini GetString Hood wito malloc, 308 00:18:45,310 --> 00:18:48,210 ambao unagawa kumbukumbu, ambayo inakuwezesha kuhifadhi kompyuta 309 00:18:48,210 --> 00:18:50,950 yote ya wahusika kwamba mtumiaji aina katika keyboard. 310 00:18:50,950 --> 00:18:53,270 Na kudhani mtumiaji alikuwa na mengi nzima ya muda bure 311 00:18:53,270 --> 00:18:56,470 na typed zaidi, kwa mfano, zaidi ya herufi bilioni 2. 312 00:18:56,470 --> 00:18:59,600 Zaidi ya wahusika kuliko kompyuta hata ina RAM. 313 00:18:59,600 --> 00:19:02,350 Naam, GetString ina kuwa na uwezo kwa ishara ya kwamba na wewe, 314 00:19:02,350 --> 00:19:05,650 hata kama hii ni super, super kawaida kona kesi. 315 00:19:05,650 --> 00:19:08,490 Ina kwa namna fulani kuwa na uwezo wa kushughulikia suala hili, na hivyo GetString, 316 00:19:08,490 --> 00:19:11,850 kama sisi kurudi nyuma na kusoma nyaraka zake, haina, kwa kweli, kurudi null. 317 00:19:11,850 --> 00:19:16,150 Sasa kama GetString inashindwa na kurudi null, GetInt ataenda kushindwa 318 00:19:16,150 --> 00:19:19,370 na kurudi INT_MAX, kama sentinel. 319 00:19:19,370 --> 00:19:22,650 Hizi ni baadhi tu ya binadamu makongamano. njia pekee ya kujua hii ni kesi 320 00:19:22,650 --> 00:19:24,840 ni kwa kusoma nyaraka. 321 00:19:24,840 --> 00:19:28,200 Basi hebu kitabu chini ambapo int ni kweli GotInt. 322 00:19:28,200 --> 00:19:34,220 >> Hivyo kama mimi kitabu chini kidogo zaidi, katika mstari 170 tuna maoni juu ya mistari haya. 323 00:19:34,220 --> 00:19:38,470 Hivyo sisi kutangaza, katika 172, n int na c Char, na kisha kazi hii mpya 324 00:19:38,470 --> 00:19:41,870 ambayo baadhi yenu mashaka hela kabla, lakini sscanf. 325 00:19:41,870 --> 00:19:44,190 Hii anasimama kwa kamba f Scan. 326 00:19:44,190 --> 00:19:48,580 Kwa maneno mengine, nipe string nami Scan kwa vipande vya habari ya riba. 327 00:19:48,580 --> 00:19:53,820 Hiyo ni nini maana ya kwamba? Naam, tuseme kwamba ninapoandika katika, literally, 1 2 3 katika keyboard, 328 00:19:53,820 --> 00:19:59,730 na kisha hit kuingia. Je, ni aina ya data 1 2 3 wakati akarudi na GetString? 329 00:19:59,730 --> 00:20:05,010 Ni wazi kamba, sawa? I got kamba, hivyo 1 2 3 ni kweli "1 2 3" 330 00:20:05,010 --> 00:20:07,260 na 0 \ katika mwisho wake. Hiyo siyo int. 331 00:20:07,260 --> 00:20:10,420 Hiyo si idadi. Inaonekana kama idadi lakini si kweli. 332 00:20:10,420 --> 00:20:14,680 Hiyo ni nini GetInt kufanya? Ina Scan kwamba string kushoto na kulia, 333 00:20:14,680 --> 00:20:19,010 1 2 3 \ 0, na kwa namna fulani kubadilisha kwa integer halisi. 334 00:20:19,010 --> 00:20:21,010 Sasa, unaweza kufikiri ni jinsi gani ya kufanya hivyo. 335 00:20:21,010 --> 00:20:24,240 Kama unafikiri nyuma pset 2, wewe labda got kidogo starehe 336 00:20:24,240 --> 00:20:26,810 kwa Kaisari, au vigenere hivyo unaweza iterate juu ya kamba, 337 00:20:26,810 --> 00:20:29,800 unaweza kubadilisha chars kwa ints na pick. Hiyo ni mengi yote ya kazi. 338 00:20:29,800 --> 00:20:32,800 Mbona si wito kazi kama sscanf kwamba gani kwa ajili yenu? 339 00:20:32,800 --> 00:20:37,520 Hivyo sscanf anatarajia hoja, katika kesi hii inaitwa mstari, ambayo ni kamba. 340 00:20:37,520 --> 00:20:41,310 Wewe basi bayana, katika quotes, ni sawa na printf, 341 00:20:41,310 --> 00:20:44,960 je, wewe kutarajia kuona katika kamba hii? 342 00:20:44,960 --> 00:20:52,980 Nini mimi kusema hapa ni, mimi kutarajia kuona idadi decimal na labda tabia. 343 00:20:52,980 --> 00:20:54,990 Na tutaweza kuona nini hii ni kesi katika muda tu. 344 00:20:54,990 --> 00:20:58,440 Ni zinageuka kuwa nukuu hii sasa ni kukumbusha ya mambo 345 00:20:58,440 --> 00:21:00,840 tulipoanza kuzungumza kuhusu tu zaidi ya wiki iliyopita. 346 00:21:00,840 --> 00:21:05,430 >> Nini ni & n na & c kufanya kwa sisi hapa? [Mwanafunzi majibu, unintelligible] 347 00:21:05,430 --> 00:21:07,610 >> Yeah. Ni kunipa anuani ya n na anuani ya c. 348 00:21:07,610 --> 00:21:10,440 Sasa, kwa nini ni muhimu kwamba? Naam, unajua kwamba pamoja na utendaji katika C 349 00:21:10,440 --> 00:21:13,440 unaweza daima kurudi thamani au hakuna thamani wakati wote. 350 00:21:13,440 --> 00:21:16,630 Unaweza kurudi int, kamba, kuelea, char, chochote. 351 00:21:16,630 --> 00:21:21,150 Au unaweza kurudi batili, lakini unaweza tu kurudi 1 kitu Upeo. 352 00:21:21,150 --> 00:21:26,100 Lakini hapa tunataka sscanf kurudi kwangu labda int, idadi decimal, 353 00:21:26,100 --> 00:21:29,240 na pia Char, na mimi itabidi kueleza kwa nini Char katika wakati huu. 354 00:21:29,240 --> 00:21:34,250 Hivyo ufanisi wanataka f kurudi mambo 2; kwamba si tu inawezekana katika C. 355 00:21:34,250 --> 00:21:38,460 Hivyo unaweza kufanya kazi ya kuzunguka kwamba kwa kupita katika anwani 2, 356 00:21:38,460 --> 00:21:43,710 kwa sababu kwa haraka kama wewe mkono kazi anwani 2, nini wanaweza kufanya kazi hiyo pamoja nao? 357 00:21:43,710 --> 00:21:49,880 Ni unaweza kuandika kwa anwani hizo. Unaweza kutumia operesheni * na "kwenda huko" kwa kila moja ya anwani hizo. 358 00:21:49,880 --> 00:21:54,320 Ni aina ya mfumo huu backdoor, lakini kawaida sana kwa ajili ya kubadilisha maadili ya vigezo 359 00:21:54,320 --> 00:21:58,020 katika zaidi ya 1 tu mahali, katika kesi hii 2. 360 00:21:58,020 --> 00:22:04,590 Sasa, mimi nina taarifa ya kuangalia kwa == to1, na kisha kurudi n kama hana, kwa kweli, kutathmini kwa kweli. 361 00:22:04,590 --> 00:22:09,340 Basi nini kinaendelea? Naam, kitaalam, wote kweli tunataka kutokea katika GetInt ni hii. 362 00:22:09,340 --> 00:22:12,340 Tunataka kuchanganua, hivyo kusema; tunataka kusoma string 363 00:22:12,340 --> 00:22:16,210 "1 2 3" na kama inaonekana kama kuna idadi huko, 364 00:22:16,210 --> 00:22:21,360 nini tuko kuwaambia sscanf kufanya ni kuweka kwamba idadi, 1 2 3, katika n hii variable kwa ajili yangu. 365 00:22:21,360 --> 00:22:26,060 Kwa nini, basi, alifanya nina hili pia? 366 00:22:26,060 --> 00:22:33,750 Je, jukumu la pia akisema, sscanf, unaweza pia kupata tabia hapa. 367 00:22:33,750 --> 00:22:36,890 [Mwanafunzi akizungumza, unintelligible] >> Si - uhakika decimal anaweza kufanya kazi. 368 00:22:36,890 --> 00:22:40,650 Hebu kushikilia kwamba walidhani kwa muda. Gani kingine? 369 00:22:40,650 --> 00:22:42,570 [Mwanafunzi, unintelligible] >> Hivyo, wazo nzuri, inaweza kuwa tabia null. 370 00:22:42,570 --> 00:22:44,970 Ni kweli si, katika kesi hii. Yeah? [Mwanafunzi, unintelligible] 371 00:22:44,970 --> 00:22:47,100 >> >> ASCII. Au, basi mimi generalize hata zaidi. 372 00:22:47,100 --> 00:22:49,670 C% kuna tu kwa makosa ya kuangalia. 373 00:22:49,670 --> 00:22:52,510 Hatutaki kuwa kuna tabia baada ya idadi, 374 00:22:52,510 --> 00:22:54,980 lakini nini hii inaruhusu mimi kufanya ni yafuatayo: 375 00:22:54,980 --> 00:23:01,270 Ni zinageuka kuwa sscanf, badala ya kuhifadhi maadili katika n na c, katika mfano huu hapa, 376 00:23:01,270 --> 00:23:08,170 nini pia haina ni kuirudisha idadi ya vigezo ni kuweka maadili in 377 00:23:08,170 --> 00:23:13,330 Hivyo kama wewe tu aina katika 1 2 3, basi tu d% ni kwenda kwa mechi 378 00:23:13,330 --> 00:23:18,830 na tu n anapata kuhifadhiwa kwa thamani kama 1 2 3 na kitu anapata kuweka katika c; 379 00:23:18,830 --> 00:23:20,870 c bado thamani ya takataka, hivyo kusema. 380 00:23:20,870 --> 00:23:23,550 Takataka kwa sababu ni haijawahi initialized kama thamani fulani. 381 00:23:23,550 --> 00:23:29,390 Hivyo katika kesi hiyo, sscanf anarudi 1, kwa sababu mimi wakazi moja ya kuyatumia hizo, 382 00:23:29,390 --> 00:23:33,650 katika kesi ambayo, kubwa. Nina int, hivyo mimi huru line ya bure juu ya kumbukumbu 383 00:23:33,650 --> 00:23:37,150 kwamba GetString kweli zilizotengwa, na kisha mimi kurudi n. 384 00:23:37,150 --> 00:23:42,210 Mwingine, kama umewahi kujiuliza ambapo kwamba retry kauli huja kutoka, linatokana na haki hapa. 385 00:23:42,210 --> 00:23:45,770 Kama, kwa kulinganisha, ninapoandika katika 1 2 3 foo, 386 00:23:45,770 --> 00:23:48,640 baadhi tu mlolongo random wa maandishi, sscanf ni kwenda kuona, 387 00:23:48,640 --> 00:23:51,500 ooh, idadi, ooh, idadi, ooh, idadi, ooh - f. 388 00:23:51,500 --> 00:23:54,190 Na ni kwenda kuweka 1 2 3 katika n. 389 00:23:54,190 --> 00:23:59,970 Ni kwenda kuweka f katika c, na kisha kurudi 2. 390 00:23:59,970 --> 00:24:02,980 Hivyo tuna, tu kutumia ufafanuzi wa msingi wa tabia ya scanf, 391 00:24:02,980 --> 00:24:06,170 njia rahisi sana - vizuri, tata katika mtazamo wa kwanza, lakini mwisho wa siku, 392 00:24:06,170 --> 00:24:11,460 haki rahisi utaratibu wa kusema, ni pale int, na kama ni hivyo, ni kwamba kitu pekee mimi kupatikana? 393 00:24:11,460 --> 00:24:14,950 Na nafasi nyeupe hapa ni makusudi. Kama unaweza kusoma nyaraka kwa ajili ya sscanf, 394 00:24:14,950 --> 00:24:18,690 ni anakwambia kwamba kama wewe ni pamoja na kipande ya nafasi nyeupe mwanzoni au mwishoni, 395 00:24:18,690 --> 00:24:24,990 sscanf pia itaruhusu mtumiaji, kwa sababu yoyote, hit spacebar 1 2 3, na hiyo itakuwa halali. 396 00:24:24,990 --> 00:24:28,310 Itakuwa si yell katika user tu kwa sababu wao hit spacebar mwanzoni au mwishoni, 397 00:24:28,310 --> 00:24:32,160 ambayo ni kidogo tu zaidi user-kirafiki. 398 00:24:32,160 --> 00:24:34,160 >> Maswali yoyote, basi, juu ya GetInts? Yeah? 399 00:24:34,160 --> 00:24:36,820 [Mwanafunzi swali, unintelligible] 400 00:24:36,820 --> 00:24:40,740 >> Bora swali. Je, iwapo tu typed katika Char, kama hit f, na kuingia 401 00:24:40,740 --> 00:24:47,830 bila hata kuandika 1 2 3; unafikiri nini tabia ya huu mstari wa kanuni basi ingekuwa? 402 00:24:47,830 --> 00:24:50,500 Hivyo sscanf unaweza cover kwamba pia, kwa sababu katika kesi hiyo, 403 00:24:50,500 --> 00:24:56,280 si kwenda kujaza n au c; itakavyo badala kurudi 0. 404 00:24:56,280 --> 00:25:01,540 Katika kesi ambayo, mimi nina pia kuambukizwa kwamba hali hiyo, kwa sababu thamani inatarajiwa nataka ni 1. 405 00:25:01,540 --> 00:25:07,310 Mimi nataka tu 1, na kitu pekee 1 ya kujazwa. Nzuri swali. Wengine? 406 00:25:07,310 --> 00:25:09,610 >> Haki ya wote, hivyo basi si kwenda kwa yote ya kazi katika hapa, 407 00:25:09,610 --> 00:25:11,820 lakini moja ambayo inaonekana kuwa, pengine, riba iliyobaki 408 00:25:11,820 --> 00:25:14,530 ni kwa sababu GetString zinageuka kuwa GetFloat, GetInt, 409 00:25:14,530 --> 00:25:19,490 GetDouble, GetLongLong wote punt mengi ya utendaji wao wa GetString. 410 00:25:19,490 --> 00:25:22,860 Basi hebu tuangalie jinsi yeye ni kutekelezwa hapa. 411 00:25:22,860 --> 00:25:27,040 Hii moja inaonekana tata kidogo lakini inatumia misingi hiyo 412 00:25:27,040 --> 00:25:29,680 kwamba sisi kuanza kuzungumza kuhusu wiki iliyopita. Hivyo katika GetString, 413 00:25:29,680 --> 00:25:32,670 ambayo inachukua hakuna hoja kama kwa utupu hapa juu, 414 00:25:32,670 --> 00:25:37,110 na kuirudisha string; hivyo mimi kutangaza string kuitwa buffer. 415 00:25:37,110 --> 00:25:39,670 Mimi kwa kweli sijui ni nini ambayo inaenda kutumika kwa ajili bado, lakini tutaweza kuona. 416 00:25:39,670 --> 00:25:42,950 Looks kama uwezo ni, kwa default, 0; uhakika kabisa ambapo hii ni kwenda. 417 00:25:42,950 --> 00:25:44,920 Uhakika nini n kinaendelea kutumiwa kwa maana bado. 418 00:25:44,920 --> 00:25:47,860 Lakini sasa ni kupata zaidi kidogo ya kuvutia, hivyo katika mstari 243, 419 00:25:47,860 --> 00:25:51,760 sisi kutangaza c int, hii ni aina ya kina ya kijinga. 420 00:25:51,760 --> 00:25:58,080 Char ni 8 bits, na 8 bits unaweza kuhifadhi wangapi maadili tofauti? 421 00:25:58,080 --> 00:26:03,310 256. Tatizo ni, kama unataka kuwa na 256 tofauti wahusika ASCII, 422 00:26:03,310 --> 00:26:06,210 ambayo kuna, kama unafikiri nyuma, na hii si kitu kwa kukariri. 423 00:26:06,210 --> 00:26:09,100 Lakini kama unadhani nyuma chati kwamba kubwa ASCII tulikuwa wiki iliyopita, 424 00:26:09,100 --> 00:26:13,780 walikuwepo, katika kesi hiyo, 128 au 256 ASCII wahusika. 425 00:26:13,780 --> 00:26:16,220 Sisi kutumika mifumo yote ya ya 0 na 1 ya juu. 426 00:26:16,220 --> 00:26:19,410 Hiyo ni tatizo kama unataka kuwa na uwezo wa kuchunguza makosa. 427 00:26:19,410 --> 00:26:23,290 Kwa sababu kama uko tayari kutumia maadili 256 kwa wahusika wako, 428 00:26:23,290 --> 00:26:26,390 wewe si kweli mpango wa mbele, kwa sababu sasa una hakuna njia ya kusema, 429 00:26:26,390 --> 00:26:29,750 "Hii si tabia legit, hii ni kwa baadhi ya ujumbe makosa." 430 00:26:29,750 --> 00:26:32,430 Basi nini dunia gani ni, wao kutumia ijayo kubwa thamani, 431 00:26:32,430 --> 00:26:35,790 kitu kama int ili una idadi mambo ya bits, 432 00:26:35,790 --> 00:26:39,610 32 kwa maadili bilioni 4 iwezekanavyo, ili kwamba unaweza tu kuishia kutumia, 433 00:26:39,610 --> 00:26:44,800 kimsingi, 257 kati yao, 1 ambayo ina baadhi ya maana maalum kama makosa. 434 00:26:44,800 --> 00:26:49,190 >> Basi hebu angalia jinsi hii matendo. Katika mstari 246, nina hii kubwa wakati kitanzi 435 00:26:49,190 --> 00:26:54,530 kwamba ni wito fgetc, f maana ya SVG, getc, na kisha stdin. 436 00:26:54,530 --> 00:26:59,030 Zinageuka hii ni njia tu sahihi zaidi ya kusema "kusoma pembejeo kutoka keyboard." 437 00:26:59,030 --> 00:27:02,730 Darasa la pembejeo njia keyboard, pato kiwango ina maana screen, 438 00:27:02,730 --> 00:27:06,920 na kiwango makosa, ambayo tutaweza kuona katika pset 4, ina maana screen, 439 00:27:06,920 --> 00:27:09,670 lakini sehemu maalum ya screen ili siyo conflated 440 00:27:09,670 --> 00:27:13,760 na pato halisi kwamba wewe nia ya magazeti, lakini zaidi juu ya kwamba katika siku zijazo. 441 00:27:13,760 --> 00:27:19,430 Hivyo fgetc njia tu kusoma moja tabia kutoka keyboard, na kuhifadhi wapi? 442 00:27:19,430 --> 00:27:24,000 Kuhifadhi katika c, na kisha kuangalia, hivyo mimi nina kutumia tu kuhusianisha baadhi ya bulin hapa, 443 00:27:24,000 --> 00:27:28,430 kuangalia kwamba hana sawa \ n, hivyo user ina hit kuingia. 444 00:27:28,430 --> 00:27:31,510 Tunataka kukomesha saa kwamba uhakika, mwisho wa kitanzi, na sisi pia wanataka kuangalia 445 00:27:31,510 --> 00:27:36,170 kwa mara kwa mara maalum, EOF, ambayo kama unajua au nadhani - ni nini kusimama kwa? 446 00:27:36,170 --> 00:27:39,860 Mwisho wa faili. Hivyo hii ni aina ya kiupuzi, kwa sababu kama mimi nina kuandika katika keyboard, 447 00:27:39,860 --> 00:27:41,900 kuna kweli hakuna faili kushiriki katika hili, 448 00:27:41,900 --> 00:27:44,330 lakini hii tu ya aina ya muda generic kutumika kwa maana ya 449 00:27:44,330 --> 00:27:50,320 kwamba kitu kingine ni kuja kutoka kwa vidole binadamu. EOF. Mwisho wa faili. 450 00:27:50,320 --> 00:27:52,600 Kama kando, kama wameweza milele hit kudhibiti d katika keyboard yako, 451 00:27:52,600 --> 00:27:54,680 si kwamba ungependa kuwa bado; ve hit kudhibiti c. 452 00:27:54,680 --> 00:27:57,920 Lakini kudhibiti d zituma hii maalum ya mara kwa mara huitwa EOF. 453 00:27:57,920 --> 00:28:03,100 >> Hivyo sasa sisi tu baadhi ya nguvu ya kumbukumbu mgao. 454 00:28:03,100 --> 00:28:06,460 Hivyo kama n + 1> uwezo, sasa mimi itabidi kueleza n. 455 00:28:06,460 --> 00:28:09,380 n ni jinsi tu wengi ka ni sasa katika buffer, 456 00:28:09,380 --> 00:28:11,970 kamba kwamba wewe sasa kujenga kutoka kwa mtumiaji. 457 00:28:11,970 --> 00:28:16,240 Kama una zaidi ya wahusika katika buffer yako kuliko wewe kuwa na uwezo katika buffer, 458 00:28:16,240 --> 00:28:20,760 intuitively, tunachotaka kufanya ni basi kutenga zaidi ya uwezo. 459 00:28:20,760 --> 00:28:24,490 Mimi naenda skim juu ya baadhi ya hesabu hapa 460 00:28:24,490 --> 00:28:26,900 na lengo tu juu ya kazi hii hapa. 461 00:28:26,900 --> 00:28:29,170 Unajua nini malloc ni, au angalau kwa ujumla ukoo. 462 00:28:29,170 --> 00:28:32,380 Kuchukua nadhani nini realloc gani. [Mwanafunzi jibu, unintelligible] 463 00:28:32,380 --> 00:28:35,690 >> Yeah. Na si kabisa kuongeza kumbukumbu; ni reallocates kumbukumbu kama ifuatavyo: 464 00:28:35,690 --> 00:28:40,530 Kama bado kuna chumba katika mwisho wa kamba kukupa zaidi ya kumbukumbu ya kwamba 465 00:28:40,530 --> 00:28:43,370 kuliko awali inakupa, kisha utapata kwamba kumbukumbu ya ziada. 466 00:28:43,370 --> 00:28:46,640 Hivyo unaweza kuweka tu wahusika masharti nyuma kwa nyuma kwa nyuma kwa nyuma. 467 00:28:46,640 --> 00:28:49,290 Lakini kama si kwamba kesi, kwa sababu wewe walisubiri muda mrefu sana 468 00:28:49,290 --> 00:28:51,700 na kitu random got plopped katika kumbukumbu huko, lakini kuna ziada 469 00:28:51,700 --> 00:28:56,480 kumbukumbu hapa chini, hiyo ni sawa. Realloc anaenda kufanya kuinua nzito kwa ajili yenu, 470 00:28:56,480 --> 00:28:58,810 hoja string umeisoma katika hivi sasa kutoka hapa, 471 00:28:58,810 --> 00:29:02,550 kuiweka chini huko, na kisha kukupa baadhi zaidi Runway katika hatua hiyo. 472 00:29:02,550 --> 00:29:05,610 Hivyo, pamoja na wimbi la mkono, basi mimi kusema kwamba kile GetString ni kufanya 473 00:29:05,610 --> 00:29:09,540 ni ni kwa kuanzia na buffer ndogo, labda 1 moja tabia, 474 00:29:09,540 --> 00:29:12,300 na kama mtumiaji aina katika wahusika 2, GetString inaishia 475 00:29:12,300 --> 00:29:15,210 wito realloc na anasema, 'Ooh, 1 tabia ilikuwa haitoshi. 476 00:29:15,210 --> 00:29:18,480 Nipe wahusika 2. ' Kisha kama kusoma kwa njia ya mantiki ya kitanzi, 477 00:29:18,480 --> 00:29:21,070 itakavyo kusema, 'Ooh, mtumiaji typed katika herufi 3. 478 00:29:21,070 --> 00:29:25,690 Nipe sasa si 2 lakini 4 wahusika, basi nipe 8, basi nipe 16 na 32. ' 479 00:29:25,690 --> 00:29:28,180 ukweli kwamba mimi nina uwezo mara dufu kila wakati 480 00:29:28,180 --> 00:29:30,320 ina maana kwamba buffer si kwenda kukua polepole. 481 00:29:30,320 --> 00:29:35,870 Ni kwenda kukua super kufunga, na nini inaweza kuwa faida ya kwamba? 482 00:29:35,870 --> 00:29:38,540 Kwa nini mimi mara mbili ya ukubwa wa buffer, ingawa mtumiaji 483 00:29:38,540 --> 00:29:41,450 ili tu haja 1 ziada tabia kutoka keyboard? 484 00:29:41,450 --> 00:29:44,830 [Mwanafunzi jibu, unintelligible]. >> Gani hiyo? 485 00:29:44,830 --> 00:29:46,750 Hasa. Huna kukua ni kama mara nyingi. 486 00:29:46,750 --> 00:29:48,870 Na hii ni aina tu ya - you're Hedging bets yako hapa. 487 00:29:48,870 --> 00:29:54,150 wazo kuwa kuwa hutaki kuwaita realloc mengi, kwa sababu huelekea kuwa polepole. 488 00:29:54,150 --> 00:29:56,840 Wakati wowote kuuliza mfumo wa uendeshaji kwa ajili ya kumbukumbu, kama utasikia haraka kuona 489 00:29:56,840 --> 00:30:00,620 katika kuweka baadaye tatizo, huelekea kuchukua muda. 490 00:30:00,620 --> 00:30:04,980 Hivyo kukanusha kwamba kiasi cha muda, hata kama wewe ni kupoteza baadhi ya nafasi, huelekea kuwa ni jambo jema. 491 00:30:04,980 --> 00:30:07,250 >> Lakini kama sisi kusoma kupitia sehemu ya mwisho ya GetString hapa, 492 00:30:07,250 --> 00:30:10,880 na tena, kuelewa kila line moja hapa sio muhimu leo. 493 00:30:10,880 --> 00:30:14,830 Lakini ona kwamba hatimaye wito malloc tena, na kutenga 494 00:30:14,830 --> 00:30:16,980 hasa kama ka wengi kama ni mahitaji kwa kamba 495 00:30:16,980 --> 00:30:21,620 na kisha throws mbali na wito bure, buffer kupita kiasi kikubwa, 496 00:30:21,620 --> 00:30:23,510 kama ni kweli got mara mbili mara nyingi sana. 497 00:30:23,510 --> 00:30:25,970 Kwa kifupi, hiyo ni jinsi GetString imekuwa ikifanya kazi muda wote huu. 498 00:30:25,970 --> 00:30:30,100 All yake ni kusoma moja ya tabia kwa wakati tena na tena na tena 499 00:30:30,100 --> 00:30:37,930 na kila wakati inahitaji baadhi ya kumbukumbu ya ziada, inauliza mfumo wa uendeshaji kwa ajili yake kwa wito realloc. 500 00:30:37,930 --> 00:30:41,660 Maswali yoyote? Wote haki. 501 00:30:41,660 --> 00:30:45,220 >> mashambulizi. Sasa kwa kuwa tunaelewa kuyatumia, au angalau 502 00:30:45,220 --> 00:30:47,560 zinazidi ukoo na kuyatumia, 503 00:30:47,560 --> 00:30:50,020 hebu fikiria jinsi dunia zima kuanza kuanguka 504 00:30:50,020 --> 00:30:53,160 kama huna kabisa kulinda dhidi ya watumiaji adversarial, 505 00:30:53,160 --> 00:30:55,180 watu ambao ni kujaribu Hack ndani ya mfumo wako. 506 00:30:55,180 --> 00:31:00,260 Watu ambao ni kujaribu kuiba programu yako kwa circumventing baadhi ya kanuni za usajili 507 00:31:00,260 --> 00:31:02,150 wapate kuwa vinginevyo na aina in 508 00:31:02,150 --> 00:31:04,860 Kuangalia mfano huu hapa, ambayo ni tu C code 509 00:31:04,860 --> 00:31:07,920 kwamba ina kazi kuu chini, kwamba wito foo kazi, 510 00:31:07,920 --> 00:31:12,100 na kile ni kupitisha foo? [Mwanafunzi] hoja moja. 511 00:31:12,100 --> 00:31:15,660 >> Single hoja. Hivyo argv [1], ambayo ina maana ya neno kwanza mtumiaji typed 512 00:31:15,660 --> 00:31:19,150 katika mstari amri baada a.out au chochote mpango inaitwa. 513 00:31:19,150 --> 00:31:24,920 Hivyo foo, saa ya juu, inachukua katika * Char, lakini * Char ni yale tu? 514 00:31:24,920 --> 00:31:28,860 Kamba. Kuna kitu kipya hapa, na kamba kwamba ni kiholela kuitwa bar. 515 00:31:28,860 --> 00:31:36,090 Katika mstari huu hapa, char c [12], katika aina ya nusu ya kiufundi Kiingereza, ni nini mstari huu kufanya? 516 00:31:36,090 --> 00:31:40,640 Safu ya -? Nyingine. Nipe safu ya wahusika 12. 517 00:31:40,640 --> 00:31:44,970 Hivyo tupate wito huu buffer. Ni kitaalam inaitwa c, lakini buffer katika programu 518 00:31:44,970 --> 00:31:47,890 njia tu rundo la nafasi kuwa unaweza kuweka baadhi ya mambo in 519 00:31:47,890 --> 00:31:49,940 >> Kisha mwisho, memcpy, tumekuwa si kutumika kabla. 520 00:31:49,940 --> 00:31:52,380 Lakini pengine unaweza nadhani nini inakuwa hivyo. Ni nakala ya kumbukumbu. 521 00:31:52,380 --> 00:31:58,790 Ni nini nini? Naam, ni dhahiri nakala bar, mchango wake, katika c, 522 00:31:58,790 --> 00:32:03,420 lakini tu hadi urefu wa bar. 523 00:32:03,420 --> 00:32:07,440 Lakini kuna mdudu hapa. 524 00:32:07,440 --> 00:32:14,500 Okay, hivyo kitaalam tunatakiwa kufanya strlen (bar) x sizeof (Char), kwamba ni sahihi. 525 00:32:14,500 --> 00:32:17,920 Lakini katika hali mbaya hapa, hebu kudhani kwamba that's - hivyo, okay. 526 00:32:17,920 --> 00:32:23,760 Kisha kuna 2 mende. Hivyo sizeof (Char), wote haki, wacha kufanya hii kidogo pana. 527 00:32:23,760 --> 00:32:28,860 Hivyo sasa bado kuna mdudu, ambayo ni nini? 528 00:32:28,860 --> 00:32:31,630 [Mwanafunzi jibu, unintelligible] >> Check kwa nini? Okay, kwa hivyo sisi inapaswa kuangalia 529 00:32:31,630 --> 00:32:35,010 kwa null, kwa sababu mambo mabaya kutokea wakati pointer yako ni null, 530 00:32:35,010 --> 00:32:38,490 Kwa sababu unaweza kuishia kwenda huko, na unapaswa si milele kuwa kwenda kwa null 531 00:32:38,490 --> 00:32:40,890 na dereferencing kwa operator *. 532 00:32:40,890 --> 00:32:45,250 Basi hiyo ni nzuri, na kile kingine ni sisi kufanya? Kimantiki kuna flaw hapa pia. 533 00:32:45,250 --> 00:32:47,650 [Mwanafunzi jibu, unintelligible] 534 00:32:47,650 --> 00:32:51,340 >> Hivyo kuangalia kama argc ≥ 2? 535 00:32:51,340 --> 00:32:54,130 Okay, hivyo kuna 3 mende katika mpango huu hapa. 536 00:32:54,130 --> 00:33:00,080 Sisi siyo kuangalia kama mtumiaji kweli typed katika kitu chochote ndani ya argv [1], nzuri. 537 00:33:00,080 --> 00:33:02,240 Basi nini mdudu wa tatu? Yeah? 538 00:33:02,240 --> 00:33:04,420 [Mwanafunzi jibu, unintelligible] >> Good. 539 00:33:04,420 --> 00:33:09,590 Hivyo sisi tulienda moja tukio. Sisi implicitly checked usinakili zaidi ya kumbukumbu 540 00:33:09,590 --> 00:33:12,800 kuliko ingekuwa kisichozidi urefu wa bar. 541 00:33:12,800 --> 00:33:15,720 Hivyo kama string mtumiaji typed katika ni 10 wahusika muda mrefu, 542 00:33:15,720 --> 00:33:18,260 hii ni kusema, 'tu nakala wahusika 10.' 543 00:33:18,260 --> 00:33:21,140 Na hiyo ni sawa, lakini kile kama mtumiaji typed katika neno katika kuchochea 544 00:33:21,140 --> 00:33:29,360 kama neno 20 tabia, hii ni, akisema nakala wahusika 20 kutoka bar ndani ya nini? 545 00:33:29,360 --> 00:33:32,840 c, inayojulikana kama buffer yetu, ambayo ina maana tu aliandika data 546 00:33:32,840 --> 00:33:35,950 hadi 8 Byte maeneo ambayo huna mwenyewe, 547 00:33:35,950 --> 00:33:38,320 na humiliki yao kwa maana ya kwamba kamwe zilizotengwa kwao. 548 00:33:38,320 --> 00:33:41,190 Hivyo hii ni nini ujumla inayojulikana kama mashambulizi ya kufurika buffer, 549 00:33:41,190 --> 00:33:46,650 au buffer overrun mashambulizi, na mashambulizi yake kwa maana kwamba kama mtumiaji 550 00:33:46,650 --> 00:33:50,650 au mpango hiyo wito kazi yako ni kufanya hii maliciously, 551 00:33:50,650 --> 00:33:53,780 nini hasa kinatokea ijayo inaweza kuwa mbaya kabisa. 552 00:33:53,780 --> 00:33:55,690 >> Hebu tuangalie picha hii hapa. 553 00:33:55,690 --> 00:33:59,070 Hii picha inawakilisha stack yako ya kumbukumbu. 554 00:33:59,070 --> 00:34:01,050 Na kukumbuka kwamba kila wakati wewe piga kazi, 555 00:34:01,050 --> 00:34:04,520 kupata sura hii kidogo juu ya stack na kisha mwingine na kisha mwingine na kisha mwingine. 556 00:34:04,520 --> 00:34:07,250 Na hivi sasa tumekuwa aina tu ya abstracted hizi mbali kama mistatili 557 00:34:07,250 --> 00:34:09,380 aidha kuna ubaoni au kwenye screen hapa. 558 00:34:09,380 --> 00:34:12,219 Lakini kama sisi zoom katika kwenye moja ya mistatiri hizo, 559 00:34:12,219 --> 00:34:16,460 wakati wewe piga foo kazi, zinageuka kuwa kuna zaidi juu ya stack 560 00:34:16,460 --> 00:34:18,739 ndani ya kwamba sura na kwamba Mstatili 561 00:34:18,739 --> 00:34:23,370 kuliko tu x na y na a na b, kama sisi hawakuwa kuzungumza juu ya kubadilishana. 562 00:34:23,370 --> 00:34:25,949 Ni zinageuka kuwa kuna baadhi ya maelezo ya chini ya ngazi, 563 00:34:25,949 --> 00:34:27,780 kati yao kurudi anuani. 564 00:34:27,780 --> 00:34:33,020 Hivyo zinageuka wakati kuu wito foo, kuu ina kuwajulisha foo 565 00:34:33,020 --> 00:34:36,760 nini anwani kuu ni katika kumbukumbu ya kompyuta. 566 00:34:36,760 --> 00:34:40,659 Kwa sababu vinginevyo, kwa haraka kama foo inafanywa utekelezaji, kama katika kesi hii hapa, 567 00:34:40,659 --> 00:34:43,790 mara moja wewe kufikia hii karibu curly brace mwishoni mwa foo, 568 00:34:43,790 --> 00:34:48,860 jinsi heck haina foo kujua ambapo udhibiti wa mpango zinatakiwa kwenda? 569 00:34:48,860 --> 00:34:52,460 Ni zinageuka kuwa jibu la swali hilo ni katika mstatili kwamba nyekundu hapa. 570 00:34:52,460 --> 00:34:56,130 Hii inawakilisha pointer, na ni juu ya kompyuta kuhifadhi, kwa muda, 571 00:34:56,130 --> 00:35:00,250 juu ya stack kinachojulikana anuani ya kuu ili haraka kama foo inafanywa utekelezaji, 572 00:35:00,250 --> 00:35:04,110 kompyuta anajua wapi na nini line katika kuu ya kwenda nyuma ya. 573 00:35:04,110 --> 00:35:06,900 Kuokolewa frame pointer inahusiana vile vile kwa hii. 574 00:35:06,900 --> 00:35:09,620 Char * bar hapa inawakilisha nini? 575 00:35:09,620 --> 00:35:14,740 Naam, sasa hii sehemu ya bluu hapa ni sura foo, je ni bar? 576 00:35:14,740 --> 00:35:18,300 Okay, kwa hivyo ni bar tu hoja kwa kazi foo. 577 00:35:18,300 --> 00:35:20,720 >> Hivyo sasa tuko nyuma katika picha za ukoo. 578 00:35:20,720 --> 00:35:22,960 Kuna zaidi ya mambo na distractions zaidi juu ya screen 579 00:35:22,960 --> 00:35:27,490 lakini hii mwanga sehemu ya bluu ni nini tumekuwa kuchora ubaoni kwa kitu kama byta. 580 00:35:27,490 --> 00:35:31,890 Hiyo ni sura kwa foo na kitu pekee katika haki sasa ni bar, 581 00:35:31,890 --> 00:35:34,630 ambayo ni hii parameter. 582 00:35:34,630 --> 00:35:39,840 Lakini nini kingine unapaswa kuwa katika stack, kulingana na kanuni hii hapa? 583 00:35:39,840 --> 00:35:44,280 Char c [12]. Hivyo inabidi kuona viwanja 12 ya kumbukumbu, 584 00:35:44,280 --> 00:35:46,260 zilizotengwa kwa ajili ya variable kuitwa c. 585 00:35:46,260 --> 00:35:48,340 Na hakika sisi kufanya kuwa na kwamba kwenye screen. 586 00:35:48,340 --> 00:35:51,650 sana juu kuna c [0], na kisha mwandishi wa mchoro huu 587 00:35:51,650 --> 00:35:55,130 haikujali kuchora wote wa miraba lakini kuna shaka 12 kuna 588 00:35:55,130 --> 00:36:00,120 kwa sababu kama ukiangalia chini kulia, c [11], kama hesabu kutoka 0, ni 12 vile bytes. 589 00:36:00,120 --> 00:36:06,190 Lakini hapa ni tatizo: Katika ambayo mwelekeo ni kuongezeka c? 590 00:36:06,190 --> 00:36:10,390 Aina ya juu chini, sawa? Kama ni kuanza saa ya juu na kukua hadi chini, 591 00:36:10,390 --> 00:36:13,480 haionekani kama sisi kushoto wenyewe Runway sana hapa wakati wote. 592 00:36:13,480 --> 00:36:15,320 Tumekuwa aina ya walijenga wenyewe ndani ya kona, 593 00:36:15,320 --> 00:36:20,210 na kwamba c [11] ni haki juu ya bar, ambayo ni haki ya juu dhidi ya stack pointer frame, 594 00:36:20,210 --> 00:36:23,800 ambayo ni haki juu ya anwani ya kurudi; hakuna nafasi zaidi. 595 00:36:23,800 --> 00:36:26,100 Basi nini maana, basi, kama wewe screw up, 596 00:36:26,100 --> 00:36:30,460 na wewe jaribu kusoma ka 20 ndani ya buffer 12-Byte? 597 00:36:30,460 --> 00:36:33,460 Ambapo ni wale 8 ka ziada kwenda? 598 00:36:33,460 --> 00:36:36,370 Ndani ya kila kitu kingine, ambayo baadhi ni super muhimu. 599 00:36:36,370 --> 00:36:40,480 Na jambo muhimu zaidi, uwezekano, ni sanduku nyekundu huko, kurudi anuani. 600 00:36:40,480 --> 00:36:44,720 Kwa sababu tuseme kwamba wewe ni aidha ajali au adversarially 601 00:36:44,720 --> 00:36:48,040 overwrite ka wale 4, kwamba anuani pointer, 602 00:36:48,040 --> 00:36:53,190 si tu kwa takataka, lakini pamoja na kwamba idadi hiyo hutokea kwa kuwakilisha anuani halisi katika kumbukumbu? 603 00:36:53,190 --> 00:36:55,930 Nini implicaiton, mantiki? 604 00:36:55,930 --> 00:36:59,080 [Mwanafunzi majibu, unintelligible] >> Hasa. Wakati foo anarudi 605 00:36:59,080 --> 00:37:03,560 na hits kwamba brace curly, mpango ni kwenda kuendelea wasimrudie kuu, 606 00:37:03,560 --> 00:37:08,320 itakavyo kurudi chochote anuani ni katika sanduku kwamba nyekundu. 607 00:37:08,320 --> 00:37:11,560 >> Sasa, katika kesi ya usajili circumventing programu, 608 00:37:11,560 --> 00:37:14,400 kile ni anuani ya kwamba ni kuwa alirejea ni kazi 609 00:37:14,400 --> 00:37:18,820 kwamba kwa kawaida anapata kuitwa baada ve kulipwa kwa ajili ya programu na inputted usajili wako code? 610 00:37:18,820 --> 00:37:23,160 Unaweza aina ya hila ya kompyuta katika si kwenda hapa, lakini badala yake, anakwenda hapa. 611 00:37:23,160 --> 00:37:27,950 Au, kama wewe ni kweli wajanja, adui unaweza kweli aina katika saa keyboard, 612 00:37:27,950 --> 00:37:32,500 kwa mfano, si neno halisi, wahusika si 20, lakini nadhani yeye au yeye 613 00:37:32,500 --> 00:37:36,200 aina katika baadhi ya wahusika kwamba kuwakilisha code? 614 00:37:36,200 --> 00:37:38,860 Na si kwenda kuwa C kificho, ni kwenda kuwa wahusika 615 00:37:38,860 --> 00:37:42,920 kwamba kuwakilisha codes mashine binary, 0 na 1 ya. 616 00:37:42,920 --> 00:37:46,740 Lakini tuseme wao uko wajanja kutosha kufanya hivyo, kwa namna fulani kuweka katika haraka GetString 617 00:37:46,740 --> 00:37:49,460 kitu ambacho kimsingi ni compiled kificho, 618 00:37:49,460 --> 00:37:56,900 na mwisho 4 ka overwrite kwamba anuani kurudi, na nini anwani haina pembejeo kwamba kufanya? 619 00:37:56,900 --> 00:38:01,860 Ni maduka katika mstatili hii nyekundu anuani ya Byte kwanza ya buffer. 620 00:38:01,860 --> 00:38:04,270 Hivyo wewe kuwa kweli wajanja, na hii ni mengi ya kesi na makosa 621 00:38:04,270 --> 00:38:08,500 kwa watu mbaya huko nje, lakini kama unaweza kufikiri ni jinsi gani kubwa buffer hii ni, 622 00:38:08,500 --> 00:38:12,170 vile kwamba mwisho ka chache katika pembejeo kwamba wewe kutoa kwa mpango 623 00:38:12,170 --> 00:38:15,970 kutokea kwa kuwa sawa na anuani ya mwanzo wa buffer yako, 624 00:38:15,970 --> 00:38:22,270 unaweza kufanya hivyo. Tukisema, kwa kawaida, hello, na \ 0, kwamba ni nini mwisho juu katika buffer. 625 00:38:22,270 --> 00:38:27,860 Lakini kama tupo zaidi wajanja, na sisi kujaza kwamba buffer na kile tutaweza generically kuwaita mashambulizi kificho, 626 00:38:27,860 --> 00:38:31,920 ,,,: Attack, mashambulizi, mashambulizi, mashambulizi, ambapo hii ni tu kitu ambacho hana kitu mbaya. 627 00:38:31,920 --> 00:38:35,190 Naam, kile kinachotokea kama wewe ni kweli wajanja, unaweza kufanya kazi hii: 628 00:38:35,190 --> 00:38:41,740 Katika sanduku nyekundu hapa ni mlolongo wa namba: 80, CO, 35, 08. 629 00:38:41,740 --> 00:38:44,890 Ona kwamba kuwa mechi ya idadi hiyo ni hapa juu. 630 00:38:44,890 --> 00:38:47,280 Ni katika utaratibu reverse, lakini zaidi juu ya wakati kwamba baadhi nyingine. 631 00:38:47,280 --> 00:38:51,430 Ona kwamba anuani hii kurudi imekuwa makusudi ilibadilika 632 00:38:51,430 --> 00:38:54,970 kwa anuani sawa hapa, si anuani ya kuu. 633 00:38:54,970 --> 00:39:00,170 Hivyo kama mtu mbaya ni super smart, yeye au yeye ni kwenda kwa pamoja katika kificho kwamba mashambulizi 634 00:39:00,170 --> 00:39:02,890 kitu kama, 'Futa wote wa files mtumiaji.' 635 00:39:02,890 --> 00:39:06,320 Au 'Nakili nywila,' au 'Fungua akaunti ya mtumiaji kwamba naweza kuingia ndani.' 636 00:39:06,320 --> 00:39:10,130 Chochote wakati wote, na hii ni hatari zote na nguvu ya C. 637 00:39:10,130 --> 00:39:12,900 Kwa sababu unaweza kupata kumbukumbu kupitia kuyatumia 638 00:39:12,900 --> 00:39:15,950 na kwa hiyo unaweza kuandika kitu chochote unataka ndani ya kumbukumbu ya kompyuta. 639 00:39:15,950 --> 00:39:19,290 Unaweza kufanya kompyuta kufanya kitu chochote unataka tu na 640 00:39:19,290 --> 00:39:22,780 baada yake kuruka karibu ndani ya nafasi yake mwenyewe kumbukumbu. 641 00:39:22,780 --> 00:39:27,230 Na hivyo, kwa leo, hivyo wengi mipango na tovuti nyingi kwamba ni kuathirika 642 00:39:27,230 --> 00:39:29,730 chemsha chini ya watu kuchukua faida ya hii. 643 00:39:29,730 --> 00:39:32,510 Na hii inaweza kuonekana kama mashambulizi super-kisasa, 644 00:39:32,510 --> 00:39:34,220 lakini haina daima kuanza kwa njia hiyo. 645 00:39:34,220 --> 00:39:36,770 >> ukweli ni kwamba watu wabaya itakuwa kawaida kufanya ni, 646 00:39:36,770 --> 00:39:41,470 kama ni mpango katika mstari amri au mpango GUI au tovuti, 647 00:39:41,470 --> 00:39:43,290 ni wewe tu kuanza kutoa nonsense. 648 00:39:43,290 --> 00:39:46,940 Wewe aina katika neno kubwa kweli kweli ndani ya shamba tafuta na hit kuingia, 649 00:39:46,940 --> 00:39:49,030 na kusubiri kuona kama shambulio tovuti. 650 00:39:49,030 --> 00:39:53,270 Au wewe kusubiri kuona kama mpango hudhihirisha baadhi ujumbe wa kosa. 651 00:39:53,270 --> 00:39:55,480 Kwa sababu kama wewe kupata bahati, kama mtu mbaya, 652 00:39:55,480 --> 00:39:59,610 na wewe kutoa baadhi ya pembejeo crazy kwamba shambulio mpango, 653 00:39:59,610 --> 00:40:02,280 kwamba maana ya programu Hawakutarajia tabia yako mbaya 654 00:40:02,280 --> 00:40:05,420 ambayo ina maana unaweza pengine, na juhudi za kutosha, 655 00:40:05,420 --> 00:40:09,870 kutosha kesi na makosa, kufikiri jinsi ya kupigana mashambulizi sahihi zaidi. 656 00:40:09,870 --> 00:40:15,900 Hivyo kama sehemu kubwa ya usalama si tu kuepuka mashambulizi haya kabisa, lakini kuchunguza yao 657 00:40:15,900 --> 00:40:20,250 na kwa kweli kuangalia magogo na kuona ni nini pembejeo mambo kuwa watu typed katika tovuti yako. 658 00:40:20,250 --> 00:40:26,040 Nini tafuta masharti kuwa watu typed katika tovuti yako kwa matumaini ya kufurika baadhi buffer? 659 00:40:26,040 --> 00:40:28,900 Na hii yote majipu chini misingi rahisi ya nini safu, 660 00:40:28,900 --> 00:40:32,510 na nini maana ya kutenga na kutumia kumbukumbu? 661 00:40:32,510 --> 00:40:34,920 Na kuhusiana na kwamba, pia, ni hii. 662 00:40:34,920 --> 00:40:37,520 >> Basi hebu tu mtazamo ndani ya gari ngumu bado tena. 663 00:40:37,520 --> 00:40:40,190 Hivyo, unakumbuka kutoka wiki moja au mbili zilizopita kwamba wakati wewe Drag files 664 00:40:40,190 --> 00:40:45,470 kwa yako kusaga bin au takataka unaweza, nini kitatokea? 665 00:40:45,470 --> 00:40:47,850 [Mwanafunzi] Hakuna. >> Yeah, kitu kabisa. Hatimaye kama wewe kukimbia chini 666 00:40:47,850 --> 00:40:51,370 juu ya nafasi disk, Windows au Mac OS itaanza kufuta faili kwa ajili yenu. 667 00:40:51,370 --> 00:40:53,670 Lakini kama wewe Drag kitu huko, basi ni si wakati wote salama. 668 00:40:53,670 --> 00:40:56,550 Yako yote roomate, rafiki au familia ina kufanya ni bonyeza mara mbili, na voilà. 669 00:40:56,550 --> 00:40:59,720 Kuna mafaili yote sketchy kwamba alijaribu kufuta. 670 00:40:59,720 --> 00:41:02,840 Hivyo wengi wetu angalau kujua kwamba una haki bonyeza au kudhibiti click 671 00:41:02,840 --> 00:41:05,320 na tupu takataka, au kitu kama hicho. 672 00:41:05,320 --> 00:41:07,900 Lakini hata hivyo, kwamba hana kabisa kufanya hila. 673 00:41:07,900 --> 00:41:11,340 Kwa sababu kile kinachotokea wakati una faili kwenye gari yako ngumu 674 00:41:11,340 --> 00:41:14,590 kwamba inawakilisha baadhi ya hati neno au baadhi JPEG? 675 00:41:14,590 --> 00:41:18,820 Na hii inawakilisha gari yako ngumu, na hebu sema hii Sliver hapa inawakilisha kwamba faili, 676 00:41:18,820 --> 00:41:21,640 na ni linajumuisha rundo zima la wa 0 na 1 ya. 677 00:41:21,640 --> 00:41:25,470 Nini kinatokea wakati wewe si tu Drag kwamba faili trashcan au kusaga bin, 678 00:41:25,470 --> 00:41:30,390 lakini pia ni tupu? 679 00:41:30,390 --> 00:41:32,820 Aina ya kitu. Ni si kitu kabisa sasa. 680 00:41:32,820 --> 00:41:37,630 Sasa ni kitu tu, kwa sababu kitu kidogo kinachotokea katika fomu ya meza hii. 681 00:41:37,630 --> 00:41:41,170 Hivyo kuna baadhi ya aina ya database au meza ndani ya kumbukumbu ya kompyuta 682 00:41:41,170 --> 00:41:44,470 kwamba kimsingi ina 1 safu kwa majina files, 683 00:41:44,470 --> 00:41:50,550 na 1 safu kwa ajili ya eneo faili, ambapo hii inaweza kuwa mahali 123, tu idadi random. 684 00:41:50,550 --> 00:41:58,270 Hivyo sisi tupate kuwa na kitu kama x.jpg, na mahali 123. 685 00:41:58,270 --> 00:42:02,870 Na kile kinachotokea basi, wakati wewe tupu takataka yako? 686 00:42:02,870 --> 00:42:06,720 Kwamba huenda mbali. Lakini ni nini si kwenda mbali ni ya 0 na 1 ya. 687 00:42:06,720 --> 00:42:09,690 >> Basi nini, basi, uhusiano na pset 4? 688 00:42:09,690 --> 00:42:13,460 Naam, na pset 4, kwa sababu tu tumekuwa ajali erased 689 00:42:13,460 --> 00:42:15,890 kompakt flash kadi kwamba alikuwa zote za picha hizi, 690 00:42:15,890 --> 00:42:18,710 au kwa sababu tu kwa bahati mbaya akawa kupotoshwa, 691 00:42:18,710 --> 00:42:21,170 haina maana kwamba 0 na 1 ni si bado kuna. 692 00:42:21,170 --> 00:42:23,920 Labda wachache wao ni kupotea kwa sababu kitu got kupotoshwa 693 00:42:23,920 --> 00:42:26,530 kwa maana kwamba baadhi ya 0 1 akawa na 1 akawa 0 wa. 694 00:42:26,530 --> 00:42:30,460 Mambo mabaya yanaweza kutokea kwa sababu ya programu Buggy au defective vifaa. 695 00:42:30,460 --> 00:42:33,510 Lakini wengi wa bits wale, labda hata 100% ya nao ni bado kuna, 696 00:42:33,510 --> 00:42:38,330 ni kwamba tu kompyuta au kamera hajui ambapo JPEG 1 ilianza 697 00:42:38,330 --> 00:42:41,660 na ambapo JPEG 2 kuanza, lakini kama wewe, programu, 698 00:42:41,660 --> 00:42:45,800 kujua, na kidogo ya savvy, ambapo wale JPEGs ni nini au kuangalia kama, 699 00:42:45,800 --> 00:42:49,570 unaweza kuchanganua ya 0 na 1 na kusema, 'Ooh. JPEG. Ooh, JPEG. ' 700 00:42:49,570 --> 00:42:52,830 Unaweza kuandika mpango na kimsingi tu kwa wakati au kitanzi 701 00:42:52,830 --> 00:42:56,100 kwamba recovers kila mmoja na kila mmoja wa wale files. 702 00:42:56,100 --> 00:42:59,360 Hivyo somo basi, ni kuanza "salama" erasing files yako 703 00:42:59,360 --> 00:43:01,720 kama Ningependa ili kuepuka hili kabisa. Ndiyo? 704 00:43:01,720 --> 00:43:06,940 [Mwanafunzi swali, unintelligible] 705 00:43:06,940 --> 00:43:11,150 >> Je kumbukumbu zaidi kuliko alivyofanya kabla - 706 00:43:11,150 --> 00:43:14,790 Oh! Nzuri swali. Hivyo kwa nini, basi, baada ya kuingia takataka, 707 00:43:14,790 --> 00:43:18,300 haina kompyuta yako kukuambia kwamba una zaidi bure nafasi kuliko wewe alifanya mbele? 708 00:43:18,300 --> 00:43:22,450 Kwa kifupi, kwa sababu ni uongo. Zaidi ya kitaalam, una nafasi zaidi. 709 00:43:22,450 --> 00:43:26,720 Kwa sababu sasa wewe kuwa alisema, unaweza kuweka mambo mengine ambapo faili kwamba mara alikuwa, 710 00:43:26,720 --> 00:43:28,930 lakini hiyo haina maana bits ni kwenda mbali, 711 00:43:28,930 --> 00:43:33,070 na hiyo haina maana bits ni kuwa iliyopita wote 0, kwa mfano, kwa kinga yako. 712 00:43:33,070 --> 00:43:37,520 Kwa kulinganisha, kama wewe "salama" erase files, au kimwili kuharibu kifaa, 713 00:43:37,520 --> 00:43:40,810 kwamba kweli ni njia pekee, wakati mwingine, kuzunguka kwamba. 714 00:43:40,810 --> 00:43:45,300 Hivyo kwa nini sisi kuondoka kwamba kumbuka nusu inatisha, na sisi kuona juu ya Jumatatu. 715 00:43:45,300 --> 00:43:52,810 CS50.TV