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