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