1 00:00:00,000 --> 00:00:02,860 [Powered by Google Translate] [Semèn 5] 2 00:00:02,860 --> 00:00:04,860 [David J. Malan - Inivèsite Harvard] 3 00:00:04,860 --> 00:00:07,260 [Sa a se CS50. - CS50.TV] 4 00:00:07,260 --> 00:00:09,740 >> Sa a se CS50, Semèn 5. 5 00:00:09,740 --> 00:00:12,900 Jodi a ak semèn sa a, nou prezante yon ti kras nan mond lan nan forensics 6 00:00:12,900 --> 00:00:14,850 nan kontèks pwoblèm nan Fikse 4. 7 00:00:14,850 --> 00:00:18,480 Jodi a pral yon konferans abreje paske gen nan yon evènman espesyal nan isit la apre sa. 8 00:00:18,480 --> 00:00:21,940 Se konsa, nou pral pran yon gade vit ak toumante toude elèv yo ak paran yo sanble jodi a 9 00:00:21,940 --> 00:00:24,600 ak kèk nan bagay sa yo ke yo sou orizon an. 10 00:00:24,600 --> 00:00:29,050 >> Nan mitan yo, jan nan Lendi, ou pral gen yon kèk plis kamarad klas. 11 00:00:29,050 --> 00:00:32,980 èdo, Inivèsite Harvard, ak nouvo MIT a sou entènèt inisyativ pou Klas Ouvè ak plis, 12 00:00:32,980 --> 00:00:36,730 ap lanse sou lakou lekòl la Harvard la nan Lendi, ki vle di vini Lendi 13 00:00:36,730 --> 00:00:40,930 w ap gen, kòm nan dènye konte, 86.000 kamarad klas adisyonèl 14 00:00:40,930 --> 00:00:43,680 ki pral swiv ansanm ak konferans CS50 nan ak nan seksyon 15 00:00:43,680 --> 00:00:45,890 ak valktroug epi li kouche pwoblèm. 16 00:00:45,890 --> 00:00:51,870 Ak kòm yon pati nan sa a, ou pral vin manm nan klas la inogirasyon nan CS50 e kounye a, CS50x. 17 00:00:51,870 --> 00:00:56,150 Kòm yon pati nan sa a kounye a, reyalize ke pral gen kèk upsides kòm byen. 18 00:00:56,150 --> 00:01:00,620 Pou jwenn pare pou sa, pou yon nimewo pou la masiv nan elèv yo, 19 00:01:00,620 --> 00:01:03,820 sufi li vle di ke menm si nou gen 108 TFs ak sèrtifikasyon, 20 00:01:03,820 --> 00:01:07,560 li nan pa byen pi bon elèv-rapò pwofesè a yon fwa nou frape 80,000 de elèv yo. 21 00:01:07,560 --> 00:01:09,830 Nou pa pwal yo dwe korije pwoblèm pou anpil moun kouche manuelman, 22 00:01:09,830 --> 00:01:13,050 se konsa entwodwi semèn sa a nan ansanm lan pwoblèm yo pral CS50 chèk, 23 00:01:13,050 --> 00:01:15,410 ki se ale nan yon sèvis piblik bay lòd-liy nan aparèy la 24 00:01:15,410 --> 00:01:17,880 ki ou pral jwenn yon fwa ou mete ajou li pita sa a wikenn. 25 00:01:17,880 --> 00:01:21,030 Ou pral kapab kouri nan yon lòd, check50, sou pset pwòp ou a, 26 00:01:21,030 --> 00:01:24,770 epi ou ap jwenn enstantane fidbak kòm si pwogram ou kòrèk oswa enkòrèk 27 00:01:24,770 --> 00:01:27,980 dapre espesifikasyon konsepsyon divès kalite ke nou te bay la. 28 00:01:27,980 --> 00:01:30,310 Plis sou sa nan spesifikasyon la ansanm pwoblèm. 29 00:01:30,310 --> 00:01:34,220 Kamarad klas yo CS50x yo pral sèvi ak sa a kòm byen. 30 00:01:34,220 --> 00:01:36,170 >> Set pwoblèm 4 se tout sou forensics, 31 00:01:36,170 --> 00:01:38,630 ak sa a te pset vrèman enspire pa kèk bagay lavi reyèl 32 00:01:38,630 --> 00:01:41,210 kote lè m 'te nan lekòl gradye mwen entèrne pou yon ti tan 33 00:01:41,210 --> 00:01:45,270 avèk biwo Komisè Gouvènman Middlesex County a nan fè travay legal 34 00:01:45,270 --> 00:01:47,660 avèk anketè plon yo legal. 35 00:01:47,660 --> 00:01:50,280 Ki sa sa elve a, jan mwen panse ke mwen mansyone yon kèk semèn sot pase yo, 36 00:01:50,280 --> 00:01:52,720 se Polis la Eta Mass oswa lòt moun t 'vle vini an, 37 00:01:52,720 --> 00:01:56,150 yo ta depoze bagay sa yo tankou kondui difisil ak CD ak disk flou ak renmen an, 38 00:01:56,150 --> 00:01:58,770 ak Lè sa a, objektif la nan biwo a forensics te rann kont 39 00:01:58,770 --> 00:02:01,470 si te gen oswa pa t 'prèv ki montre kèk sòt. 40 00:02:01,470 --> 00:02:04,730 Sa a te Espesyal Envestigasyon Inite a, se konsa li te blan-kolye krim. 41 00:02:04,730 --> 00:02:10,949 Li te plis boulvèsan sòt de krim, anyen ki enplike kèk kalite medya dijital. 42 00:02:10,949 --> 00:02:16,450 Li sanble ke pa ke anpil moun ekri yon imel di, "Mwen te fè li." 43 00:02:16,450 --> 00:02:20,490 Se konsa, byen souvan, sa yo fouye legal pa t 'vire leve tout sa ki fwi anpil, 44 00:02:20,490 --> 00:02:22,820 men pafwa moun ki ta ekri Imèl sa yo. 45 00:02:22,820 --> 00:02:25,240 Se konsa, pafwa, efò yo te rekonpans. 46 00:02:25,240 --> 00:02:31,210 >> Men, yo mennen jiska sa a pset legal, nou pral entwodwi nan pset4 yon ti jan nan grafik. 47 00:02:31,210 --> 00:02:35,410 Ou pwobableman pran tout bagay sa yo pou yo akòde - JPEGs, jif, ak renmen an - jou sa yo. 48 00:02:35,410 --> 00:02:38,320 Men, si ou reyèlman panse sou li, yon imaj, anpil tankou figi Rob a, 49 00:02:38,320 --> 00:02:41,270 yo ta ka modelize kòm yon sekans pwen oswa piksèl. 50 00:02:41,270 --> 00:02:43,380 Nan ka nan figi Rob a, gen nan tout kalite koulè, 51 00:02:43,380 --> 00:02:46,760 epi nou te kòmanse wè pwen yo endividyèl, ki te rekonèt kòm piksèl, 52 00:02:46,760 --> 00:02:48,610 yon fwa nou te kòmanse nan zoom pous 53 00:02:48,610 --> 00:02:54,660 Men, si nou senplifye mond lan yon ti jan ak jis di ke sa a isit la se Rob nan nwa ak blan, 54 00:02:54,660 --> 00:02:57,490 ki reprezante nwa ak blan, nou ka jis itilize binè. 55 00:02:57,490 --> 00:03:01,660 Men, si nou pwal sèvi ak binè, 1 oswa 0, nou ka eksprime imaj sa a menm 56 00:03:01,660 --> 00:03:06,140 nan souri figi Rob a ak modèl sa a nan miyèt moso. 57 00:03:06,140 --> 00:03:12,100 11000011 reprezante blan, blan, nwa, nwa, nwa, nwa, blan, blan. 58 00:03:12,100 --> 00:03:16,150 Se konsa, li pa yon bon gwo Lè sa a, yo kòmanse ap pale de foto kolore, 59 00:03:16,150 --> 00:03:18,600 bagay sa yo ke ou ta wè sou Facebook oswa pran avèk yon kamera dijital. 60 00:03:18,600 --> 00:03:21,410 Men, sètènman lè li rive koulè, ou bezwen plis miyèt moso. 61 00:03:21,410 --> 00:03:25,690 Ak konplètman ki komen nan mond lan nan foto se sèvi ak pa 1-ti jan koulè po, 62 00:03:25,690 --> 00:03:29,560 tankou sa a sijere, men 24-bit koulè, kote ou aktyèlman jwenn dè milyon de koulè. 63 00:03:29,560 --> 00:03:32,250 Se konsa, tankou nan ka a lè nou agrandi nan sou je Rob a, 64 00:03:32,250 --> 00:03:36,370 sa yo ki te nenpòt ki kantite dè milyon de posiblite diferan kolore. 65 00:03:36,370 --> 00:03:39,040 Se konsa, nou pral prezante sa a nan Set Pwoblèm 4 osi byen ke nan solisyon an, 66 00:03:39,040 --> 00:03:43,370 ki pral jounen jodi a nan 3:30 olye pou yo 2:30 a jan li konn ye paske nan konferans Vandredi a isit la. 67 00:03:43,370 --> 00:03:46,620 Men, videyo yo pral sou entènèt tankou demen dabitid. 68 00:03:46,620 --> 00:03:48,820 >> Nou pwal tou entwodui ou nan yon lòt fòma dosye-a. 69 00:03:48,820 --> 00:03:51,270 Sa a se fè espre vle di ke yo gade entimidasyon an premye, 70 00:03:51,270 --> 00:03:55,670 men sa a se sèlman kèk dokiman pou yon struct C. 71 00:03:55,670 --> 00:03:58,940 Li sanble ke Microsoft ane de sa te ede popilarize fòma sa a 72 00:03:58,940 --> 00:04:05,150 rele fòma a dosye bitmap, BMP, ak sa a te yon Super senp, kolore fòma grafik dosye 73 00:04:05,150 --> 00:04:10,150 ki te itilize pou kèk tan e pafwa toujou pou pen sou Bureau. 74 00:04:10,150 --> 00:04:14,760 Si ou panse tounen nan Windows XP ak ti mòn yo woule epi syèl la ble, 75 00:04:14,760 --> 00:04:17,170 sa yo ki te tipikman yon imaj BMP oswa bitmap. 76 00:04:17,170 --> 00:04:19,959 Bitmap yo plezi pou nou paske yo gen yon ti jan pi plis konpleksite. 77 00:04:19,959 --> 00:04:22,610 Li pa byen kòm senp tankou gri sa a nan 0s ak 1S. 78 00:04:22,610 --> 00:04:27,510 Olye de sa, ou gen bagay sa yo tankou yon header nan kòmansman an nan yon dosye. 79 00:04:27,510 --> 00:04:31,990 Se konsa, nan lòt mo, andedan yon. Dosye BMP se yon pakèt antye nan 0s ak 1, 80 00:04:31,990 --> 00:04:34,910 , men tou genyen kèk 0s adisyonèl ak 1S an la. 81 00:04:34,910 --> 00:04:38,220 Epi li sanble ke sa nou te pwobableman pran pou yo akòde pou ane - 82 00:04:38,220 --> 00:04:45,170 dosye fòma tankou. oswa doktè. xls oswa. mp3,. mp4, kèlkeswa sa fòma yo ranpli 83 00:04:45,170 --> 00:04:48,480 ke ou se abitye avèk - ki sa li menm vle di yo dwe yon fòma ranpli, 84 00:04:48,480 --> 00:04:52,480 paske nan fen jou a, tout moun sa yo dosye nou itilize gen jis 0s ak 1S. 85 00:04:52,480 --> 00:04:56,810 E petèt sa yo 0s ak 1S reprezante ABC nan ASCII oswa tankou an, 86 00:04:56,810 --> 00:04:58,820 men nan fen jou a, li la toujou jis 0s ak 1S. 87 00:04:58,820 --> 00:05:02,100 Se konsa, moun detanzantan sèlman deside envante yon fòma dosye nouvo 88 00:05:02,100 --> 00:05:06,420 kote yo estandadize sa ki modèl nan Bits pral aktyèlman vle di. 89 00:05:06,420 --> 00:05:09,220 Ak nan ka sa a isit la, jan yo ki fèt fòma a dosye bitmap 90 00:05:09,220 --> 00:05:15,620 te di ke nan multiple la nan yon dosye bitmap trè premye, kòm deziye pa konpanse 0 a, 91 00:05:15,620 --> 00:05:18,940 gen a pwal kèk cryptically te rele varyab bfType rele, 92 00:05:18,940 --> 00:05:23,080 ki jis kanpe pou di ki kalite dosye bitmap, ki kalite dosye bitmap se sa a. 93 00:05:23,080 --> 00:05:27,700 Ou ka dégager petèt nan dezyèm ranje a, ki konpanse 2, nimewo multiple 2, 94 00:05:27,700 --> 00:05:33,740 gen yon modèl nan 0s ak 1S ki reprezante ki sa? Gwosè a nan yon bagay. 95 00:05:33,740 --> 00:05:35,310 Epi li ale sou apati de la. 96 00:05:35,310 --> 00:05:37,410 Se konsa, nan Set Pwoblèm 4, ou pral te mache nan tout kèk nan bagay sa yo. 97 00:05:37,410 --> 00:05:39,520 Nou pa pral fini pran swen sou tout nan yo. 98 00:05:39,520 --> 00:05:47,510 Men, remake li kòmanse jwenn enteresan alantou multiple 54: rgbtBlue, vèt, ak Wouj yo. 99 00:05:47,510 --> 00:05:52,110 Si ou te janm tande akwonim nan rgb - wouj, vèt, koulè ble - sa a se yon referans ak sa yo ki 100 00:05:52,110 --> 00:05:54,610 paske li vire soti ou ka penti tout koulè yo nan lakansyèl la va 101 00:05:54,610 --> 00:05:58,180 ak kèk konbinezon de wouj ak ble ak vèt. 102 00:05:58,180 --> 00:06:03,320 Ak an reyalite, paran yo nan sal la ta ka sonje kèk nan projèkteur yo pi bonè. 103 00:06:03,320 --> 00:06:05,890 Jou sa yo, ou jis wè youn klere limyè t'ap soti nan yon lantiy, 104 00:06:05,890 --> 00:06:09,800 men li tounen nan jou a, ou te gen lantiy la wouj, lantiy la ble, ak lantiy la vèt, 105 00:06:09,800 --> 00:06:13,380 ak ansanm yo ki vize a yon ekran ak fòme yon foto kolore. 106 00:06:13,380 --> 00:06:16,270 Ak byen souvan, lekòl presegondè ak lekòl segondè ta gen sa yo lantiy 107 00:06:16,270 --> 00:06:19,720 janm konsa yon ti kras krochi, se konsa ou te sòt de wè foto doub oswa trip. 108 00:06:19,720 --> 00:06:24,100 Men, sa ki te lide la. Ou te gen limyè wouj ak vèt ak ble pentire yon foto. 109 00:06:24,100 --> 00:06:26,590 Epi li se ki prensip menm yo itilize nan òdinatè. 110 00:06:26,590 --> 00:06:30,230 >> Se konsa, nan mitan defi yo Lè sa a, pou ou nan Pwoblèm Set 4 pwal gen yon bagay kèk. 111 00:06:30,230 --> 00:06:34,800 Youn nan se aktyèlman Rdimansyone yon imaj, yo pran nan yon seri 0s ak 1, 112 00:06:34,800 --> 00:06:40,200 konnen ki sègman nan 0s ak 1S reprezante sa ki nan yon estrikti tankou sa a, 113 00:06:40,200 --> 00:06:43,630 ak Lè sa a, figi l kòman répliquer piksèl yo - wouj yo, blues yo, vèt yo - 114 00:06:43,630 --> 00:06:46,660 andedan an pou ke lè yon foto sanble tankou sa a okòmansman, 115 00:06:46,660 --> 00:06:49,210 li ta ka gade tankou sa a olye apre sa. 116 00:06:49,210 --> 00:06:53,640 Pami defi lòt yo tou a pwal ke ou pral lage yon imaj legal 117 00:06:53,640 --> 00:06:56,030 nan yon dosye aktyèl soti nan yon kamera dijital. 118 00:06:56,030 --> 00:06:58,960 Yo, epi sou ki kamera, yon fwa sou yon tan, te yon pakèt antye nan foto yo. 119 00:06:58,960 --> 00:07:03,760 Pwoblèm nan se nou aksidantèlman efase oswa ou te gen imaj la pèvèti yon jan kanmenm. 120 00:07:03,760 --> 00:07:05,750 Move bagay rive ak kamera dijital. 121 00:07:05,750 --> 00:07:09,150 Se konsa, nou byen vit kopye tout nan sa a nan kat 0s ak 1S pou ou, 122 00:07:09,150 --> 00:07:13,610 sove yo tout nan yon sèl dosye gwo, ak Lè sa a, nou pral lage yo jwenn ou nan Pwoblèm Fikse 4 123 00:07:13,610 --> 00:07:19,320 pou ke ou ka ekri yon pwogram nan C ak ki refè tout moun ki JPEGs, depreferans. 124 00:07:19,320 --> 00:07:23,330 Epi li sanble ke JPEGs, menm si yo ap yon ti jan nan yon fòma dosye konplèks - 125 00:07:23,330 --> 00:07:26,360 yo ap pi plis konplèks pase sa a figi souri isit la - 126 00:07:26,360 --> 00:07:31,160 li vire soti ke chak JPEG kòmanse ak modèl yo menm nan 0s ak 1S. 127 00:07:31,160 --> 00:07:35,630 Se konsa, lè l sèvi avèk, finalman, yon riban pandan y ap oswa yon pou riban oswa ki similè yo, 128 00:07:35,630 --> 00:07:38,880 ou ka rèspèté sou tout 0s la ak 1S nan imaj sa a legal, 129 00:07:38,880 --> 00:07:43,150 ak tout tan ou wè modèl la espesyal ki nan sa defini nan spesifikasyon la ansanm pwoblèm, 130 00:07:43,150 --> 00:07:47,880 ou ka asime isit la se, ak pwobabilite wo anpil, nan kòmansman an nan yon JPEG. 131 00:07:47,880 --> 00:07:51,230 Ak le pli vit ke ou jwenn modèl la menm kèk nimewo nan bytes 132 00:07:51,230 --> 00:07:55,430 oswa kilookte oswa megabit pita, ou ka asime isit la se yon JPEG dezyèm fwa, 133 00:07:55,430 --> 00:07:57,380 foto a mwen te pran apre premye a. 134 00:07:57,380 --> 00:08:01,370 Kite m 'sispann li ki dosye premye, kòmanse ekri yon sèl sa a nouvo, 135 00:08:01,370 --> 00:08:06,310 ak pwodiksyon an nan pwogram ou an pou pset4 a pwal kòm anpil 50 JPEGs. 136 00:08:06,310 --> 00:08:09,270 Men, si li pa 50 JPEGs, ou gen yon ti jan nan yon riban. 137 00:08:09,270 --> 00:08:12,490 Si ou gen yon nonb infini nan JPEGs, ou gen yon riban enfini. 138 00:08:12,490 --> 00:08:14,910 Se konsa, ki twò yo pral byen yon ka komen. 139 00:08:14,910 --> 00:08:16,600 Se konsa, sa a, se sa ki la sou orizon an. 140 00:08:16,600 --> 00:08:21,310 >> Kwiz 0 dèyè nou, reyalize pou chak imel mwen ki toujours gen jan ki tou de se kè kontan, 141 00:08:21,310 --> 00:08:23,640 sòt de tan net, ak tris alantou egzamen 0. 142 00:08:23,640 --> 00:08:26,800 Ak tanpri rive jwenn soti nan m ', tèt tf Zamyla a, tf pwòp ou a, 143 00:08:26,800 --> 00:08:31,180 oswa nan yonn nan sèrtifikasyon la ke ou konnen si ou ta renmen diskite ki jan bagay yo te ale. 144 00:08:31,180 --> 00:08:35,539 >> Se konsa, enpresyone paran yo isit la nan sal la, ki nan bibliyotèk la CS50? 145 00:08:36,429 --> 00:08:40,390 [Ri] Bon travay. 146 00:08:40,390 --> 00:08:48,340 Ki sa ki nan bibliyotèk la CS50? Yeah. >> [Elèv] Li se yon seri ki ekri davans nan kòd [fèbl] 147 00:08:48,340 --> 00:08:49,750 Okay, bon. 148 00:08:49,750 --> 00:08:53,240 Li se yon seri ki ekri davans nan kòd ke nou anplwaye a te ekri a, nou bay nou la a, 149 00:08:53,240 --> 00:08:55,030 ki bay kèk fonctionnalités komen, 150 00:08:55,030 --> 00:08:59,020 bagay tankou jwenn m 'yon fisèl, jwenn m' yon int - tout nan fonksyon yo ke yo lis isit la. 151 00:08:59,020 --> 00:09:02,260 >> Kòmanse kounye a, nou kòmanse reyèlman pran sa yo wou fòmasyon an. 152 00:09:02,260 --> 00:09:05,050 Nou pwal kòmanse retire nan men yo yon fisèl nan men ou, 153 00:09:05,050 --> 00:09:08,870 ki rantre te jis yon sinonim pou sa ki reyèl ki kalite done? >> [Elèv yo miltip] Char *. 154 00:09:08,870 --> 00:09:12,730 Char *. Pou paran yo, sa ki te pwobableman [fè whooshing son]. Sa a se bon. 155 00:09:12,730 --> 00:09:17,550 Char * nou pral kòmanse wè sou ekran an tout plis an kòm nou retire fisèl soti nan vokabilè nou an, 156 00:09:17,550 --> 00:09:19,730 omwen lè li rive aktyèlman ekri kòd. 157 00:09:19,730 --> 00:09:22,840 Menm jan tou, nou pral sispann lè l sèvi avèk kèk nan sa yo fonksyon kòm anpil 158 00:09:22,840 --> 00:09:25,280 paske pwogram nou yo ale nan jwenn pi plis sofistike. 159 00:09:25,280 --> 00:09:28,480 Olye ke sèlman ekri pwogram ki chita la ansanm ak yon kliyote rapid, 160 00:09:28,480 --> 00:09:31,870 ap tann pou itilizatè a pou tape yon bagay nan, ou pral jwenn entrain ou soti nan yon lòt kote. 161 00:09:31,870 --> 00:09:35,490 Pou egzanp, ou pral jwenn yo soti nan yon seri de Bits sou kondwi a lokal difisil. 162 00:09:35,490 --> 00:09:38,580 Ou ap olye jwenn yo nan tan kap vini an nan yon koneksyon rezo a, 163 00:09:38,580 --> 00:09:40,230 kèk sit entènèt kèk kote. 164 00:09:40,230 --> 00:09:44,110 >> Se konsa, kite a kale tounen kouch sa a la pou premye fwa e ki rale moute Aparèy la CS50 165 00:09:44,110 --> 00:09:49,010 ak sa a ranpli rele cs50.h, ki ou ve yo te # enkli pou semèn, 166 00:09:49,010 --> 00:09:51,140 Men, kite a aktyèlman wè sa ki sa ki andedan sa a. 167 00:09:51,140 --> 00:09:54,430 Tèt la nan dosye a nan twal ble se jis yon pakèt antye nan kòmantè: 168 00:09:54,430 --> 00:09:57,050 enfòmasyon garanti ak lisans. 169 00:09:57,050 --> 00:09:59,050 Sa a se sòt de yon paradigm komen nan lojisyèl 170 00:09:59,050 --> 00:10:01,580 paske yon anpil nan lojisyèl jou sa yo se sa ki yo rele louvri sous, 171 00:10:01,580 --> 00:10:05,220 ki vle di ke yon moun te ekri kòd la e li te fè se gratis tou ki disponib 172 00:10:05,220 --> 00:10:10,470 pa sèlman nan kouri li sèvi ak men yo aktyèlman li ak chanje ak entegre nan travay pwòp ou yo. 173 00:10:10,470 --> 00:10:14,660 Se konsa, se sa ki ou ve yo te lè l sèvi avèk, louvri sous lojisyèl, kwake nan yon fòm ki piti anpil. 174 00:10:14,660 --> 00:10:18,560 Si m 'desann sot pase kòmantè yo, menm si, nou pral kòmanse wè kèk bagay pi plis yo konnen yo. 175 00:10:18,560 --> 00:10:25,010 Avi nan tèt la isit la ke dosye a cs50.h gen ladan yon pakèt antye nan dosye header. 176 00:10:25,010 --> 00:10:28,560 Pifò nan sa yo, nou pa t 'wè anvan, men se yon sèl yo konnen yo. 177 00:10:28,560 --> 00:10:32,270 Kilès nan sa yo te wè nou, byen yon ti tan, konsa byen lwen? >> [Elèv] Creole bibliyotèk la. 178 00:10:32,270 --> 00:10:35,810 Yeah, estanda bibliyotèk la. stdlib.h gen malok. 179 00:10:35,810 --> 00:10:38,320 Yon fwa nou kòmanse te kòmanse pale sou alokasyon memwa dinamik, 180 00:10:38,320 --> 00:10:41,650 ki nou pral tounen vin jwenn semèn pwochèn kòm byen, nou te kòmanse ki gen ladan ki dosye. 181 00:10:41,650 --> 00:10:46,640 Li sanble ke bouleen ak vrè ak fo pa aktyèlman egziste nan C se pou chak 182 00:10:46,640 --> 00:10:49,440 sof si ou gen ladan yo sa a ranpli isit la. 183 00:10:49,440 --> 00:10:52,710 Nou te pou semèn yo te ki gen ladan stdbool.h 184 00:10:52,710 --> 00:10:55,620 pou ke ou ka sèvi ak nosyon a nan yon. bouleen, vre oubyen fo 185 00:10:55,620 --> 00:10:58,620 San yo pa sa, ou ta gen yo sòt de fo li epi sèvi ak yon int 186 00:10:58,620 --> 00:11:02,610 ak jis abitrèman asime ke 0 se fo ak 1 a se verite. 187 00:11:02,610 --> 00:11:07,150 Si nou desann pi lwen, isit la se definisyon nou an yon kòd. 188 00:11:07,150 --> 00:11:11,390 Li sanble soti, kòm nou te di anvan, sa ki kote sa a zetwal se pa reyèlman gen pwoblèm. 189 00:11:11,390 --> 00:11:13,720 Ou ka menm gen espas tout alantou. 190 00:11:13,720 --> 00:11:16,740 Nou sa a semès yo te fè pwomosyon li kòm sa a fè klè 191 00:11:16,740 --> 00:11:18,620 ki zetwal la te fè avèk kalite a, 192 00:11:18,620 --> 00:11:21,700 men mwen reyalize menm jan komen, si pa yon ti kras plis komen, 193 00:11:21,700 --> 00:11:24,430 se mete l 'la, men fonksyonèl li nan menm bagay la. 194 00:11:24,430 --> 00:11:27,720 Men koulye a, si nou li desann pi lwen, kite a pran yon gade nan GetInt 195 00:11:27,720 --> 00:11:32,190 paske nou te itilize ke petèt premye anvan tout bagay sa a semès la. 196 00:11:32,190 --> 00:11:37,440 Isit la se GetInt. Sa a se ki sa? >> [Elèv] Yon pwototip. >> Sa a se jis yon pwototip. 197 00:11:37,440 --> 00:11:41,410 Souvan, nou te mete prototip nan tèt yo nan nou an. Dosye c, 198 00:11:41,410 --> 00:11:46,690 men ou ka mete tou prototip nan dosye header,. h dosye, tankou sa a yon sèl isit la 199 00:11:46,690 --> 00:11:50,840 konsa, lè w ekri kèk fonksyon ke ou vle lòt moun pou kapab itilize, 200 00:11:50,840 --> 00:11:53,550 ki se ekzakteman ka a ak bibliyotèk la CS50, 201 00:11:53,550 --> 00:11:57,040 ou pa sèlman aplike fonksyon ou a nan yon bagay tankou cs50.c, 202 00:11:57,040 --> 00:12:02,790 nou menm tou nou mete prototip yo pa nan tèt la nan ke dosye men nan tèt la nan yon dosye header. 203 00:12:02,790 --> 00:12:07,170 Lè sa a, ki dosye header se sa ki zanmi ak kòlèg gen ladan yo 204 00:12:07,170 --> 00:12:09,760 ak # enkli nan kòd pwòp yo. 205 00:12:09,760 --> 00:12:12,210 Se konsa, tout tan tout tan sa a, ou ve yo te ki gen ladan tout moun sa yo prototip, 206 00:12:12,210 --> 00:12:16,580 efektivman nan tèt la nan dosye ou, men pa fason pou sa a gen ladan # mekanis, 207 00:12:16,580 --> 00:12:20,070 ki esansyèlman kopi ak kole sa a ranpli nan pwòp ou yo. 208 00:12:20,070 --> 00:12:23,070 Isit la se kèk dokiman san patipri detaye. 209 00:12:23,070 --> 00:12:25,640 Nou te bèl anpil pran pou yo akòde ki GetInt vin yon int, 210 00:12:25,640 --> 00:12:27,640 men li vire soti, gen kèk ka kwen. 211 00:12:27,640 --> 00:12:31,810 E si itilizatè a kalite nan yon chif ki nan wout twò gwo, yon quintillion, 212 00:12:31,810 --> 00:12:35,490 ki jis pa ka anfòm andedan nan yon int? Ki sa ki se yon konpòtman ki a prévu? 213 00:12:35,490 --> 00:12:38,020 Idealman, li nan previzib. 214 00:12:38,020 --> 00:12:40,280 Se konsa, nan ka sa a, si ou aktyèlman li enprime la amann, 215 00:12:40,280 --> 00:12:44,500 ou pral aktyèlman wè ke si liy la pa kapab li, sa a INT_MAX retounen. 216 00:12:44,500 --> 00:12:48,320 Nou pa janm te te pale osijè de sa a, men ki baze sou majiskil li yo, ki sa li pwobableman? 217 00:12:48,320 --> 00:12:50,640 [Elèv] Yon konstan. >> Li se yon konstan. 218 00:12:50,640 --> 00:12:54,770 Li nan kèk konstan espesyal ke sa ka petèt te deklare nan youn nan moun ki dosye header 219 00:12:54,770 --> 00:13:00,090 sa a, se moute pi wo nan dosye a, ak INT_MAX se pwobableman yon bagay tankou apeprè 2 milya dola, 220 00:13:00,090 --> 00:13:04,990 lide a ke yo te sa paske nou bezwen yon jan kanmenm siyifi ke yon bagay ale mal, 221 00:13:04,990 --> 00:13:10,700 nou menm, se wi, gen 4 milya dola nimewo a jete nou an: -2 milya dola sou jiska 2 milya dola, bay oswa pran. 222 00:13:10,700 --> 00:13:14,710 Oke, sa se komen nan pwogramasyon se ou vòlè jis youn nan moun ki nimewo, 223 00:13:14,710 --> 00:13:18,920 petèt 0, petèt 2 milya dola, petèt -2 milya dola, 224 00:13:18,920 --> 00:13:23,280 konsa ou depanse youn nan valè posib ou pou sa ou kapab komèt nan mond lan 225 00:13:23,280 --> 00:13:26,820 ke si yon bagay ale mal, m'ap tounen sa a super valè gwo. 226 00:13:26,820 --> 00:13:31,030 Men, ou pa vle itilizatè a sezisman yon bagay skre tankou 234 ..., yon nimewo reyèlman gwo. 227 00:13:31,030 --> 00:13:34,060 Ou jeneralizasyon li olye kòm yon konstan. 228 00:13:34,060 --> 00:13:38,060 Se konsa, reyèlman, si ou te ke yo te nan dèyè sot pase semèn yo kèk, nenpòt ki lè ou rele GetInt, 229 00:13:38,060 --> 00:13:42,900 ou ta dwe yo te tcheke avèk yon si kondisyon te fè kalite nan itilizatè nan INT_MAX, 230 00:13:42,900 --> 00:13:46,590 oswa, plis espesyalman, te fè GetInt INT_MAX retou, paske si li te fè, 231 00:13:46,590 --> 00:13:51,830 ki aktyèlman vle di yo pa t 'tape li. Yon bagay ale mal nan ka sa a. 232 00:13:51,830 --> 00:13:56,080 Se konsa, sa a se sa ki jeneralman li te ye tankou yon valè Sentinel, ki jis vle di espesyal. 233 00:13:56,080 --> 00:13:58,120 >> Se pou nou kounye a vire nan. Dosye a c. 234 00:13:58,120 --> 00:14:01,340 Te dosye a C te egziste nan aparèy la pou kèk tan. 235 00:14:01,340 --> 00:14:06,840 Ak an reyalite, aparèy la gen li pre-konpile pou nou antre nan ke bagay nou te rele kòd objè, 236 00:14:06,840 --> 00:14:09,540 men li jis pa enpòtan ba ou kote li se paske sistèm nan konnen 237 00:14:09,540 --> 00:14:11,730 nan ka sa a kote li se: aparèy la. 238 00:14:11,730 --> 00:14:17,400 Se pou nou desann kounye a nan GetInt ak wè kòman GetInt ki te travay tout tan sa a. 239 00:14:17,400 --> 00:14:19,460 Isit la nou gen kòmantè similè nan anvan. 240 00:14:19,460 --> 00:14:21,660 Kite m 'rale nan sou jis pòsyon nan kòd. 241 00:14:21,660 --> 00:14:23,900 Ak sa nou genyen pou GetInt se sa ki annapre yo. 242 00:14:23,900 --> 00:14:25,700 Li pa pran opinyon. 243 00:14:25,700 --> 00:14:29,510 Li retounen yon int, pandan y ap (vrè), konsa nou gen yon ekspre riban enfini, 244 00:14:29,510 --> 00:14:33,180 men prezimableman nou pral kraze soti nan sa a yon jan kanmenm oswa retounen soti nan sa a. 245 00:14:33,180 --> 00:14:34,870 >> Ann gade pou wè ki jan sa a travay. 246 00:14:34,870 --> 00:14:39,240 Nou yo sanble yo dwe lè l sèvi avèk GetString nan liy sa a premye andedan riban a, 166. 247 00:14:39,240 --> 00:14:43,780 Sa a se kounye a bon pratik paske anba ki sikonstans te kapab GetString retounen 248 00:14:43,780 --> 00:14:47,660 nil nan mo kle espesyal? >> [Elèv] Si gen yon bagay ale mal. 249 00:14:47,660 --> 00:14:51,630 Si gen yon bagay ale mal. Ak ki sa ki kapab ale mal lè w rele yon bagay tankou GetString? 250 00:14:54,960 --> 00:14:57,640 Yeah. >> [Elèv] malok echwe bay li antye yo. 251 00:14:57,640 --> 00:14:59,150 Yeah. Petèt malok echwe. 252 00:14:59,150 --> 00:15:03,190 Yon kote anba kapo machin lan, GetString ap rele malok, ki repati memwa, 253 00:15:03,190 --> 00:15:06,020 ki pèmèt magazen an òdinatè tout nan karaktè yo ki 254 00:15:06,020 --> 00:15:07,750 ki itilizatè a kalite nan klavye la. 255 00:15:07,750 --> 00:15:11,590 Ak ta kwè itilizatè a te gen yon anpil tout tan lib ak tape plis, pou egzanp, 256 00:15:11,590 --> 00:15:16,160 pase 2 milya dola karaktè nan, plis karaktè pase òdinatè a menm gen RAM. 257 00:15:16,160 --> 00:15:19,250 GetString gen pou kapab siyifi ke ou yo. 258 00:15:19,250 --> 00:15:22,560 Menm si sa a se yon Super, ka super estraòdinè kwen, 259 00:15:22,560 --> 00:15:24,340 li te yon jan kanmenm kapab okipe sa a, 260 00:15:24,340 --> 00:15:28,750 ak sa GetString, si nou te ale retounen lakay yo epi li dokiman li yo, fè sa ki nan nil retounen reyalite. 261 00:15:28,750 --> 00:15:34,460 Se konsa, kounye a si GetString echwe ki te retounen nil, GetInt ki pral fail ki te retounen INT_MAX 262 00:15:34,460 --> 00:15:37,690 jis kòm yon Sentinel. Sa yo se sèlman konvansyon imen. 263 00:15:37,690 --> 00:15:41,450 Sèl fason pou nou ta konnen sa a se ka a se nan li dokiman an. 264 00:15:41,450 --> 00:15:45,040 >> Se pou nou woulo liv desann nan ki kote int a aktyèlman resevwa yo. 265 00:15:45,040 --> 00:15:51,160 Si m 'desann yon ti jan pi lwen, nan liy 170, nou gen yon kòmantè pi wo a liy sa yo. 266 00:15:51,160 --> 00:15:55,100 Nou deklare nan 172 yon int, n, ak yon Char, C, ak Lè sa a, sa a fonksyon nouvo, 267 00:15:55,100 --> 00:15:58,930 ki kèk nan nou te bite sou anvan, sskanf. 268 00:15:58,930 --> 00:16:00,870 Sa a kanpe pou skanf fisèl. 269 00:16:00,870 --> 00:16:05,700 Nan lòt mo, ban m 'yon kòd epi mwen pral analysis li pou pyès enfòmasyon nan enterè yo. 270 00:16:05,700 --> 00:16:07,360 Kisa sa vle di? 271 00:16:07,360 --> 00:16:11,800 Sipoze ke mwen tape nan, literalman, 123 nan klavye a ak Lè sa a, frape Mete. 272 00:16:11,800 --> 00:16:16,470 Ki sa ki kalite nan done a 123 lè tounen pa GetString? >> [Elèv] chèn. 273 00:16:16,470 --> 00:16:18,380 Li nan evidamman yon fisèl, dwa? Mwen te resevwa yon fisèl. 274 00:16:18,380 --> 00:16:23,220 Se konsa, 123 se reyèlman, quote-unquote, 123 ak 0 a \ nan fen li. 275 00:16:23,220 --> 00:16:27,110 Sa se pa yon int. Sa se pa yon nimewo. Li sanble ke yon nimewo men li la pa aktyèlman. 276 00:16:27,110 --> 00:16:29,080 Se konsa, sa GetInt dwe fè? 277 00:16:29,080 --> 00:16:35,750 Li te gen analysis ki fisèl gòch a dwat - 123 \ 0 - ak yon jan kanmenm konvèti nan yon nonb antye relatif vrè. 278 00:16:35,750 --> 00:16:37,850 Ou te kapab konnen ki jan fè sa. 279 00:16:37,850 --> 00:16:41,450 Si ou panse tounen nan pset2, ou prezimableman te yon ti konfòtab ak Seza tande kòz 280 00:16:41,450 --> 00:16:44,820 oswa Vigenere, pou ou kapab repekte sou yon fisèl, ou ka konvèti charaktèr antye. 281 00:16:44,820 --> 00:16:46,710 Men, èk, li nan yon anpil tout travay. 282 00:16:46,710 --> 00:16:49,860 Poukisa nou pa rele yon fonksyon tankou sskanf ki fè ke pou ou? 283 00:16:49,860 --> 00:16:54,230 Se konsa, sskanf espere gen yon diskisyon - nan ka sa a yo rele liy, ki se yon fisèl. 284 00:16:54,230 --> 00:17:01,840 Ou Lè sa a, presize nan quotes, anpil menm jan ak printf, ki sa ou espere wè nan sa a fisèl. 285 00:17:01,840 --> 00:17:09,000 Ak sa m ap di isit la se mwen espere wè yon nonb desimal ak petèt karaktè yon. 286 00:17:09,000 --> 00:17:12,000 Epitou, n ap wè poukisa sa a se ka a nan jis moman yon. 287 00:17:12,000 --> 00:17:15,869 Epi li vire soti ke sa a notasyon se kounye a okoumansman de bagay nou te kòmanse pale sou 288 00:17:15,869 --> 00:17:17,619 jis pase yon semèn de sa. 289 00:17:17,619 --> 00:17:21,740 Ki sa ki se & n ak & c ap fè pou nou isit la? >> [Elèv] Adrès moun ki n ak adrès c. 290 00:17:21,740 --> 00:17:25,400 Yeah. Li nan bay m 'adrès ki nan n ak adrès c. Poukisa se sa enpòtan? 291 00:17:25,400 --> 00:17:30,220 Ou konnen ak fonksyon nan C, ou ka toujou retounen yon valè oswa valè pa gen okenn nan tout. 292 00:17:30,220 --> 00:17:34,530 Ou ka retounen yon int, fisèl yon, flote yon, yon Char, kèlkeswa sa, oswa ou ka retounen san valè, 293 00:17:34,530 --> 00:17:38,030 men ou ka sèlman retounen yon sèl bagay omaksimòm. 294 00:17:38,030 --> 00:17:42,760 Men, isit la nou vle sskanf retounen m 'petèt yon int, yon nonb desimal, 295 00:17:42,760 --> 00:17:46,220 epi tou li yon Char, epi mwen pral eksplike poukisa Char la nan yon moman. 296 00:17:46,220 --> 00:17:51,460 Ou efektivman vle sskanf retounen de bagay sa yo, men sa a jis pa posib nan C. 297 00:17:51,460 --> 00:17:55,200 Ou ka travay alantou ki pa pase nan de adrès 298 00:17:55,200 --> 00:17:57,370 paske le pli vit ke ou lage yon fonksyon de adrès, 299 00:17:57,370 --> 00:18:00,470 sa ki kapab ki fonksyon fè avèk yo? >> [Elèv] Ekri bay moun adrès. 300 00:18:00,470 --> 00:18:02,010 Li ka ekri nou nan sa yo adrès. 301 00:18:02,010 --> 00:18:05,770 Ou kapab sèvi ak operasyon an zetwal yo ak ale la, nan chak nan moun ki adrès. 302 00:18:05,770 --> 00:18:11,260 Li nan sòt de sa a mekanis tounen-pòt men trè komen pou chanje valè yo nan varyab 303 00:18:11,260 --> 00:18:14,870 pi plis pase jis yon sèl kote - nan ka sa a, de. 304 00:18:14,870 --> 00:18:21,340 Koulye a, remake mwen tcheke pou == 1 ak Lè sa a, retounen n si sa, an reyalite, evalye vre. 305 00:18:21,340 --> 00:18:26,170 Se konsa, sa k ap pase sou? Teknikman, tout sa nou reyèlman vle rive nan GetInt se sa a. 306 00:18:26,170 --> 00:18:30,740 Nou vle analizan, se konsa pale, nou vle li fisèl la - quote-unquote 123 - 307 00:18:30,740 --> 00:18:34,560 epi si li sanble gen yon nimewo a, sa n ap di sskanf fè 308 00:18:34,560 --> 00:18:38,190 yo mete nimewo sa a - 123 - nan sa a varyab n pou mwen. 309 00:18:38,190 --> 00:18:42,090 Se konsa, poukisa Lè sa a, mwen te gen aktyèlman sa a kòm byen? 310 00:18:42,090 --> 00:18:48,220 Ki wòl la nan sskanf li di ou ta ka jwenn tou yon karaktè isit la? 311 00:18:48,220 --> 00:18:53,470 [Fèbl repons elèv] >> Yon pwen desimal aktyèlman te kapab travay. 312 00:18:53,470 --> 00:18:56,330 Se pou nou kenbe ki te panse pou yon moman. Ki lòt bagay? 313 00:18:56,330 --> 00:18:59,270 [Elèv] Li ta ka nil. >> Bon panse. Li ta ka pèsonaj la nil. 314 00:18:59,270 --> 00:19:01,660 Li nan aktyèlman pa nan ka sa a. Yeah. >> [Elèv] ASCII. 315 00:19:01,660 --> 00:19:04,340 ASCII. Oswa kite m 'jeneralizasyon menm pi lwen. 316 00:19:04,340 --> 00:19:06,640 C la% gen jis pou w tcheke erè. 317 00:19:06,640 --> 00:19:09,300 Nou pa vle gen yo dwe yon karaktè apre nimewo a, 318 00:19:09,300 --> 00:19:11,870 men ki sa sa a pèmèt m 'fè a se sa ki annapre yo. 319 00:19:11,870 --> 00:19:18,210 Li sanble ke sskanf, san konte estoke valè nan n ak c nan egzanp sa a isit la, 320 00:19:18,210 --> 00:19:24,890 ki sa li tou se li retounen nimewo a nan varyab li mete valè pous 321 00:19:24,890 --> 00:19:30,260 Se konsa, si ou sèlman tape nan 123, lè sa a sèlman d la% ki pral matche ak, 322 00:19:30,260 --> 00:19:33,880 ak sèlman n vin estoke ki gen yon valè tankou 123, 323 00:19:33,880 --> 00:19:35,640 e pa gen anyen vin mete nan c. 324 00:19:35,640 --> 00:19:37,620 C rete yon valè fatra, se konsa pale - 325 00:19:37,620 --> 00:19:40,730 fatra paske li pa janm te konn mete inisyalizèd nan kèk valè. 326 00:19:40,730 --> 00:19:45,520 Se konsa, nan ka sa a, sskanf retounen 1 paske mwen peple 1 nan tout sa yo endikasyon, 327 00:19:45,520 --> 00:19:50,190 nan ka sa a gwo, mwen gen yon int Se konsa, mwen libere dwat la rive nan libere moute memwa a 328 00:19:50,190 --> 00:19:54,000 ki GetString aktyèlman resevwa lajan, ak Lè sa a, m'a tounen n, 329 00:19:54,000 --> 00:19:58,500 lòt bagay si ou janm mande ki kote rekoumanse deklarasyon soti nan, li vini soti nan dwa isit la. 330 00:19:58,500 --> 00:20:04,390 Se konsa, si, pa kontra, mwen tape nan 123foo - jis kèk sekans o aza nan tèks - 331 00:20:04,390 --> 00:20:08,490 sskanf ki pral gade nan nimewo, nimewo, nimewo, f, 332 00:20:08,490 --> 00:20:16,410 epi li pral mete 123 la nan n; li a pral mete f a nan c ak Lè sa a, retounen 2. 333 00:20:16,410 --> 00:20:20,640 Se konsa, nou gen, jis lè l sèvi avèk definisyon an debaz ki nan konpòtman sskanf a, yon fason trè senp - 334 00:20:20,640 --> 00:20:23,900 byen, konplèks nan zye premye, men nan fen jou-la avèk jistis senp mekanis - 335 00:20:23,900 --> 00:20:28,320 nan di la a se gen yon int e si se konsa, se ke bagay la sèlman ke mwen te jwenn? 336 00:20:28,320 --> 00:20:29,860 Ak blan a isit la se ekspre. 337 00:20:29,860 --> 00:20:34,000 Si ou li dokiman an pou sskanf, li di ou ke si ou gen ladan yo yon moso nan blan 338 00:20:34,000 --> 00:20:38,810 nan kòmansman an oswa nan fen a, sskanf twò pral pèmèt itilizatè a yo, pou kèlkeswa rezon, 339 00:20:38,810 --> 00:20:41,860 frape 123 espas bar ak ki pral lejitim. 340 00:20:41,860 --> 00:20:44,150 Ou pa pral rele nan itilizatè a jis paske yo frape bar nan espas 341 00:20:44,150 --> 00:20:48,640 nan kòmansman an oswa nan fen a, ki se jis yon ti kras pi plis user-zanmitay. 342 00:20:48,640 --> 00:20:52,300 >> Nenpòt kesyon Lè sa a, sou GetInt? Yeah. >> [Elèv] Ki sa ki si ou jis mete nan yon Char? 343 00:20:52,300 --> 00:20:54,030 Bon kesyon. 344 00:20:54,030 --> 00:20:59,890 E si ou jis tape nan yon Char tankou f ak frape Antre nan san yo pa janm sezisman 123? 345 00:20:59,890 --> 00:21:02,420 Ki sa ou panse konpòtman an nan liy sa a nan kòd ta Lè sa a, ta dwe ye? 346 00:21:02,420 --> 00:21:04,730 [Fèbl repons elèv] 347 00:21:04,730 --> 00:21:08,790 Yeah, se konsa sskanf ka kouvri ki twò paske nan ka sa a, li pa pral ranpli n oswa c. 348 00:21:08,790 --> 00:21:15,310 Li nan ale nan olye retounen 0, nan ka sa a mwen tou pwan ki senaryo 349 00:21:15,310 --> 00:21:18,750 paske valè a prévu sa mwen vle se 1. 350 00:21:18,750 --> 00:21:22,000 Mwen sèlman vle yon sèl ak nan yon sèl bagay ka plen. Bon kesyon. 351 00:21:22,000 --> 00:21:24,290 >> Lòt moun? Tout dwa. 352 00:21:24,290 --> 00:21:26,250 >> Se pou nou pa ale nan tout nan fonksyon yo nan isit la, 353 00:21:26,250 --> 00:21:29,500 men se yon sèl la ki sanble ap petèt nan enterè rete a se GetString 354 00:21:29,500 --> 00:21:32,790 paske li sanble ke GetFloat, GetInt, GetDouble, GetLongLong 355 00:21:32,790 --> 00:21:36,260 tout bote yon bann fonksyonalite yo nan GetString. 356 00:21:36,260 --> 00:21:39,750 Se konsa, kite a pran yon gade nan ki jan se li ki aplike isit la. 357 00:21:39,750 --> 00:21:43,630 Sa a yon sèl sanble yon konplèks ti kras, men li sèvi ak eleman fondamantal yo menm 358 00:21:43,630 --> 00:21:45,670 ke nou kòmanse te kòmanse pale sou semèn dènye a. 359 00:21:45,670 --> 00:21:49,490 Nan GetString, ki te pran pa gen okenn agiman tankou pou chak anile a moute isit la 360 00:21:49,490 --> 00:21:53,730 ak li retounen yon kòd, mwen aparamman mwen deklare yon kòd yo rele zòn de defans. 361 00:21:53,730 --> 00:21:56,270 Mwen pa vrèman konnen ki sa ki nan yo pral itilize pou deja, men nou pral wè. 362 00:21:56,270 --> 00:21:58,390 Li sanble ke kapasite se pa default 0. 363 00:21:58,390 --> 00:22:01,350 Pa byen asire ki kote sa a ki pral, pa asire ki sa n ki pral gen pou itilize pou ankò, 364 00:22:01,350 --> 00:22:03,590 Men, koulye a li nan ap resevwa yon ti kras plis enteresan. 365 00:22:03,590 --> 00:22:06,520 Nan liy 243, nou deklare yon int, c. 366 00:22:06,520 --> 00:22:08,800 Sa a se sòt de yon detay estipid. 367 00:22:08,800 --> 00:22:15,820 Yon Char se 8 Bits, ak 8 Bits ka magazen ki jan anpil valè diferan? >> [Elèv] 256. >> 256. 368 00:22:15,820 --> 00:22:20,730 Pwoblèm lan se si ou vle gen 256 diferan karaktè ASCII, ki gen 369 00:22:20,730 --> 00:22:23,340 si ou panse tounen - ak sa a se pa yon bagay yo memorize. 370 00:22:23,340 --> 00:22:25,710 Men, si ou panse tounen nan tablo gwo ASCII nou te gen semèn de sa, 371 00:22:25,710 --> 00:22:30,600 te gen nan ka sa a 128 oswa 256 karaktè ASCII. 372 00:22:30,600 --> 00:22:32,940 Nou itilize tout modèl yo nan moute 0s ak 1S. 373 00:22:32,940 --> 00:22:36,210 Sa a se yon pwoblèm si ou vle pou kapab detekte yon erè 374 00:22:36,210 --> 00:22:40,190 paske si w ap deja lè l sèvi avèk 256 valè pou karaktè ou a, 375 00:22:40,190 --> 00:22:43,050 nou pa t 'reyèlman planifye davans paske koulye a ou pa gen okenn fason pou li di: 376 00:22:43,050 --> 00:22:46,270 sa a se pa yon karaktè legi, sa a se kèk mesaj inègza. 377 00:22:46,270 --> 00:22:50,270 Se konsa, sa mond lan fè se yo itilize pwochen valè nan pi gwo, yon bagay tankou yon int, 378 00:22:50,270 --> 00:22:54,720 pou ke ou gen yon nimewo fou nan 32 Bits,, pou 4 milya de dola valè posib 379 00:22:54,720 --> 00:22:58,860 pou ke ou ka tou senpleman fini lè l sèvi avèk esansyèlman 257 nan yo, 380 00:22:58,860 --> 00:23:01,720 1 nan ki te gen kèk sans espesyal kòm yon erè. 381 00:23:01,720 --> 00:23:03,120 >> Se konsa, kite a wè ki jan sa a travay. 382 00:23:03,120 --> 00:23:07,760 Nan liy 246, mwen gen sa a pandan y ap riban gwo ki ap rele fgetc, 383 00:23:07,760 --> 00:23:11,090 f siyifikasyon dosye, se konsa getc, ak Lè sa a, stden. 384 00:23:11,090 --> 00:23:15,520 Li vire soti sa a se jis fason an plis egzak pou fè li di li enfòmasyon nan men gwoup klavye la. 385 00:23:15,520 --> 00:23:19,300 Klavye Creole vle di D ', randman estanda vle di ekran, 386 00:23:19,300 --> 00:23:23,310 ak erè estanda, ki nou pral wè nan pset4, vle di ekran an 387 00:23:23,310 --> 00:23:27,490 men yon pati espesyal nan ekran an pou ke li pa nan conflated ak pwodiksyon aktyèl 388 00:23:27,490 --> 00:23:30,750 ke ou gen entansyon enprime. Men, plis sou sa nan tan kap vini an. 389 00:23:30,750 --> 00:23:34,440 Se konsa, fgetc jis vle di li yon karaktè soti nan klavye a, epi estoke yo ki kote? 390 00:23:34,440 --> 00:23:37,350 Estoke li nan c. 391 00:23:37,350 --> 00:23:41,360 Lè sa a, tcheke - se konsa mwen jis lè l sèvi avèk kèk konjonksyon Boolean isit la - 392 00:23:41,360 --> 00:23:46,000 tcheke sa pa egal - \ n, se konsa si itilizatè a frape Antre, nou ta vle sispann nan pwen sa a, 393 00:23:46,000 --> 00:23:49,850 fini nan riban an - ak nou menm tou nou vle tcheke pou èof la espesyal konstan, 394 00:23:49,850 --> 00:23:53,610 ki si ou konnen oswa ou devine, ki sa li kanpe pou? >> [Elèv] Fen dosye-a. Fen >> nan dosye-a. 395 00:23:53,610 --> 00:23:56,560 Sa a se kalite idyo paske si mwen sezisman nan klavye a, 396 00:23:56,560 --> 00:23:58,870 gen nan reyèlman pa gen okenn dosye ki enplike nan sa a, 397 00:23:58,870 --> 00:24:01,150 men sa a se jis sòt de tèm nan jenerik itilize vle di 398 00:24:01,150 --> 00:24:04,220 ki pa gen anyen lòt ap vini soti nan dwèt imen an. 399 00:24:04,220 --> 00:24:06,460 Èof - nan fen dosye-a. 400 00:24:06,460 --> 00:24:09,920 Kòm yon sou kote, si ou te janm frape kontwòl D nan klavye ou, pa ke ou ta gen ankò - 401 00:24:09,920 --> 00:24:15,230 ou te frape kontwòl C - Kontwòl D voye sa a konstan espesyal ki rele èof. 402 00:24:15,230 --> 00:24:19,850 Se konsa, kounye a nou jis gen kèk alokasyon memwa dinamik. 403 00:24:19,850 --> 00:24:23,440 >> Se konsa, si (n + 1> kapasite). Koulye a, mwen pral eksplike n. 404 00:24:23,440 --> 00:24:26,100 N se jis ki jan anpil bytes yo se kounye a nan zòn de defans la, 405 00:24:26,100 --> 00:24:28,620 fisèl la ke w ap kounye a bati moute soti nan itilizatè lan. 406 00:24:28,620 --> 00:24:33,450 Si ou gen plis karaktè nan zòn de defans ou a pase ou gen kapasite nan zòn de defans la, 407 00:24:33,450 --> 00:24:37,410 entwitivman ki sa nou bezwen fè Lè sa a, se asiyen plis kapasite. 408 00:24:37,410 --> 00:24:43,330 Se konsa, mwen pral koudèy sou kèk nan aritmetik a isit la epi konsantre sèlman sou sa a fonksyon isit la. 409 00:24:43,330 --> 00:24:46,070 Ou konnen ki sa malok se oswa gen omwen jeneralman yo konnen yo. 410 00:24:46,070 --> 00:24:48,970 Pran yon devine kisa realloc fè. >> [Elèv] ajoute memwa. 411 00:24:48,970 --> 00:24:52,920 Li pa nan byen ajoute memwa. Li reafèkt memwa jan sa a. 412 00:24:52,920 --> 00:24:57,220 Si gen nan plas toujou nan fen fisèl la ba ou plis nan ki memwa 413 00:24:57,220 --> 00:25:00,000 pase sa li orijinal ba ou, lè sa a ou pral jwenn ke memwa adisyonèl. 414 00:25:00,000 --> 00:25:03,460 Se konsa, ou ka jis kenbe mete karaktè fisèl la tounen nan fè bak nan do nan do. 415 00:25:03,460 --> 00:25:05,830 Men, si sa a, se pa ka a paske ou tann twò lontan 416 00:25:05,830 --> 00:25:07,940 ak yon bagay o aza te resevwa plopped nan memwa gen 417 00:25:07,940 --> 00:25:10,290 , men tou genyen memwa siplemantè desann isit la, ki nan oke. 418 00:25:10,290 --> 00:25:13,100 Realloc ki pral fè tout ekzistan la lou pou ou, 419 00:25:13,100 --> 00:25:16,750 deplase fisèl la ou te li nan konsa byen lwen soti isit la, mete l 'desann la, 420 00:25:16,750 --> 00:25:19,460 ak Lè sa a, ba ou kèk plis pist nan pwen sa a. 421 00:25:19,460 --> 00:25:22,550 >> Se konsa, avèk yon vag nan men l ', kite m' di ke sa GetString ap fè 422 00:25:22,550 --> 00:25:26,330 se li nan kòmanse avèk yon zòn de defans piti, petèt yon sèl karaktè, 423 00:25:26,330 --> 00:25:30,820 epi si itilizatè a kalite nan de karaktè, GetString fini moute rele realloc e li di 424 00:25:30,820 --> 00:25:33,150 yon karaktè pa t 'ase; ban m' de karaktè. 425 00:25:33,150 --> 00:25:35,950 Lè sa a, si w li nan lojik nan riban an, li te pral di 426 00:25:35,950 --> 00:25:39,600 itilizatè a tape nan 3 karaktè; ban m 'koulye a pa 2, men 4 karaktè, 427 00:25:39,600 --> 00:25:42,320 Lè sa a, ban m '8, Lè sa a, ban m' 16 ak 32. 428 00:25:42,320 --> 00:25:45,000 Reyalite a ke mwen double pwensip kapasite a chak fwa 429 00:25:45,000 --> 00:25:48,570 vle di ke zòn de defans nan a pa pral grandi tou dousman, li te ale nan grandi Super vit. 430 00:25:48,570 --> 00:25:51,380 Ak sa ki ta kapab avantaj nan sa? 431 00:25:51,380 --> 00:25:54,600 Poukisa mwen double pwensip gwosè a nan zòn de defans la 432 00:25:54,600 --> 00:25:58,020 menm si itilizatè a ta ka jis bezwen yon siplemantè karaktè soti nan klavye a? 433 00:25:58,020 --> 00:26:01,750 [Repons fèbl elèv] >> Ki sa ki nan sa? >> [Elèv] Ou pa bezwen grandi li kòm souvan. 434 00:26:01,750 --> 00:26:03,300 Egzakteman. Ou pa oblije grandi li kòm souvan. 435 00:26:03,300 --> 00:26:05,510 Ak sa a se jis kalite w ap couverture parye ou isit la, 436 00:26:05,510 --> 00:26:10,850 lide a ke yo te ke ou pa vle yo rele realloc yon anpil paske li gen tandans ka ralanti. 437 00:26:10,850 --> 00:26:12,910 Nenpòt ki lè w mande sistèm nan fonksyone pou memwa, 438 00:26:12,910 --> 00:26:16,990 kòm ou pral byento wè nan yon seri pwoblèm nan lavni, li gen tandans pran kèk tan. 439 00:26:16,990 --> 00:26:20,010 Se konsa, minimize ki kantite lajan yo nan tan, menm si w ap gaspiye kèk espas, 440 00:26:20,010 --> 00:26:21,900 gen tandans ka yon bon bagay. 441 00:26:21,900 --> 00:26:24,060 >> Men, si nou li nan yon pati final la nan GetString isit la - 442 00:26:24,060 --> 00:26:27,950 epi ankò konprann chak sèl liy isit la se pa konsa pou sa enpòtan jodi a - 443 00:26:27,950 --> 00:26:30,530 avi ke li evantyèlman rele malok ankò 444 00:26:30,530 --> 00:26:33,880 epi li repati egzakteman jan bytes anpil jan li bezwen pou fisèl la 445 00:26:33,880 --> 00:26:38,060 ak Lè sa a, lanse lwen lè w rele gratis tanpon la twò gwo 446 00:26:38,060 --> 00:26:40,080 si li tout bon te resevwa double fwa twòp. 447 00:26:40,080 --> 00:26:42,730 Se konsa, nan kout, lè sa a jan GetString ki te travay tout tan sa a. 448 00:26:42,730 --> 00:26:47,060 Tout li se li yon karaktè nan yon tan ankò e ankò e ankò, 449 00:26:47,060 --> 00:26:50,750 ak tout tan li bezwen kèk memwa adisyonèl, li mande sistèm nan fonksyone pou li 450 00:26:50,750 --> 00:26:53,670 lè w rele realloc. 451 00:26:53,670 --> 00:26:57,890 >> Nenpòt kesyon? Tout dwa. 452 00:26:57,890 --> 00:26:59,270 >> Yon atak. 453 00:26:59,270 --> 00:27:04,060 Kounye a ke nou konprann endikasyon oswa omwen yo se de pli zan pli ki abitye avèk endikasyon, 454 00:27:04,060 --> 00:27:06,700 kite a konsidere kijan lemonn antye kòmanse tonbe plat atè 455 00:27:06,700 --> 00:27:10,030 si ou pa byen defann kont itilizatè konfwontasyon, 456 00:27:10,030 --> 00:27:11,850 moun ki ap eseye Hack nan sistèm ou a, 457 00:27:11,850 --> 00:27:16,890 moun ki ap eseye vòlè lojisyèl ou pa kontourn kèk kòd enskripsyon 458 00:27:16,890 --> 00:27:19,090 yo ke yo ta ka otreman gen tape pous 459 00:27:19,090 --> 00:27:22,990 >> Pran yon gade nan egzanp sa a isit la, ki se jis C kòd ki te gen yon fonksyon prensipal nan pati anba a 460 00:27:22,990 --> 00:27:26,380 ki mande yon foo fonksyon. Ak ki sa ki li pase foo? 461 00:27:26,380 --> 00:27:29,680 [Elèv] Yon rezònman sèl. >> [Malan] Yon rezònman sèl. 462 00:27:29,680 --> 00:27:33,450 Se konsa, argv [1], ki vle di premye mo ki ki itilizatè a tape nan liy lan bay lòd 463 00:27:33,450 --> 00:27:36,360 apre a.out oswa kèlkeswa sa ki pwogram lan te rele. 464 00:27:36,360 --> 00:27:41,680 Se konsa, foo nan tèt la pran nan yon * Char. Men, * Char se jis ki sa? >> [Elèv] Yon fil. 465 00:27:41,680 --> 00:27:43,350 [Malan] Yon fil, se konsa pa gen anyen nouvo isit la. 466 00:27:43,350 --> 00:27:45,420 Sa fisèl la abitrèman yo te rele ba. 467 00:27:45,420 --> 00:27:51,430 Nan liy sa a isit la, Char c [12]; nan sòt de semi-teknik lang angle, ki sa ki liy sa a ap fè? 468 00:27:51,430 --> 00:27:55,220 [Elèv] Yon etalaj la - >> etalaj la? >> [Elèv] karaktè. >> Karaktè. 469 00:27:55,220 --> 00:27:58,870 Ban m 'yon etalaj de 12 karaktè. Se konsa, nou ta ka rele sa yon zòn de defans. 470 00:27:58,870 --> 00:28:02,920 Li nan teknikman rele c, men yon zòn de defans nan pwogram jis vle di yon pakèt moun sou espas 471 00:28:02,920 --> 00:28:04,800 ke ou ka mete kèk bagay pous 472 00:28:04,800 --> 00:28:07,940 Lè sa a, alafen, manki nou pa te itilize anvan, men ou ka pwobableman devine ki sa li fè. 473 00:28:07,940 --> 00:28:10,480 Li kopi memwa. Ki sa sa fè? 474 00:28:10,480 --> 00:28:19,270 Li aparamman kopi ba, D 'li yo, nan c men se sèlman jiska longè nan ba. 475 00:28:19,270 --> 00:28:24,930 Men, gen nan yon ensèk isit la. >> [Elèv] Ou bezwen pèsonaj la sizof. >> Okay. 476 00:28:24,930 --> 00:28:30,860 Teknikman, nou ta dwe reyèlman fè strlèn (bar) * sizof (Char)). Sa a kòrèk. 477 00:28:30,860 --> 00:28:33,930 Men, nan ka ki pi mal la isit la, se pou yo asime ke that's - 478 00:28:33,930 --> 00:28:35,950 Oke. Lè sa a, gen nan de bug. 479 00:28:35,950 --> 00:28:39,160 Se konsa, sizof (Char)); 480 00:28:39,160 --> 00:28:41,290 Se pou nou fè sa-a yon ti kras pi laj. 481 00:28:41,290 --> 00:28:44,910 Se konsa, kounye a gen nan toujou yon ensèk, ki se ki sa? >> [Fèbl repons elèv] 482 00:28:44,910 --> 00:28:46,990 Tcheke pou ki sa? >> [Elèv] Tcheke pou nil. 483 00:28:46,990 --> 00:28:50,270 Nou ta dwe jeneralman mete tcheke pou nil paske move bagay rive 484 00:28:50,270 --> 00:28:53,200 lè konsèy ou a se nil paske ou ta ka fini pral la, 485 00:28:53,200 --> 00:28:57,630 ak ou pa ta dwe janm pral nan nil pa dereferencing l 'ak operatè a zetwal. 486 00:28:57,630 --> 00:29:01,050 Se konsa, sa a, se bon. Ak ki lòt bagay n'ap fè? Lojikman, a gen yon defo isit la tou. 487 00:29:01,050 --> 00:29:04,450 [Elèv] Tcheke si arg se> = a 2. 488 00:29:04,450 --> 00:29:10,550 Se konsa, tcheke si arg se> = 2. Oke, kidonk gen nan twa pinèz nan pwogram sa a isit la. 489 00:29:10,550 --> 00:29:16,630 Nou ap kounye a tcheke si itilizatè a aktyèlman tape nan anyen nan argv [1]. Bon. 490 00:29:16,630 --> 00:29:20,950 Se konsa, sa ki nan pinèz la twazyèm? Yeah. >> [Elèv] C pa ka gwo ase. 491 00:29:20,950 --> 00:29:23,320 Bon. Nou tcheke yon sèl senaryo. 492 00:29:23,320 --> 00:29:29,520 Nou chal tcheke pa kopye plis memwa pase ta depase longè nan ba. 493 00:29:29,520 --> 00:29:32,510 Se konsa, si fisèl la itilizatè a tape nan se 10 karaktè long, 494 00:29:32,510 --> 00:29:36,020 sa a ap di sèlman yon kopi 10 karaktè. Epi sa a, oke. 495 00:29:36,020 --> 00:29:39,940 Men, sa ki si itilizatè a tape nan yon mo nan èd memwa a tankou yon mo 20-karaktè? 496 00:29:39,940 --> 00:29:44,900 Sa a se li di kopi 20 karaktè nan bar nan ki sa? 497 00:29:44,900 --> 00:29:49,750 C, ki te rekonèt kòm tanpon nou an, ki vle di ou jis te ekri done 498 00:29:49,750 --> 00:29:52,540 8 lokal multiple ke ou pa fè sa pwòp, 499 00:29:52,540 --> 00:29:54,870 epi ou pa posede yo nan sans ke ou pa janm resevwa lajan yo. 500 00:29:54,870 --> 00:30:00,370 Se konsa, sa a se sa ki jeneralman li te ye tankou atak la debòde tanpon oswa atak anvahi tanpon. 501 00:30:00,370 --> 00:30:05,580 Epitou, se yon atak nan sans ke si itilizatè a oswa pwogram la ki nan rele fonksyon ou 502 00:30:05,580 --> 00:30:10,490 ap fè sa a kare, sa ki aktyèlman k ap pase answit te kapab aktyèlman dwe byen move. 503 00:30:10,490 --> 00:30:12,450 >> Se konsa, kite a pran yon gade nan foto sa a isit la. 504 00:30:12,450 --> 00:30:16,060 Pòtre sa a reprezante chemine ou nan memwa. 505 00:30:16,060 --> 00:30:19,580 Sonje byen, chak fwa ou rele yon fonksyon ou jwenn sa a ankadreman ti kras sou chemine a 506 00:30:19,580 --> 00:30:21,520 ak Lè sa a, yon lòt ak Lè sa a, yon lòt ak yon lòt. 507 00:30:21,520 --> 00:30:24,300 Ak konsa byen lwen, nou te jis kalite distrè sa yo kòm rektang 508 00:30:24,300 --> 00:30:26,290 swa sou tablo a oswa sou ekran an isit la. 509 00:30:26,290 --> 00:30:30,580 Men, si nou rale nan sou yon sèl nan tout sa yo rektang, lè w rele yon foo fonksyon, 510 00:30:30,580 --> 00:30:35,880 Li sanble ke gen nan plis sou andedan an pil nan ki ankadreman an ki rektang 511 00:30:35,880 --> 00:30:40,060 pase jis x ak y ak a ak b, tankou nou t 'ap pale de swap. 512 00:30:40,060 --> 00:30:44,410 Li sanble ke gen nan kèk detay pi ba-nivo, nan mitan yo Return Address. 513 00:30:44,410 --> 00:30:49,550 Se konsa, li vire soti lè prensipal rele foo, prensipal la gen enfòme foo 514 00:30:49,550 --> 00:30:53,520 sa ki adrès prensipal la se nan memwa òdinatè a nan 515 00:30:53,520 --> 00:30:57,770 paske otreman, le pli vit ke foo se fè pwomenad, tankou nan ka sa a isit la, 516 00:30:57,770 --> 00:31:00,830 yon fwa ou rive nan sa a fèmen atèl Curly nan fen foo, 517 00:31:00,830 --> 00:31:05,310 ki jan èk an foo konnen ki kote kontwòl la nan pwogram nan sipoze ale? 518 00:31:05,310 --> 00:31:08,970 Li sanble ke repons lan nan kesyon se nan rektang sa a wouj isit la. 519 00:31:08,970 --> 00:31:12,670 Sa a reprezante yon konsèy, ak li a jiska òdinatè a nan magazen tanporèman 520 00:31:12,670 --> 00:31:17,030 sou chemine a sa yo rele adrès la nan prensipal pou ke le pli vit ke foo fè pwomenad, 521 00:31:17,030 --> 00:31:21,120 òdinatè a konnen ki kote ak ki sa liy nan prensipal pou tounen nan. 522 00:31:21,120 --> 00:31:23,940 Konsèy sove Frame gen rapò menm bagay ak sa a. 523 00:31:23,940 --> 00:31:26,310 Char bar * isit la reprezante ki sa? 524 00:31:26,310 --> 00:31:31,350 Koulye a, segman sa a ble isit la se ankadreman foo la. Ki sa ki ba? 525 00:31:31,570 --> 00:31:35,010 Bar se jis agiman nan fonksyon an foo. 526 00:31:35,010 --> 00:31:37,500 Se konsa, kounye a nou ap tounen nan sòt de foto a yo konnen yo. 527 00:31:37,500 --> 00:31:39,850 Genyen nan bagay pi plis ak distraksyon plis sou ekran an, 528 00:31:39,850 --> 00:31:43,380 men segman sa a limyè ble jis se ki sa nou ve yo te fè desen sou tablo a 529 00:31:43,380 --> 00:31:45,790 pou yon bagay tankou swap. Sa a se ankadreman an pou foo. 530 00:31:45,790 --> 00:31:51,490 Epi bagay la sèlman nan li kounye a se ba, ki se sa a paramèt. 531 00:31:51,490 --> 00:31:55,220 Men, ki lòt bagay yo ta dwe nan chemine a dapre sa a kòd isit la? 532 00:31:55,220 --> 00:31:57,760 [Elèv] Char c [12]. >> [Malan] Char c [12]. 533 00:31:57,760 --> 00:32:02,810 Nou ta dwe wè tou 12 kare nan memwa afekte nan yon varyab rele c, 534 00:32:02,810 --> 00:32:04,970 ak tout bon nou gen ki sou ekran an. 535 00:32:04,970 --> 00:32:08,480 Trè tèt la gen c [0], ak Lè sa a, otè a nan dyagram sa a 536 00:32:08,480 --> 00:32:11,850 pa t 'bezwen deranje desen tout kare yo, men gen yo tout bon 12 gen 537 00:32:11,850 --> 00:32:16,590 paske si ou gade nan dwa anba a, c [11] si ou konte ki ant 0 a se multiple nan 12yèm sa yo. 538 00:32:16,590 --> 00:32:18,400 Men, isit la nan pwoblèm nan. 539 00:32:18,400 --> 00:32:22,390 Nan ki direksyon an c k ap grandi? 540 00:32:22,390 --> 00:32:27,080 Triye nan tèt anba si li kòmanse nan tèt la ak ap grandi jouk anba a. 541 00:32:27,080 --> 00:32:30,110 Li pa sanble nou te kite tèt nou anpil pist isit la nan tout. 542 00:32:30,110 --> 00:32:32,090 Nou te kalite pentire tèt nou nan yon kwen, 543 00:32:32,090 --> 00:32:36,940 e ke c [11] se dwa atake bar, ki se dwa atake sove konsèy Frame, 544 00:32:36,940 --> 00:32:39,960 ki se dwa atake Return Address. Gen nan pa gen chanm plis. 545 00:32:39,960 --> 00:32:42,810 Se konsa, sa ki nan enplikasyon la Lè sa a, si ou vis moute nan 546 00:32:42,810 --> 00:32:46,500 epi ou eseye lekti 20 bytes nan yon zòn de defans 12-multiple? 547 00:32:46,500 --> 00:32:50,060 Kote moun yo 8 bytes plis pwal ale? >> [Elèv] Anndan - 548 00:32:50,060 --> 00:32:53,200 Anndan tout lòt bagay, kèk nan yo ki se super enpòtan. 549 00:32:53,200 --> 00:32:57,260 Ak bagay ki pi enpòtan, potansyèlman, se ti bwat la wouj la, Adrès Tounen non, 550 00:32:57,260 --> 00:33:03,560 paske sipoze ke ou swa aksidantèlman oswa adversarially recouvrir sa yo bytes 4, 551 00:33:03,560 --> 00:33:07,260 ki konsèy adrès, pa sèlman ak fatra, men ak yon kantite 552 00:33:07,260 --> 00:33:09,810 ki k ap pase nan reprezante yon adrès aktyèl nan memwa. 553 00:33:09,810 --> 00:33:13,880 Ki sa ki nan enplikasyon la, lojikman? >> [Elèv] Fonksyon ki pral retounen nan yon kote diferan. 554 00:33:13,880 --> 00:33:15,250 Egzakteman. 555 00:33:15,250 --> 00:33:19,170 Lè retounen foo ak frape ki atèl Curly, pwogram nan se pral kontinye 556 00:33:19,170 --> 00:33:25,060 pa pou retounen nan prensipal yo, li pral pou retounen nan kèlkeswa adrès se nan ki bwat wouj. 557 00:33:25,060 --> 00:33:28,600 >> Nan ka kontourn enskripsyon lojisyèl, 558 00:33:28,600 --> 00:33:32,260 ki sa si adrès la ki k ap tounen tounen l 'se fonksyon an ki nòmalman vin rele 559 00:33:32,260 --> 00:33:35,690 apre ou te peye pou lojisyèl an ak antre kòd enskripsyon ou a? 560 00:33:35,690 --> 00:33:39,870 Ou kapab klase nan Trick òdinatè a nan pa pral isit la, men olye moute isit la. 561 00:33:39,870 --> 00:33:45,100 Oswa si w ap reyèlman entelijan, yon lènmi ka aktyèlman tape nan nan klavye a, pou egzanp, 562 00:33:45,100 --> 00:33:50,690 pa yon mo reyèl, pa 20 karaktè, men ta kwè li oswa li aktyèlman kalite nan 563 00:33:50,690 --> 00:33:52,770 kèk karaktè ki reprezante kòd. 564 00:33:52,770 --> 00:33:55,320 E li pa k ap pase yo dwe C kòd, li la aktyèlman pral fè karaktè yo 565 00:33:55,320 --> 00:33:59,290 ki reprezante binè kòd machin, 0s ak 1S. 566 00:33:59,290 --> 00:34:01,290 Men, si yo ap entelijan ase fè sa, 567 00:34:01,290 --> 00:34:06,500 yon jan kanmenm keratin nan yon bagay nan GetString èd memwa ki se kòd esansyèlman konpile, 568 00:34:06,500 --> 00:34:09,980 ak 4 dènye bytes yo recouvrir ki adrès retou. 569 00:34:09,980 --> 00:34:13,360 Ak sa ki adrès ki D 'fè? 570 00:34:13,360 --> 00:34:18,630 Li aktyèlman estoke nan rektang sa a wouj adrès ki nan multiple an premye nan zòn de defans la. 571 00:34:18,630 --> 00:34:23,070 Se konsa, ou gen yo dwe reyèlman entelijan, e sa se yon anpil nan esè ak erè pou moun ki move yo deyò, 572 00:34:23,070 --> 00:34:25,639 Men, si ou kapab konnen ki jan gwo sa a tanpon se 573 00:34:25,639 --> 00:34:28,820 sa yo ki dènye bytes yo kèk moun nan opinyon ou bay nan pwogram lan 574 00:34:28,820 --> 00:34:33,540 rive yo ekivalan nan adrès ki nan kòmansman an nan zòn de defans ou a, ou ka fè sa. 575 00:34:33,540 --> 00:34:39,320 Si nou di nòmalman alo ak \ 0, se sa ki fini moute nan zòn de defans la. 576 00:34:39,320 --> 00:34:44,420 Men, si nou ap plis entelijan e nou ranpli ke zòn de defans ak sa nou pral generic rele kòd atak - 577 00:34:44,420 --> 00:34:48,860 AAA, atak, atak, atak - kote sa a se jis yon bagay ki fè yon bagay mal, 578 00:34:48,860 --> 00:34:51,820 kisa k ap rive si ou se vrèman entelijan, ou ta ka fè sa. 579 00:34:51,820 --> 00:34:58,610 Nan ti bwat la wouj isit la se yon sekans nan nimewo - 80, C0, 35, 08. 580 00:34:58,610 --> 00:35:01,610 Remake ke matche ak nimewo a ki la moute isit la. 581 00:35:01,610 --> 00:35:04,430 Li nan yo nan lòd do, men li plis sou tan sa a kèk lòt. 582 00:35:04,430 --> 00:35:08,140 Remake sa a te adrès retou te fè espre chanje 583 00:35:08,140 --> 00:35:12,020 egal adrès la moute isit la, pa adrès ki nan prensipal la. 584 00:35:12,020 --> 00:35:17,500 Se konsa, si nèg la move se super entelijan, li te oswa li pral gen ladan yo nan ke kòd atak 585 00:35:17,500 --> 00:35:20,930 yon bagay tankou efase tout dosye itilizatè a oswa kopi modpas yo 586 00:35:20,930 --> 00:35:24,680 oubyen kreye yon kont itilizatè ke mwen ka Lè sa a, konekte nan - anyen nan tout. 587 00:35:24,680 --> 00:35:26,950 >> Ak sa a se tou de danje a ak pouvwa a nan C. 588 00:35:26,950 --> 00:35:29,840 Paske ou gen aksè a memwa via endikasyon 589 00:35:29,840 --> 00:35:32,520 epi ou ka Se poutèt sa ekri anyen ou vle nan memwa yon òdinatè a, 590 00:35:32,520 --> 00:35:35,080 ou ka fè yon òdinatè fè anyen ou vle 591 00:35:35,080 --> 00:35:39,550 tou senpleman pa gen li sote alantou nan espas pwòp memwa li yo. 592 00:35:39,550 --> 00:35:44,650 Se konsa, nan jou sa a pou anpil moun pwogram epi sou sit entènèt anpil ki konpwomèt 593 00:35:44,650 --> 00:35:46,200 bouyi desann nan moun k ap pran avantaj de sa a. 594 00:35:46,200 --> 00:35:50,760 Ak sa a ta ka sanble tankou yon atak super sofistike, men li pa toujou kòmanse fason sa. 595 00:35:50,760 --> 00:35:53,560 Reyalite a se ke sa moun move ap anjeneral fè se, 596 00:35:53,560 --> 00:35:58,200 si li nan yon pwogram nan yon liy lòd oswa nan yon pwogram grafik oswa sit entènèt yon, 597 00:35:58,200 --> 00:35:59,940 ou jis kòmanse bay istwa san sans. 598 00:35:59,940 --> 00:36:03,980 Ou tape nan yon mo nan jaden yo rechèch ak frape Antre reyèlman gwo, 599 00:36:03,980 --> 00:36:05,780 ak ou rete tann yo wè si sit entènèt la kolizyon 600 00:36:05,780 --> 00:36:09,990 oswa ou rete tann yo wè si pwogram lan manifeste kèk mesaj erè 601 00:36:09,990 --> 00:36:14,330 paske si w jwenn chans kòm nèg la move, epi ou bay kèk D 'fou 602 00:36:14,330 --> 00:36:18,980 ki kolizyon pwogram nan, sa vle di pwogramè a pa t 'antisipe move konpòtman ou a, 603 00:36:18,980 --> 00:36:23,630 ki vle di ou kapab pwobableman ak ase efò, jijman ase ak erè, 604 00:36:23,630 --> 00:36:26,650 konnen ki jan salè yon atak plis presi. 605 00:36:26,650 --> 00:36:31,410 Se konsa, kòm anpil yon pati nan sekirite se pa sèlman evite atak sa yo tout ansanm 606 00:36:31,410 --> 00:36:34,100 men detekte yo ak aktyèlman gade nan mòso bwa 607 00:36:34,100 --> 00:36:36,780 ak wè sa entrées fou gen moun tape nan sit entènèt ou an, 608 00:36:36,780 --> 00:36:38,960 ki sa tèm rechèch yo te moun tape nan sit entènèt ou a 609 00:36:38,960 --> 00:36:42,870 yo nan espwa pou debòde kèk zòn de defans. 610 00:36:42,870 --> 00:36:45,500 Lè sa a tout klou desann nan Basics yo senp nan sa ki nan yon etalaj 611 00:36:45,500 --> 00:36:49,080 epi ki sa sa vle di asiyen epi sèvi ak memwa. 612 00:36:49,080 --> 00:36:51,710 >> Ki gen rapò ak Lè sa a, tou se sa a. 613 00:36:51,710 --> 00:36:54,280 Se pou nou jis gade andedan nan yon kondwi difisil ankò. 614 00:36:54,280 --> 00:36:58,440 Ou sonje soti nan yon semèn oswa de Anons sa pibliye depi ke lè ou trennen dosye bin resiklaj ou a oswa fatra kapab, 615 00:36:58,440 --> 00:37:03,710 ki sa k ap pase? >> [Elèv] Pa gen anyen. >> Absoliman anyen, dwa? 616 00:37:03,710 --> 00:37:05,740 Evantyèlman si ou kouri ba sou espas ki gen kapasite, 617 00:37:05,740 --> 00:37:08,190 Fenèt yo oswa ou Mac OS pral kòmanse efase dosye pou ou. 618 00:37:08,190 --> 00:37:10,390 Men, si w glise yon bagay nan la, ki se pa nan tout ki an sekirite. 619 00:37:10,390 --> 00:37:13,800 Tout chanm ou oswa yon zanmi oswa yon manm fanmi gen fè se doub klike sou, epi, vwala, 620 00:37:13,800 --> 00:37:16,310 gen nan tout dosye yo preliminè ke ou te eseye efase. 621 00:37:16,310 --> 00:37:19,590 Pifò nan nou omwen konnen ki di ou gen dwa klike sou oswa kontwole klike sou 622 00:37:19,590 --> 00:37:22,310 ak vid fatra a oswa yon bagay tankou sa. 623 00:37:22,310 --> 00:37:25,000 Men, menm Lè sa a, ki pa byen fè jwe fent la 624 00:37:25,000 --> 00:37:28,010 paske sa ki pase lè ou gen yon dosye sou kondwi difisil ou 625 00:37:28,010 --> 00:37:32,770 ki reprezante kèk dokiman Pawòl oswa kèk JPEG, ak sa a reprezante kondwi difisil ou a, 626 00:37:32,770 --> 00:37:35,350 epi kite pou nou di sa a tranch isit la reprezante ki ranpli, 627 00:37:35,350 --> 00:37:38,390 ak li a ki konpoze de yon pakèt antye nan 0s ak 1S. 628 00:37:38,390 --> 00:37:42,470 Kisa k ap pase lè ou pa sèlman trennen ki dosye fatra a kapab oswa resikle bin 629 00:37:42,470 --> 00:37:48,020 men tou vide l '? Triye nan pa gen anyen. 630 00:37:48,020 --> 00:37:49,640 Li pa absoliman anyen kounye a. 631 00:37:49,640 --> 00:37:54,290 Kounye a li nan jis pa gen anyen paske yon ti kras yon bagay k ap pase nan fòm lan nan tablo sa a. 632 00:37:54,290 --> 00:37:58,370 Se konsa, gen nan kèk kalite baz done oswa tablo andedan nan memwa yon òdinatè a 633 00:37:58,370 --> 00:38:03,850 ki esansyèlman gen yon kolòn pou dosye 'non ak yon kolòn pou dosye' kote, 634 00:38:03,850 --> 00:38:07,720 kote sa a ta kapab kote 123, jis yon nimewo o aza. 635 00:38:07,720 --> 00:38:14,560 Se konsa, nou ta ka gen yon bagay tankou x.jpeg ak kote 123. 636 00:38:14,560 --> 00:38:18,800 Kisa k ap pase Lè sa a, lè ou aktyèlman vide fatra ou a? 637 00:38:18,800 --> 00:38:20,330 Ki ale. 638 00:38:20,330 --> 00:38:23,610 Men, sa ki pa ale se 0s la ak 1S. 639 00:38:23,610 --> 00:38:26,270 >> Se konsa, sa ki nan Lè sa a, koneksyon a pset4? 640 00:38:26,270 --> 00:38:31,240 Oke, ak pset4, jis paske nou te aksidantèlman efase kat la flash kontra enfòmèl ant 641 00:38:31,240 --> 00:38:35,750 ki te gen tout foto sa yo oswa jis paske li pa move chans te vin pèvèti 642 00:38:35,750 --> 00:38:38,000 pa vle di ke 0s la ak 1S yo pa toujou la. 643 00:38:38,000 --> 00:38:40,410 Petèt kèk nan yo yo pèdi paske yon bagay te resevwa pèvèti 644 00:38:40,410 --> 00:38:43,320 nan sans ke kèk 0s te vin 1S ak 1S te vin 0s. 645 00:38:43,320 --> 00:38:47,240 Move bagay ka rive paske nan buggy lojisyèl oswa kenkayri ki defektye. 646 00:38:47,240 --> 00:38:50,370 Men, anpil nan moun ki Bits, petèt menm 100% nan yo, toujou la. 647 00:38:50,370 --> 00:38:55,050 Se jis ke òdinatè a oswa kamera a pa konnen ki kote JPEG1 te kòmanse 648 00:38:55,050 --> 00:38:56,910 ak ki kote JPEG2 te kòmanse. 649 00:38:56,910 --> 00:39:01,070 Men, si ou, pwogramè a, konnen ki gen yon ti jan nan konprandr kote sa yo JPEGs yo 650 00:39:01,070 --> 00:39:06,010 oswa ki sa yo gade tankou konsa ou ka analize JPEG a 0s ak 1S ak di, JPEG, 651 00:39:06,010 --> 00:39:09,440 ou ka ekri yon pwogram ak esansyèlman jis yon pou oswa pandan y ap riban 652 00:39:09,440 --> 00:39:12,820 ki restaure chak youn nan moun ki dosye. 653 00:39:12,820 --> 00:39:16,030 Se konsa, leson an Lè sa a, se kòmanse byen efase dosye ou 654 00:39:16,030 --> 00:39:18,340 si ou ta renmen pou fè pou evite sa a tout ansanm. Wi. 655 00:39:18,340 --> 00:39:21,010 >> [Elèv] Ki jan vini li di sou òdinatè ou 656 00:39:21,010 --> 00:39:23,550 ki di ou gen plis memwa pase ou te fè anvan? 657 00:39:23,550 --> 00:39:27,820 Gen plis memwa pase ou te fè anvan - >> [elèv] Plis disponib memwa. 658 00:39:27,820 --> 00:39:29,630 Oh. Bon kesyon. 659 00:39:29,630 --> 00:39:32,360 Se konsa, poukisa Lè sa a, apre vidanj fatra a òdinatè w lan di w 660 00:39:32,360 --> 00:39:34,910 ki di ou gen plis gratis espas pase ou te fè anvan? 661 00:39:34,910 --> 00:39:36,770 Nan yon Nutshell, paske li nan bay manti. 662 00:39:36,770 --> 00:39:40,740 Plis teknikman, ou gen plis espas paske kounye a ou te di 663 00:39:40,740 --> 00:39:43,680 ou ka mete lòt bagay kote ki dosye te yon fwa. 664 00:39:43,680 --> 00:39:45,450 Men, sa pa vle di Bits yo yo pral lwen, 665 00:39:45,450 --> 00:39:48,590 ak sa pa vle di Bits yo yo te chanje nan tout 0s, pou egzanp, 666 00:39:48,590 --> 00:39:50,150 pou pwoteksyon ou. 667 00:39:50,150 --> 00:39:54,640 Se konsa, pa kontra, si ou byen efase dosye oswa fizikman detwi aparèy la, 668 00:39:54,640 --> 00:39:57,300 ki vrèman se yon fason a sèlman pafwa alantou sa. 669 00:39:57,300 --> 00:40:02,020 >> Se konsa, poukisa pa nou kite sou ki note semi-pè, ak nou pral wè ou nan Lendi. 670 00:40:02,020 --> 00:40:07,000 [Aplodisman] 671 00:40:07,780 --> 00:40:10,000 >> [CS50.TV]