1 00:00:00,000 --> 00:00:02,860 [Powered by Google Translate] [Hét 5] 2 00:00:02,860 --> 00:00:04,860 [David J. Malan - Harvard University] 3 00:00:04,860 --> 00:00:07,260 [Ez CS50. - CS50.TV] 4 00:00:07,260 --> 00:00:09,740 >> Ez CS50, 5. héten. 5 00:00:09,740 --> 00:00:12,900 Ma és ezen a héten bemutatjuk egy kicsit a világ kriminalisztika 6 00:00:12,900 --> 00:00:14,850 összefüggésben a probléma készlet 4. 7 00:00:14,850 --> 00:00:18,480 Ma lesz egy rövidített előadás, mert van egy különleges esemény itt utána. 8 00:00:18,480 --> 00:00:21,940 Így lesz egy pillantást, és kötekedik a diákok és a szülők egyaránt ma 9 00:00:21,940 --> 00:00:24,600 néhány, a dolgok, amelyek a horizonton. 10 00:00:24,600 --> 00:00:29,050 >> Közülük, mint hétfőn, akkor néhány osztálytársaival. 11 00:00:29,050 --> 00:00:32,980 EDX, a Harvard és a MIT új online kezdeményezés OpenCourseWare és több, 12 00:00:32,980 --> 00:00:36,730 indít a Harvard egyetemen, hétfőn, ami azt jelenti, gyere hétfő 13 00:00:36,730 --> 00:00:40,930 lesz, mint a tavalyi szám, 86.000 kiegészítő osztálytársai 14 00:00:40,930 --> 00:00:43,680 aki követni együtt CS50 előadásaiból és szakaszok 15 00:00:43,680 --> 00:00:45,890 és walkthroughs és a probléma készletek. 16 00:00:45,890 --> 00:00:51,870 És ennek részeként, akkor tagja lesz az alakuló osztály CS50 és most CS50x. 17 00:00:51,870 --> 00:00:56,150 Ennek részeként most észre, hogy lesz néhány upsides is. 18 00:00:56,150 --> 00:01:00,620 Ahhoz, hogy készen áll erre, a nagy hallgatói létszám, 19 00:01:00,620 --> 00:01:03,820 elegendő annyit mondani, hogy bár van 108 TF és CA, 20 00:01:03,820 --> 00:01:07,560 ez nem egészen a legjobb tanuló-tanár arány, ha elérjük a 80.000 versenyző. 21 00:01:07,560 --> 00:01:09,830 Nem megyünk, hogy osztályozó annyi probléma készletek kézi 22 00:01:09,830 --> 00:01:13,050 így be ezen a héten a probléma meg lesz CS50 Check, 23 00:01:13,050 --> 00:01:15,410 ami lesz parancssori segédprogram belül a készüléket 24 00:01:15,410 --> 00:01:17,880 hogy kapsz ha egyszer frissíti később ezen a hétvégén. 25 00:01:17,880 --> 00:01:21,030 Ön képes lesz futtatni egy parancsot, check50, saját Pset, 26 00:01:21,030 --> 00:01:24,770 és kapsz azonnali visszajelzést arról, hogy a program helyes vagy helytelen 27 00:01:24,770 --> 00:01:27,980 szerint a különböző tervezési előírások általunk biztosított. 28 00:01:27,980 --> 00:01:30,310 Bővebben az, hogy a problémát meg specifikációt. 29 00:01:30,310 --> 00:01:34,220 A CS50x osztálytársai fogják ezt is. 30 00:01:34,220 --> 00:01:36,170 >> Probléma Set 4 szól kriminalisztika, 31 00:01:36,170 --> 00:01:38,630 és ezt Pset igazán ihlette néhány valós dolog 32 00:01:38,630 --> 00:01:41,210 amely koromban posztgraduális iskola I internált egy darabig 33 00:01:41,210 --> 00:01:45,270 A Middlesex megyei kerületi ügyész irodájában csinál törvényszéki munkát 34 00:01:45,270 --> 00:01:47,660 azok vezető törvényszéki nyomozó. 35 00:01:47,660 --> 00:01:50,280 Mi ez az összeg, mert azt hiszem, már említettem, néhány héttel korábban, 36 00:01:50,280 --> 00:01:52,720 ki a Mass állami rendőrség és másokat is jön, 37 00:01:52,720 --> 00:01:56,150 azok leesik dolgok, mint a merevlemezek és a CD-k és floppy lemezek és hasonlók, 38 00:01:56,150 --> 00:01:58,770 majd a cél a törvényszéki hivatal volt, hogy megállapítsa 39 00:01:58,770 --> 00:02:01,470 hogy volt-e, vagy nem volt bizonyíték valami. 40 00:02:01,470 --> 00:02:04,730 Ez volt a különleges vizsgálatok Unit, így volt a fehérgalléros bűnözés. 41 00:02:04,730 --> 00:02:10,949 Ez több volt aggasztó fajta bűncselekmények, bármit magában valamilyen digitális média. 42 00:02:10,949 --> 00:02:16,450 Kiderül, hogy nem, hogy sok ember írjon egy e-mailt mondván: "én tettem." 43 00:02:16,450 --> 00:02:20,490 Szóval elég gyakran, ezek a törvényszéki keresések nem kapcsolja fel az összes, hogy sok gyümölcs, 44 00:02:20,490 --> 00:02:22,820 de néha az emberek levelet az ilyen e-maileket. 45 00:02:22,820 --> 00:02:25,240 Így néha az erőfeszítéseket jutalmazták. 46 00:02:25,240 --> 00:02:31,210 >> De ahhoz, hogy vezet fel e törvényszéki Pset, mi lesz bevezetésével pset4 egy kis grafika. 47 00:02:31,210 --> 00:02:35,410 Valószínűleg ezeket a dolgokat magától értetődőnek - JPEG, GIF, és hasonlók - ezekben a napokban. 48 00:02:35,410 --> 00:02:38,320 De ha igazán belegondolunk, egy képet, ugyanúgy, mint Rob arca, 49 00:02:38,320 --> 00:02:41,270 lehet modellezni sorozatát pontok vagy pixelek. 50 00:02:41,270 --> 00:02:43,380 Abban az esetben, Rob arca, van mindenféle színben, 51 00:02:43,380 --> 00:02:46,760 és elkezdtük, hogy az egyes pontok, más néven pixel, 52 00:02:46,760 --> 00:02:48,610 egyszer elkezdtük a nagyításhoz be 53 00:02:48,610 --> 00:02:54,660 De ha egyszerűsítik a világot egy kicsit, és csak annyit, hogy ez itt Rob a fekete-fehér, 54 00:02:54,660 --> 00:02:57,490 hogy képviselje fekete-fehér, akkor csak használja bináris. 55 00:02:57,490 --> 00:03:01,660 És ha fogunk használni bináris, 1 vagy 0, tudjuk, hogy ezt az ugyanazt a képet 56 00:03:01,660 --> 00:03:06,140 A Rob mosolygó arc ezen minta bit. 57 00:03:06,140 --> 00:03:12,100 11000011 jelentése fehér, fehér, fekete, fekete, fekete, fekete, fehér, fehér. 58 00:03:12,100 --> 00:03:16,150 És ez nem egy hatalmas ugrás, majd kezdeni beszélni színes fényképek, 59 00:03:16,150 --> 00:03:18,600 dolgok, amit látni a Facebook-on, vagy tegyen egy digitális fényképezőgép. 60 00:03:18,600 --> 00:03:21,410 De természetesen, amikor a színeket, akkor kell több bitet. 61 00:03:21,410 --> 00:03:25,690 És elég gyakori a világ fényképek használata nem 1-bites szín, 62 00:03:25,690 --> 00:03:29,560 mivel ez azt sugallja, de 24-bit szín, ahol tényleg kap millió szín. 63 00:03:29,560 --> 00:03:32,250 Szóval, abban az esetben, amikor nagyított részt Rob szemében, 64 00:03:32,250 --> 00:03:36,370 volt bármennyi millió különböző színes lehetőségeket. 65 00:03:36,370 --> 00:03:39,040 Így fogunk bevezetni ezt a Problem Set 4, valamint a walkthrough, 66 00:03:39,040 --> 00:03:43,370 melyik lesz ma 3:30 helyett a szokásos 2:30 mert a pénteki előadás itt. 67 00:03:43,370 --> 00:03:46,620 De a video lesz online szokásos holnap. 68 00:03:46,620 --> 00:03:48,820 >> Majd azt is bemutatni, hogy egy másik fájlformátumban. 69 00:03:48,820 --> 00:03:51,270 Ez azt jelentette, hogy szándékosan nézd félelmetes az első, 70 00:03:51,270 --> 00:03:55,670 de ez csak néhány dokumentumot a C struct. 71 00:03:55,670 --> 00:03:58,940 Kiderül, hogy a Microsoft évekkel ezelőtt segített népszerűsítse ezt a formátumot 72 00:03:58,940 --> 00:04:05,150 az úgynevezett bitmap formátumban, bmp, és ez egy szuper egyszerű, színes grafikus fájlformátum 73 00:04:05,150 --> 00:04:10,150 is használt jó ideje, és néha még a háttérképeket az asztali gépek. 74 00:04:10,150 --> 00:04:14,760 Ha úgy gondolja, vissza a Windows XP és a dombok és a kék ég, 75 00:04:14,760 --> 00:04:17,170 ez jellemzően egy bmp vagy bitmap képeket. 76 00:04:17,170 --> 00:04:19,959 Bitképek szórakoztató számunkra, mert egy kicsit bonyolult. 77 00:04:19,959 --> 00:04:22,610 Ez nem annyira egyszerű, mint ez a rács a 0s és 1s. 78 00:04:22,610 --> 00:04:27,510 Ehelyett a dolgok, mint a fejléc elején egy fájlt. 79 00:04:27,510 --> 00:04:31,990 Más szóval, belsejében egy. Bmp fájl egy csomó 0s és 1s, 80 00:04:31,990 --> 00:04:34,910 de van néhány további 0s és 1s ott. 81 00:04:34,910 --> 00:04:38,220 És kiderül, hogy mi az, amit valószínűleg magától értetődőnek évek óta - 82 00:04:38,220 --> 00:04:45,170 fájlformátumokat, mint a. doc vagy. xls vagy. mp3,. mp4, függetlenül a fájlformátumok 83 00:04:45,170 --> 00:04:48,480 hogy te vagy ismeri - mit is jelent, hogy még egy fájlformátum, 84 00:04:48,480 --> 00:04:52,480 mert a végén a nap el ezeket a fájlokat használjuk imént 0s és 1S. 85 00:04:52,480 --> 00:04:56,810 És talán azok 0s és 1s képviselik ABC keresztül ASCII vagy hasonló, 86 00:04:56,810 --> 00:04:58,820 de a végén a nap, ez még mindig csak 0s és 1s. 87 00:04:58,820 --> 00:05:02,100 Szóval az emberek csak alkalmanként úgy, hogy kitaláljon egy új fájlformátumot 88 00:05:02,100 --> 00:05:06,420 amennyiben azok szabványosítása milyen mintákat bitet jelent valójában. 89 00:05:06,420 --> 00:05:09,220 És ebben az esetben is az emberek, akik célja a bitmap formátum 90 00:05:09,220 --> 00:05:15,620 azt mondta, hogy az első byte egy bitmap fájlt, például jelöljük offset 0 ott, 91 00:05:15,620 --> 00:05:18,940 ott lesz valami rejtélyes nevű nevű változó bfType, 92 00:05:18,940 --> 00:05:23,080 ami csak áll a bitmap fájl típusa, milyen típusú bitmap fájl ezt. 93 00:05:23,080 --> 00:05:27,700 Lehet következtetni, talán a második sorban, hogy az eltolt 2, byte szám 2, 94 00:05:27,700 --> 00:05:33,740 egy minta 0s és 1s képviselő mit? A méret a valamit. 95 00:05:33,740 --> 00:05:35,310 És ez megy onnan. 96 00:05:35,310 --> 00:05:37,410 Tehát a probléma Set 4, akkor meg kell végigsétált néhány ezeket a dolgokat. 97 00:05:37,410 --> 00:05:39,520 Nem fogunk a végén törődve mindet. 98 00:05:39,520 --> 00:05:47,510 De észre kezd érdekes körül byte 54: rgbtBlue, zöld és piros. 99 00:05:47,510 --> 00:05:52,110 Ha valaha is hallotta a betűszó RGB - vörös, zöld, kék - ez egy utalás, hogy a 100 00:05:52,110 --> 00:05:54,610 azért, mert kiderült, hogy tudja festeni a színek a szivárvány 101 00:05:54,610 --> 00:05:58,180 néhány kombinációja piros, kék és zöld. 102 00:05:58,180 --> 00:06:03,320 És valóban, a szülők a szobában lehet felidézni néhány, a legkorábbi projektorok. 103 00:06:03,320 --> 00:06:05,890 Ezek a napok, csak látni egy erős fény jön ki a lencse, 104 00:06:05,890 --> 00:06:09,800 de vissza a nap volt a vörös lencse, a kék lencse, és a zöld lencse, 105 00:06:09,800 --> 00:06:13,380 és együtt, amelynek célja a képernyőn, és megalakította a színes képet. 106 00:06:13,380 --> 00:06:16,270 És gyakran, közép iskolák és főiskolák volna e lencsék 107 00:06:16,270 --> 00:06:19,720 valaha így kicsit ferdén, így volt valami látni dupla vagy tripla képeket. 108 00:06:19,720 --> 00:06:24,100 De ez volt az ötlet. Nem volt piros, zöld és kék fény festő egy képet. 109 00:06:24,100 --> 00:06:26,590 És ez elvet használt számítógépek. 110 00:06:26,590 --> 00:06:30,230 >> Így a feladatok, akkor az Ön számára a probléma Set 4 lesznek néhány dolgot. 111 00:06:30,230 --> 00:06:34,800 Az egyik, hogy valóban átméretezi a képet, hogy a minta 0s és 1s, 112 00:06:34,800 --> 00:06:40,200 kitaláljuk, melyik darabokat 0s és 1s jelentenek mi az a struktúra, mint ez, 113 00:06:40,200 --> 00:06:43,630 majd kitaláljuk, hogyan lehet lemásolni a pixelek - a vörös, a kék, a zöld - 114 00:06:43,630 --> 00:06:46,660 belül annak érdekében, hogy ha egy képet a következőképpen néz ki kezdetben, 115 00:06:46,660 --> 00:06:49,210 lehet, hogy néz ki, hanem azt követően. 116 00:06:49,210 --> 00:06:53,640 Az egyéb kihívások is lesz az, hogy akkor át kell adni a törvényszéki képet 117 00:06:53,640 --> 00:06:56,030 , amelynek a tényleges fájlt egy digitális fényképezőgép. 118 00:06:56,030 --> 00:06:58,960 És, hogy a kamera, egyszer régen, volt egy csomó fotók. 119 00:06:58,960 --> 00:07:03,760 A probléma az, hogy véletlenül törölte, vagy volt a kép sérült valahogy. 120 00:07:03,760 --> 00:07:05,750 Rossz dolgok történnek a digitális fényképezőgépek. 121 00:07:05,750 --> 00:07:09,150 És így gyorsan másolt összes 0s és 1s le, hogy a kártya az Ön számára, 122 00:07:09,150 --> 00:07:13,610 megmentette őket minden egy nagy fájlt, és aztán adja át őket, hogy Ön Problem készlet 4 123 00:07:13,610 --> 00:07:19,320 így írni egy programot C-ben, amellyel vissza mindazoknak JPEG, ideális esetben. 124 00:07:19,320 --> 00:07:23,330 És kiderül, hogy a JPEG, annak ellenére, hogy kissé összetett fájl formátum - 125 00:07:23,330 --> 00:07:26,360 ők sokkal összetettebb, mint a mosolygó arc itt - 126 00:07:26,360 --> 00:07:31,160 kiderül, hogy minden JPEG kezdődik az azonos mintáinak 0s és 1s. 127 00:07:31,160 --> 00:07:35,630 Tehát a végső soron, a while vagy for ciklus vagy hasonló, 128 00:07:35,630 --> 00:07:38,880 akkor ismételget az egész 0s és 1s e törvényszéki képek, 129 00:07:38,880 --> 00:07:43,150 és minden alkalommal, amikor látni a különleges minta, ami meghatározott probléma set specifikáció, 130 00:07:43,150 --> 00:07:47,880 akkor valószínűleg itt, nagyon nagy a valószínűsége, hogy a start a JPEG. 131 00:07:47,880 --> 00:07:51,230 És amint megtalálni ugyanazt a mintát néhány byte-ok száma 132 00:07:51,230 --> 00:07:55,430 vagy kilobyte vagy megabyte-ban újabb, akkor feltételezzük, itt a második JPEG, 133 00:07:55,430 --> 00:07:57,380 A fénykép vettem az első után. 134 00:07:57,380 --> 00:08:01,370 Engedjék meg, hagyd abba az olvasást, hogy az első fájlra, kezdjük el írni ez az új, 135 00:08:01,370 --> 00:08:06,310 és a kimenet a program pset4 lesz akár 50 JPEG. 136 00:08:06,310 --> 00:08:09,270 És ha ez nem 50 JPEG, van egy kis hurok. 137 00:08:09,270 --> 00:08:12,490 Ha van egy végtelen számú JPEG, van egy végtelen ciklusba. 138 00:08:12,490 --> 00:08:14,910 Hogy is lesz elég gyakori eset. 139 00:08:14,910 --> 00:08:16,600 Szóval ez az, mi van a horizonton. 140 00:08:16,600 --> 00:08:21,310 >> Kvíz 0 mögöttünk, észre egy e-mail címemet, hogy mindig vannak emberek, akik mindketten boldog, 141 00:08:21,310 --> 00:08:23,640 egyfajta semleges, és szomorú körülbelül kvíz 0 idő. 142 00:08:23,640 --> 00:08:26,800 És kérem, nem érhetünk el nekem, a fej TF Zamyla, saját TF, 143 00:08:26,800 --> 00:08:31,180 vagy az egyik CA, hogy tudod, ha szeretné, hogy megvitassák, hogyan mentek a dolgok. 144 00:08:31,180 --> 00:08:35,539 >> Tehát, hogy lenyűgözni a szülők itt a szobában, mi a CS50 könyvtár? 145 00:08:36,429 --> 00:08:40,390 [Nevetés] Szép munka. 146 00:08:40,390 --> 00:08:48,340 Mi a CS50 könyvtár? Igen. >> [Hallgató] Ez egy előre megírt készlet kód [hallható] 147 00:08:48,340 --> 00:08:49,750 Oké, jó. 148 00:08:49,750 --> 00:08:53,240 Ez egy előre megírt sor kód, amit a személyzet írta, mi az neked, 149 00:08:53,240 --> 00:08:55,030 amely néhány közös funkcionalitás, 150 00:08:55,030 --> 00:08:59,020 ilyesmi nekem egy string, hozz nekem egy int - összes funkcióját, hogy itt vannak felsorolva. 151 00:08:59,020 --> 00:09:02,260 >> Kezdő most kezdjük igazán figyelembe e képzési kerekekkel. 152 00:09:02,260 --> 00:09:05,050 Fogunk kezdeni, hogy elvegye egy string tőled, 153 00:09:05,050 --> 00:09:08,870 amely visszahívás csak egy szinonimája, amit a tényleges adatok típus? >> [Több diák] Char *. 154 00:09:08,870 --> 00:09:12,730 Char *. A szülők, ez volt talán [teszi whooshing hang]. Ez jó. 155 00:09:12,730 --> 00:09:17,550 Char * kezdjük látni a képernyőn, annál is inkább, ahogy eltávolítani húr a mi szókincs, 156 00:09:17,550 --> 00:09:19,730 legalábbis amikor ténylegesen kódot írni. 157 00:09:19,730 --> 00:09:22,840 Hasonlóképpen, akkor hagyja abba a néhány ezeket a funkciókat annyi 158 00:09:22,840 --> 00:09:25,280 mert a programokat fog kapni kifinomultabb. 159 00:09:25,280 --> 00:09:28,480 Ahelyett, hogy csak programokat írhassanak, hogy üljön ott gyors villogó, 160 00:09:28,480 --> 00:09:31,870 várja, hogy a felhasználó adja meg valamit, akkor kap alapanyagot máshol. 161 00:09:31,870 --> 00:09:35,490 Például, kapsz őket egy sor bit a helyi merevlemezre. 162 00:09:35,490 --> 00:09:38,580 Majd ahelyett, hogy azokat a jövőben a hálózati kapcsolat, 163 00:09:38,580 --> 00:09:40,230 Néhány weboldal valahol. 164 00:09:40,230 --> 00:09:44,110 >> Szóval héjúak vissza, ez a réteg az első alkalommal, és húzza ki a CS50 Appliance 165 00:09:44,110 --> 00:09:49,010 és ez a nevű fájlt cs50.h, melyeket már # beleértve a héten 166 00:09:49,010 --> 00:09:51,140 de most tényleg, mi van a belsejében. 167 00:09:51,140 --> 00:09:54,430 A tetején a fájl a kék csak egy csomó hozzászólás: 168 00:09:54,430 --> 00:09:57,050 jótállási információk és engedélyezés. 169 00:09:57,050 --> 00:09:59,050 Ez egyfajta közös paradigma a szoftver 170 00:09:59,050 --> 00:10:01,580 mert sok szoftver ezekben a napokban az úgynevezett nyílt forráskódú, 171 00:10:01,580 --> 00:10:05,220 ami azt jelenti, hogy valaki írt a kódot, és tette szabadon hozzáférhetővé 172 00:10:05,220 --> 00:10:10,470 nem csak futni és használni, hanem olvasni és változtassa meg, és integrálható a saját munkáját. 173 00:10:10,470 --> 00:10:14,660 Szóval ez az, amit használ, a nyílt forráskódú szoftverek, bár nagyon kis formában. 174 00:10:14,660 --> 00:10:18,560 Ha lapozzunk lefelé múltban a megjegyzéseket, bár, akkor elkezd látni néhány ismerős dolgot. 175 00:10:18,560 --> 00:10:25,010 Közlemény a tetején, hogy itt a cs50.h fájl tartalmaz egy csomó header fájlokat. 176 00:10:25,010 --> 00:10:28,560 A legtöbb ilyen, már nem látott, de egy ismerős. 177 00:10:28,560 --> 00:10:32,270 Melyik láttunk, de röviden, eddig? >> [Hallgató] Standard könyvtár. 178 00:10:32,270 --> 00:10:35,810 Ja, standard könyvtár. stdlib.h van malloc. 179 00:10:35,810 --> 00:10:38,320 Amikor elkezdtünk beszélni dinamikus memória kiosztás, 180 00:10:38,320 --> 00:10:41,650 amely akkor jön vissza a jövő héten is, elkezdtük beleértve a fájlt. 181 00:10:41,650 --> 00:10:46,640 Kiderül, hogy bool és igaz és a hamis valójában nem léteznek C önmagában 182 00:10:46,640 --> 00:10:49,440 kivéve, ha ezt a fájlt. 183 00:10:49,440 --> 00:10:52,710 Mi már hetek óta, beleértve stdbool.h 184 00:10:52,710 --> 00:10:55,620 úgy, hogy tudod használni a fogalmát a bool, igaz vagy hamis. 185 00:10:55,620 --> 00:10:58,620 E nélkül meg kellett volna rendezni a hamis, és használni int 186 00:10:58,620 --> 00:11:02,610 és csak önkényesen feltételezik, hogy a 0 és 1 hamis igaz. 187 00:11:02,610 --> 00:11:07,150 Ha görgessen tovább, itt a mi meghatározása a string. 188 00:11:07,150 --> 00:11:11,390 Kiderült, ahogy azt már korábban mondtam, hogy ha ez a csillag nem igazán számít. 189 00:11:11,390 --> 00:11:13,720 Akkor is van hely körül. 190 00:11:13,720 --> 00:11:16,740 Mi ebben a félévben már támogatása, mert ez világossá tenni 191 00:11:16,740 --> 00:11:18,620 hogy a csillag köze van a típus, 192 00:11:18,620 --> 00:11:21,700 de észre, hogy a közös, ha nem egy kicsit több közös, 193 00:11:21,700 --> 00:11:24,430 az, hogy ott, de funkcionálisan ez ugyanaz a dolog. 194 00:11:24,430 --> 00:11:27,720 De most, ha azt olvassuk le a további, vessünk egy pillantást getInt 195 00:11:27,720 --> 00:11:32,190 mert használják, hogy talán, mielőtt bármi más ebben a félévben. 196 00:11:32,190 --> 00:11:37,440 Itt van getInt. Ez az, amit? >> [Hallgató] A prototípus. >> Ez csak egy prototípus. 197 00:11:37,440 --> 00:11:41,410 Gyakran előfordul, hogy mi tesz prototípusok a tetejét a. C kép, 198 00:11:41,410 --> 00:11:46,690 de akkor is fel prototípusok header fájlokat. h kép, mint ez itt 199 00:11:46,690 --> 00:11:50,840 így amikor írsz, bizonyos funkciók, hogy szeretné, hogy mások, hogy képes legyen használni, 200 00:11:50,840 --> 00:11:53,550 ami pontosan a helyzet a CS50 könyvtár, 201 00:11:53,550 --> 00:11:57,040 nem csak végre a feladatokat valami hasonló cs50.c, 202 00:11:57,040 --> 00:12:02,790 Ön is tegye a prototípusok nem a tetején, hogy a fájl, de a tetején egy header fájlt. 203 00:12:02,790 --> 00:12:07,170 Akkor header fájl, amit barátok és a kollégák között 204 00:12:07,170 --> 00:12:09,760 A # include saját kódját. 205 00:12:09,760 --> 00:12:12,210 Szóval ebben az időben, ha már, beleértve az összes ilyen prototípusok, 206 00:12:12,210 --> 00:12:16,580 hatékonyan a tetején a fájlt, de úton a # include mechanizmust, 207 00:12:16,580 --> 00:12:20,070 amely lényegében másolatok és paszták ezt a fájlt a saját. 208 00:12:20,070 --> 00:12:23,070 Itt van néhány meglehetősen részletes dokumentációt. 209 00:12:23,070 --> 00:12:25,640 Már nagyjából magától értetődőnek tekinti, hogy getInt kap egy int, 210 00:12:25,640 --> 00:12:27,640 de kiderül, vannak sarok esetekben. 211 00:12:27,640 --> 00:12:31,810 Mi van, ha a felhasználó beír egy számot, hogy ez túl nagy, a trillió, 212 00:12:31,810 --> 00:12:35,490 hogy egyszerűen nem fér el egy int? Mi a várt viselkedést? 213 00:12:35,490 --> 00:12:38,020 Ideális esetben ez kiszámítható. 214 00:12:38,020 --> 00:12:40,280 Tehát ebben az esetben, ha valóban olvassa el az apró betűs részt, 215 00:12:40,280 --> 00:12:44,500 akkor valóban látni, hogy ha a vonal nem lehet olvasni, ez visszatér INT_MAX. 216 00:12:44,500 --> 00:12:48,320 Még soha nem beszéltünk erről, de alapuló kapitalizáció, mi ez talán? 217 00:12:48,320 --> 00:12:50,640 [Hallgató] A konstans. >> Ez egy állandó. 218 00:12:50,640 --> 00:12:54,770 Ez néhány speciális konstans, ami valószínűleg bejelentett egyik ilyen fejlécfájlokat 219 00:12:54,770 --> 00:13:00,090 ez feljebb a fájlt, és INT_MAX valószínűleg valami hasonló durván 2 milliárd 220 00:13:00,090 --> 00:13:04,990 az ötlet az, hogy azért, mert meg kell valahogy jelzi, hogy valami baj, 221 00:13:04,990 --> 00:13:10,700 mi, igen, van 4000000000 szám áll a rendelkezésünkre: -2 milliárd legfeljebb 2 milliárd ide vagy oda. 222 00:13:10,700 --> 00:13:14,710 Nos, mi a közös programozás te vagy lopni csak az egyik ezek a számok, 223 00:13:14,710 --> 00:13:18,920 talán 0, talán 2 milliárd talán -2000000000, 224 00:13:18,920 --> 00:13:23,280 így eltölteni egy a lehetséges értékek, így kötelezzék el magukat a világnak 225 00:13:23,280 --> 00:13:26,820 hogy ha valami elromlik, vissza fogok térni a szuper nagy értéket. 226 00:13:26,820 --> 00:13:31,030 De nem akarjuk, hogy a felhasználó gépelési valami rejtélyes, mint a 234 ... egy igazán nagy szám. 227 00:13:31,030 --> 00:13:34,060 Te általánosítani ehelyett egy állandó. 228 00:13:34,060 --> 00:13:38,060 Szóval tényleg, ha arra, hogy az anális az elmúlt hetekben, minden alkalommal, amikor hívott getInt, 229 00:13:38,060 --> 00:13:42,900 akkor kellett volna, ha ellenőrzi egy feltétel volt a felhasználói típus INT_MAX, 230 00:13:42,900 --> 00:13:46,590 vagy, pontosabban, volt getInt visszatérés INT_MAX, mert ha mégis, 231 00:13:46,590 --> 00:13:51,830 hogy valójában azt jelenti, hogy nem írja meg. Valami nem stimmel ebben az ügyben. 232 00:13:51,830 --> 00:13:56,080 Szóval ez az, ami általánosan ismert, mint egy őrszem értéket, amely csak azt jelenti, különleges. 233 00:13:56,080 --> 00:13:58,120 >> Nézzük most kapcsolja be a. C fájlt. 234 00:13:58,120 --> 00:14:01,340 A C fájl létezett a készülék egy ideig. 235 00:14:01,340 --> 00:14:06,840 És valóban, a készülék megvan előre összeállítani téged a dolog hívtuk tárgykód, 236 00:14:06,840 --> 00:14:09,540 de ez csak nem számít, hogy hol van, mert a rendszer tudja, 237 00:14:09,540 --> 00:14:11,730 ebben az esetben, ha az a következő: a készülék. 238 00:14:11,730 --> 00:14:17,400 Nézzük görgessen most getInt és hogyan getInt dolgozott egész idő alatt. 239 00:14:17,400 --> 00:14:19,460 Itt is hasonló megjegyzéseket előtt. 240 00:14:19,460 --> 00:14:21,660 Hadd nagyításához csak a kód részét. 241 00:14:21,660 --> 00:14:23,900 És mi van a getInt a következő. 242 00:14:23,900 --> 00:14:25,700 Ez nem veszi be. 243 00:14:25,700 --> 00:14:29,510 Visszaküldi int, while (true), így van egy szándékos végtelen ciklus, 244 00:14:29,510 --> 00:14:33,180 de feltehetően fogunk kitörni e valahogy, vagy térjen vissza belülről ezt. 245 00:14:33,180 --> 00:14:34,870 >> Lássuk, hogyan is működik ez. 246 00:14:34,870 --> 00:14:39,240 Úgy tűnik, hogy a getString ebben az első sorban a cikluson belül, 166. 247 00:14:39,240 --> 00:14:43,780 Ez most jó gyakorlat, mert milyen körülmények között lehetne getString vissza 248 00:14:43,780 --> 00:14:47,660 a speciális NULL kulcsszó? >> [Hallgató] Ha valami balul sül el. 249 00:14:47,660 --> 00:14:51,630 Ha valami balul sül el. És mi romolhat el, ha szükséges valami ilyesmit getString? 250 00:14:54,960 --> 00:14:57,640 Igen. >> [Hallgató] malloc nem, hogy ez a ints. 251 00:14:57,640 --> 00:14:59,150 Igen. Talán malloc sikertelen. 252 00:14:59,150 --> 00:15:03,190 Valahol a motorháztető alatt, getString hívja malloc, amely rendelkezésre bocsátja memória, 253 00:15:03,190 --> 00:15:06,020 amely lehetővé teszi a számítógép tárolja az összes karakter 254 00:15:06,020 --> 00:15:07,750 hogy a felhasználó beír a billentyűzetet. 255 00:15:07,750 --> 00:15:11,590 És tegyük fel, a felhasználó már egy csomó szabad idő és gépelt tovább, például 256 00:15:11,590 --> 00:15:16,160 mint 2 milliárd karakter, több karakter, mint a számítógép is van RAM. 257 00:15:16,160 --> 00:15:19,250 GetString képesnek kell lennie arra, hogy jelzi, hogy az Ön számára. 258 00:15:19,250 --> 00:15:22,560 Még ha ez egy szuper, szuper sarok gyakori eset, 259 00:15:22,560 --> 00:15:24,340 azt kell valahogy, hogy képes legyen kezelni ezt, 260 00:15:24,340 --> 00:15:28,750 és így getString ha mentünk vissza, és olvassuk el a dokumentációját, valóban vissza NULL. 261 00:15:28,750 --> 00:15:34,460 Tehát most, ha nem sikerül getString visszaküldésével NULL, getInt fog sikertelen visszaadásával INT_MAX 262 00:15:34,460 --> 00:15:37,690 csak mint egy őrszem. Ezek csak emberi egyezményeket. 263 00:15:37,690 --> 00:15:41,450 Az egyetlen módja, akkor tudjuk, hogy ez az ügy, ha elolvassa a dokumentációt. 264 00:15:41,450 --> 00:15:45,040 >> Nézzük lapozzunk le, ahol az int ténylegesen ütött. 265 00:15:45,040 --> 00:15:51,160 Ha lapozzunk lefelé egy kicsit tovább, sorban 170, van egy megjegyzést a fenti ezeket a sorokat. 266 00:15:51,160 --> 00:15:55,100 Kijelentjük, a 172 int, n, és egy char, c, és akkor ez az új funkció, 267 00:15:55,100 --> 00:15:58,930 amelyek közül néhány Önök közül botlott előtt, sscanf. 268 00:15:58,930 --> 00:16:00,870 Ez áll a string scanf. 269 00:16:00,870 --> 00:16:05,700 Más szóval, adj egy húr, és én is kutatnak az információt érdekes. 270 00:16:05,700 --> 00:16:07,360 Mit jelent ez? 271 00:16:07,360 --> 00:16:11,800 Tegyük fel, hogy írja be, szó szerint, 123 a billentyűzeten, majd nyomja meg az Enter billentyűt. 272 00:16:11,800 --> 00:16:16,470 Milyen adattípus a 123, ha visszaküldik getString? >> [Hallgató] String. 273 00:16:16,470 --> 00:16:18,380 Ez nyilvánvalóan egy string, ugye? Van egy string. 274 00:16:18,380 --> 00:16:23,220 Tehát 123 valóban, idézet-idézet vége, 123 a \ 0 a végén is. 275 00:16:23,220 --> 00:16:27,110 Ez nem egy int. Ez nem egy szám. Úgy néz ki, mint egy szám, de ez valójában nem. 276 00:16:27,110 --> 00:16:29,080 Szóval mit getInt kell tennem? 277 00:16:29,080 --> 00:16:35,750 Azt olvasni, hogy a karakterlánc balról jobbra - 123 \ 0 - és valahogy átalakítani, hogy a tényleges értéke. 278 00:16:35,750 --> 00:16:37,850 Lehet kitalálni, hogyan kell ezt csinálni. 279 00:16:37,850 --> 00:16:41,450 Ha úgy gondolja, vissza pset2, akkor valószínűleg egy kicsit kényelmetlen Caesar 280 00:16:41,450 --> 00:16:44,820 vagy Vigenère, így iterációkhoz egy string, akkor konvertálni karakterről ints. 281 00:16:44,820 --> 00:16:46,710 De a fene, ez egy csomó munka. 282 00:16:46,710 --> 00:16:49,860 Miért nem hív egy függvényt, mint sscanf azt nem, hogy az Ön számára? 283 00:16:49,860 --> 00:16:54,230 Szóval sscanf vár érv - ebben az esetben az úgynevezett vonal, ami egy string. 284 00:16:54,230 --> 00:17:01,840 Ezután megadhatja az idézetek, nagyon hasonlít a printf, mit vársz látni ezt a fonalat. 285 00:17:01,840 --> 00:17:09,000 És mit mondok itt várom, hogy egy decimális szám, és talán egy karaktert. 286 00:17:09,000 --> 00:17:12,000 És majd meglátjuk, hogy miért ez a helyzet, csak egy pillanatra. 287 00:17:12,000 --> 00:17:15,869 És kiderül, hogy ez a jelölés már emlékeztet stuff elkezdtünk beszélni 288 00:17:15,869 --> 00:17:17,619 alig több mint egy hete. 289 00:17:17,619 --> 00:17:21,740 Mi az & n és & c tesz minket? >> [Hallgató] Cím n és címét, c. 290 00:17:21,740 --> 00:17:25,400 Igen. Ez ad nekem a címét, n és címe c. Miért fontos ez? 291 00:17:25,400 --> 00:17:30,220 Tudod, hogy a funkciók C, akkor mindig ad vissza értéket, vagy értékkel egyáltalán nem rendelkeznek. 292 00:17:30,220 --> 00:17:34,530 Akkor vissza int, egy string, egy úszó, egy karakter, bármi, vagy visszatérhet semmis, 293 00:17:34,530 --> 00:17:38,030 de csak vissza egy dolgot maximálisan. 294 00:17:38,030 --> 00:17:42,760 De itt akarunk sscanf vissza hozzám talán egy int, egy decimális szám, 295 00:17:42,760 --> 00:17:46,220 és egy char, és leírom, miért char egy pillanat. 296 00:17:46,220 --> 00:17:51,460 Ha hatékonyan akarsz sscanf visszatérni két dolgot, de ez egyszerűen nem lehetséges, C. 297 00:17:51,460 --> 00:17:55,200 Dolgozhat bárhol, hogy a tompított két cím 298 00:17:55,200 --> 00:17:57,370 mert amint átadja függvény két címet, 299 00:17:57,370 --> 00:18:00,470 mit tud ez a funkció csinálni velük? >> [Hallgató] írása az említett címekre. 300 00:18:00,470 --> 00:18:02,010 Meg lehet írni ezeket a címeket. 301 00:18:02,010 --> 00:18:05,770 Használhatja a csillag működésének és ott, hogy minden egyes ilyen címeket. 302 00:18:05,770 --> 00:18:11,260 Ez a fajta a hátsó ajtó mechanizmusát, de nagyon gyakori a változó a változók értékei 303 00:18:11,260 --> 00:18:14,870 több, mint egy helyen - ebben az esetben két. 304 00:18:14,870 --> 00:18:21,340 Most már észre Én ellenőrizve == 1, majd visszatérnek n ha ez valójában, értékeli az igaz. 305 00:18:21,340 --> 00:18:26,170 Szóval, mi folyik itt? Gyakorlatilag minden, amit igazán akar történni getInt ez. 306 00:18:26,170 --> 00:18:30,740 Azt akarjuk, hogy elemezze, hogy úgy mondjam, azt akarjuk, hogy olvassa el a húr - quote-unquote 123 - 307 00:18:30,740 --> 00:18:34,560 és ha úgy néz ki, van egy szám van, amit mi mondod sscanf tenni 308 00:18:34,560 --> 00:18:38,190 kerül ez a szám - 123 - ebben a változó n nekem. 309 00:18:38,190 --> 00:18:42,090 Szóval akkor miért Igazából ezt is? 310 00:18:42,090 --> 00:18:48,220 Mi a szerepe a sscanf mondod is kap egy karaktert ide? 311 00:18:48,220 --> 00:18:53,470 [Hallhatatlan diák válasza] >> A tizedes pont valóban működhet. 312 00:18:53,470 --> 00:18:56,330 Nézzük meg, hogy egy pillanatra elgondolkozott. Mi van még? 313 00:18:56,330 --> 00:18:59,270 [Hallgató] Lehet, NULL. >> Jó gondolat. Lehet, hogy a null karakter. 314 00:18:59,270 --> 00:19:01,660 Ez valójában nem ebben az esetben. Igen. >> [Hallgató] ASCII. 315 00:19:01,660 --> 00:19:04,340 ASCII. Vagy hadd általánosítani még tovább. 316 00:19:04,340 --> 00:19:06,640 A% c ott is csak a hibák ellenőrzésére. 317 00:19:06,640 --> 00:19:09,300 Nem akarom, hogy egy karakter szám után, 318 00:19:09,300 --> 00:19:11,870 de mi ez lehetővé teszi számomra, hogy a következő. 319 00:19:11,870 --> 00:19:18,210 Kiderült, hogy sscanf mellett értéket tárolhatunk az N-és C-ben ebben a példában itt, 320 00:19:18,210 --> 00:19:24,890 mit is jelent ez visszaadja a változók száma terjesztett values ​​be 321 00:19:24,890 --> 00:19:30,260 Tehát, ha csak írja be a 123, akkor csak a% d fog egyeztetni, 322 00:19:30,260 --> 00:19:33,880 és csak n lesz tárolva egy értékkel, mint a 123, 323 00:19:33,880 --> 00:19:35,640 és semmi sem lesz bevezetni c. 324 00:19:35,640 --> 00:19:37,620 C marad szemét érték, hogy úgy mondjam - 325 00:19:37,620 --> 00:19:40,730 szemét, mert ez soha nem inicializálni bizonyos értéket. 326 00:19:40,730 --> 00:19:45,520 Tehát ebben az esetben sscanf értéke 1, mert lakott 1-e mutatók, 327 00:19:45,520 --> 00:19:50,190 ebben az esetben nagy, van egy int úgyhogy szabad a vonal szabadítson fel a memória 328 00:19:50,190 --> 00:19:54,000 hogy getString ténylegesen kiosztott, és aztán vissza n, 329 00:19:54,000 --> 00:19:58,500 else if Gondolkozott már azon, ha ez a megállapítás Újra jön, jön itt. 330 00:19:58,500 --> 00:20:04,390 Tehát, ha ezzel szemben azt írja 123foo - csak néhány véletlenszerű sorrendben szövegének - 331 00:20:04,390 --> 00:20:08,490 sscanf fog látni szám, szám, szám, f, 332 00:20:08,490 --> 00:20:16,410 és ez megy, hogy a 123 n, ez megy, hogy a f ac, majd vissza 2. 333 00:20:16,410 --> 00:20:20,640 Tehát, csak a meghatározást sscanf viselkedését, egy nagyon egyszerű módon - 334 00:20:20,640 --> 00:20:23,900 jól, komplex első pillantásra, de a végén a nap meglehetősen egyszerű mechanizmus - 335 00:20:23,900 --> 00:20:28,320 a mondás van-int, és ha igen, hogy az egyetlen dolog, amit találtam? 336 00:20:28,320 --> 00:20:29,860 És a szóközök itt szándékos. 337 00:20:29,860 --> 00:20:34,000 Ha elolvasod a dokumentációt sscanf, azt mondja, hogy ha tartalmaznak egy darab whitespace 338 00:20:34,000 --> 00:20:38,810 elején vagy a végén, sscanf is lehetővé teszi, hogy a felhasználó bármilyen okból, 339 00:20:38,810 --> 00:20:41,860 a hit szóköz 123 és hogy lesz legitim. 340 00:20:41,860 --> 00:20:44,150 Nem fog kiabálni a felhasználó csak azért, mert nyomja meg a szóköz 341 00:20:44,150 --> 00:20:48,640 elején vagy a végén, ami csak egy kicsit felhasználóbarát. 342 00:20:48,640 --> 00:20:52,300 >> Van még kérdése majd getInt? Igen. >> [Hallgató] Mi lenne, ha csak valósult meg a karakter? 343 00:20:52,300 --> 00:20:54,030 Jó kérdés. 344 00:20:54,030 --> 00:20:59,890 Mi van, ha csak beírt egy char, mint f, és nyomja meg az Enter anélkül, hogy valaha gépelés 123? 345 00:20:59,890 --> 00:21:02,420 Mit gondol a viselkedését ezt a kódsort akkor lenne? 346 00:21:02,420 --> 00:21:04,730 [Hallhatatlan hallgatói válasz] 347 00:21:04,730 --> 00:21:08,790 Igen, sscanf fedezheti, hogy is, mert ebben az esetben ez nem fog kitölteni n vagy c. 348 00:21:08,790 --> 00:21:15,310 Ez lesz helyette visszatér 0, ebben az esetben én is kifogása, hogy a forgatókönyv 349 00:21:15,310 --> 00:21:18,750 azért, mert a várható érték akarom 1 lehet. 350 00:21:18,750 --> 00:21:22,000 Én csak azt akarom egy és csak egy dolog kell kitölteni. Jó kérdés. 351 00:21:22,000 --> 00:21:24,290 >> Mások? Rendben van. 352 00:21:24,290 --> 00:21:26,250 >> Ne menjen végig az összes funkció itt, 353 00:21:26,250 --> 00:21:29,500 de az egyik, hogy úgy tűnik, hogy talán a fennmaradó kamatot getString 354 00:21:29,500 --> 00:21:32,790 mert kiderül, hogy getFloat, getInt, GetDouble, GetLongLong 355 00:21:32,790 --> 00:21:36,260 minden punt sok a funkcionalitást getString. 356 00:21:36,260 --> 00:21:39,750 Szóval vessünk egy pillantást, hogyan valósul meg itt. 357 00:21:39,750 --> 00:21:43,630 Ez úgy néz ki, egy kicsit bonyolult, de ugyanazt a fundamentumok 358 00:21:43,630 --> 00:21:45,670 hogy elkezdtünk beszélni a múlt héten. 359 00:21:45,670 --> 00:21:49,490 A getString, amely nem veszi érvet, mint egy a void ide 360 00:21:49,490 --> 00:21:53,730 és visszaad egy string, én vagyok nyilvánításáról látszólag egy string nevű puffer. 361 00:21:53,730 --> 00:21:56,270 Én nem igazán tudom, hogy mi fog használni még, de majd meglátjuk. 362 00:21:56,270 --> 00:21:58,390 Úgy néz ki, kapacitása alapértelmezés szerint 0-ra. 363 00:21:58,390 --> 00:22:01,350 Nem egészen biztos, ha ez megy, és nem tudja, mit n fog használni még 364 00:22:01,350 --> 00:22:03,590 de most már kezd egy kicsit érdekes. 365 00:22:03,590 --> 00:22:06,520 A sorban 243, kijelentjük int, c. 366 00:22:06,520 --> 00:22:08,800 Ez egyfajta hülye részletességgel. 367 00:22:08,800 --> 00:22:15,820 A char 8 bites, és 8 bit tud tárolni, hogy hány különböző értéke? >> [Hallgató] 256. >> 256. 368 00:22:15,820 --> 00:22:20,730 A probléma az, ha azt szeretnénk, hogy 256 különböző ASCII-karakter, ami van 369 00:22:20,730 --> 00:22:23,340 ha úgy gondolja, vissza - és ez nem valami memorizálni. 370 00:22:23,340 --> 00:22:25,710 De ha úgy gondolja, vissza a nagy ASCII chart volt héttel ezelőtt, 371 00:22:25,710 --> 00:22:30,600 voltak ebben az esetben 128 vagy 256 ASCII karakter. 372 00:22:30,600 --> 00:22:32,940 Használtuk a minták 0s és 1s fel. 373 00:22:32,940 --> 00:22:36,210 Ez egy probléma, ha azt szeretné, hogy képes legyen érzékelni hiba 374 00:22:36,210 --> 00:22:40,190 mert ha már használja a 256 értéket a karakterek, 375 00:22:40,190 --> 00:22:43,050 Ön nem igazán előre tervezni, mert most nincs mód mondván: 376 00:22:43,050 --> 00:22:46,270 ez nem egy legit karakter, ez néhány hibás üzenet. 377 00:22:46,270 --> 00:22:50,270 Szóval, mi a világ nem az, hogy használja a következő legnagyobb érték, olyasmi, mint egy int, 378 00:22:50,270 --> 00:22:54,720 úgy, hogy egy őrült bitek száma, 32, 4 milliárd lehetséges értékek 379 00:22:54,720 --> 00:22:58,860 így egyszerűen végén felhasználásával lényegében 257 őket, 380 00:22:58,860 --> 00:23:01,720 Ebből 1 olyan különleges jelentése, mint a hiba. 381 00:23:01,720 --> 00:23:03,120 >> Nézzük, hogyan is működik ez. 382 00:23:03,120 --> 00:23:07,760 A sorban 246, van ez a nagy while hogy hívja fgetc, 383 00:23:07,760 --> 00:23:11,090 f értelmében fájlt, így getc, majd stdin. 384 00:23:11,090 --> 00:23:15,520 Kiderült, hogy ez csak a pontosabb megfogalmazásban azt olvassa be a billentyűzetről. 385 00:23:15,520 --> 00:23:19,300 Szabványos bemeneti eszközök billentyűzet, standard output olyan képernyőn, 386 00:23:19,300 --> 00:23:23,310 és standard hiba, amit majd látni pset4, azt jelenti, a képernyő 387 00:23:23,310 --> 00:23:27,490 hanem egy speciális része a képernyőn úgy, hogy ez nem keveri a tényleges kibocsátás 388 00:23:27,490 --> 00:23:30,750 hogy tervezett nyomtatni. De még ezen a jövőben. 389 00:23:30,750 --> 00:23:34,440 Szóval fgetc csak azt jelenti, olvasni egy karaktert a billentyűzet és tárolja, ahol? 390 00:23:34,440 --> 00:23:37,350 Tárolja c. 391 00:23:37,350 --> 00:23:41,360 És akkor check - úgyhogy csak használ néhány logikai kötőszavak itt - 392 00:23:41,360 --> 00:23:46,000 ellenőrizze, hogy nem egyenlő - \ n, így a felhasználó Enter, szeretnénk állítani azon a ponton, 393 00:23:46,000 --> 00:23:49,850 végén a hurok - és mi is szeretnénk, hogy ellenőrizze a különleges állandó EOF, 394 00:23:49,850 --> 00:23:53,610 amely, ha tudod, vagy kitalálni, mit állni? >> [Hallgató] Vége a fájl. >> Vége a fájl. 395 00:23:53,610 --> 00:23:56,560 Ez az a fajta értelmetlen, mert ha én vagyok gépelni a billentyűzeten, 396 00:23:56,560 --> 00:23:58,870 már tényleg nincs fájlt részt ebben, 397 00:23:58,870 --> 00:24:01,150 de ez csak egyfajta általános kifejezés azt jelenti, 398 00:24:01,150 --> 00:24:04,220 hogy semmi más nem jön az ember ujjai. 399 00:24:04,220 --> 00:24:06,460 EOF - fájl vége. 400 00:24:06,460 --> 00:24:09,920 Mint félre, ha valaha is sújtotta Control D az a billentyűzet, nem az, hogy akkor még - 401 00:24:09,920 --> 00:24:15,230 amit hit vezérlés C - Control D küldi ezt a különleges állandó nevű EOF. 402 00:24:15,230 --> 00:24:19,850 Szóval most már csak néhány dinamikus memória kiosztás. 403 00:24:19,850 --> 00:24:23,440 >> Tehát, ha (n + 1> kapacitás). Most elmondom n. 404 00:24:23,440 --> 00:24:26,100 N éppen hány bájt van jelenleg a puffer, 405 00:24:26,100 --> 00:24:28,620 a szöveg, hogy te éppen kiépítése a felhasználó elől. 406 00:24:28,620 --> 00:24:33,450 Ha több karaktert a puffer kapacitása, mint a pufferben, 407 00:24:33,450 --> 00:24:37,410 ösztönösen, mit kell tennünk ezután fordítsanak több kapacitást. 408 00:24:37,410 --> 00:24:43,330 Szóval megyek sovány át néhány számtani itt összpontosítani ezt a funkciót itt. 409 00:24:43,330 --> 00:24:46,070 Tudod, mi malloc van, vagy legalábbis általában ismerik. 410 00:24:46,070 --> 00:24:48,970 Vegyünk egy tipp, amit realloc csinál. >> [Hallgató] Hozzáad memória. 411 00:24:48,970 --> 00:24:52,920 Ez nem elég hozzá memória. Úgy reallocates memória az alábbiak szerint. 412 00:24:52,920 --> 00:24:57,220 Ha van még hely a végén a húr, hogy Ön több e memória 413 00:24:57,220 --> 00:25:00,000 mint azt eredetileg ad, akkor kapsz, hogy további memóriát. 414 00:25:00,000 --> 00:25:03,460 Szóval lehet csak tartani üzembe a karakterlánc karakterek háttal hátra hátra. 415 00:25:03,460 --> 00:25:05,830 De ha nem ez a helyzet, mert túl sokáig vártam 416 00:25:05,830 --> 00:25:07,940 és valami véletlen kapott lehuppant a memóriában van 417 00:25:07,940 --> 00:25:10,290 de van extra memória idelent, ez rendben van. 418 00:25:10,290 --> 00:25:13,100 Realloc fog tenni a nehéz emelés az Ön számára, 419 00:25:13,100 --> 00:25:16,750 mozog a húr, amit olvasott eddig innen, tedd le oda, 420 00:25:16,750 --> 00:25:19,460 majd ad néhány futópálya ezen a ponton. 421 00:25:19,460 --> 00:25:22,550 >> Tehát egy kézlegyintéssel, hadd mondjam el, hogy amit csinál getString 422 00:25:22,550 --> 00:25:26,330 van ez kezd egy kis puffer, talán egyetlen karakter, 423 00:25:26,330 --> 00:25:30,820 és ha a felhasználó beírja a két karakter, getString végül hívás realloc és azt mondja: 424 00:25:30,820 --> 00:25:33,150 Egy karakter nem volt elég, adj két karakter. 425 00:25:33,150 --> 00:25:35,950 Akkor, ha olvassa el a logikája a hurok, ez fog mondani 426 00:25:35,950 --> 00:25:39,600 a felhasználó beírt 3 karaktert, add nekem most nem 2, hanem 4 karakter, 427 00:25:39,600 --> 00:25:42,320 majd adja meg 8, akkor adj 16 és 32. 428 00:25:42,320 --> 00:25:45,000 Az a tény, hogy én vagyok a kapacitás megduplázása minden alkalommal 429 00:25:45,000 --> 00:25:48,570 azt jelenti, hogy a puffer nem fog lassan növekszik, ez fog növekedni szupergyors. 430 00:25:48,570 --> 00:25:51,380 És mi lehet az előnye, hogy a? 431 00:25:51,380 --> 00:25:54,600 Miért megduplázva a méretét a puffer 432 00:25:54,600 --> 00:25:58,020 annak ellenére, hogy a felhasználó, hogy csak kell egy plusz karaktert a billentyűzet? 433 00:25:58,020 --> 00:26:01,750 [Hallhatatlan diák válasza] >> Mi ez? >> [Hallgató] Nem nő azt gyakran. 434 00:26:01,750 --> 00:26:03,300 Pontosan. Nem nő azt gyakran. 435 00:26:03,300 --> 00:26:05,510 És ez csak egyfajta te fedezeti a fogadások itt, 436 00:26:05,510 --> 00:26:10,850 az ötlet az, hogy nem akarja, hogy hívja realloc sokat, mert hajlamos arra, hogy lassú. 437 00:26:10,850 --> 00:26:12,910 Minden alkalommal, amikor kérdez az operációs rendszer memória, 438 00:26:12,910 --> 00:26:16,990 ahogy hamarosan látni egy jövőbeli probléma halmaz, akkor hajlamos arra, hogy időbe telik. 439 00:26:16,990 --> 00:26:20,010 Így minimálisra, hogy mennyi időt, akkor is, ha pazarolja egy kis helyet, 440 00:26:20,010 --> 00:26:21,900 inkább egy jó dolog. 441 00:26:21,900 --> 00:26:24,060 >> De ha olvassa végig az utolsó része getString itt - 442 00:26:24,060 --> 00:26:27,950 és ismét megértése minden egyes sor itt nem olyan fontos ma - 443 00:26:27,950 --> 00:26:30,530 észre, hogy végül felhívja malloc újra 444 00:26:30,530 --> 00:26:33,880 és osztja pontosan annyi bájt, mint szüksége a húr 445 00:26:33,880 --> 00:26:38,060 majd eldobja hívja ingyenesen a túlzottan nagy puffer 446 00:26:38,060 --> 00:26:40,080 ha ez valóban kapott kétszeresére túl sokszor. 447 00:26:40,080 --> 00:26:42,730 Szóval röviden, ez hogyan getString dolgozott egész idő alatt. 448 00:26:42,730 --> 00:26:47,060 Minden ez olvasható egy karaktert egy időben újra és újra és újra, 449 00:26:47,060 --> 00:26:50,750 és minden alkalommal, amikor szüksége van némi további memóriát, akkor kéri az operációs rendszer, hogy 450 00:26:50,750 --> 00:26:53,670 hívja realloc. 451 00:26:53,670 --> 00:26:57,890 >> Van még kérdése? Rendben van. 452 00:26:57,890 --> 00:26:59,270 >> A támadás. 453 00:26:59,270 --> 00:27:04,060 Most, hogy tudjuk, mutatók, vagy legalábbis egyre inkább ismerik mutatók, 454 00:27:04,060 --> 00:27:06,700 nézzük meg, hogy az egész világ kezd összeomlani 455 00:27:06,700 --> 00:27:10,030 ha nem elég védekezni ellenséges felhasználók, 456 00:27:10,030 --> 00:27:11,850 az emberek, akik megpróbálják feltörni a rendszert, 457 00:27:11,850 --> 00:27:16,890 az emberek, akik megpróbálják ellopni a szoftver megkerülésével bizonyos regisztrációs kód 458 00:27:16,890 --> 00:27:19,090 hogy máskülönben írja be 459 00:27:19,090 --> 00:27:22,990 >> Nézd meg ezt a példát itt, ami csak a C kód, amelynek fő funkciója az alján 460 00:27:22,990 --> 00:27:26,380 hogy felhívja a function ize. És mi van az, átadva foo? 461 00:27:26,380 --> 00:27:29,680 [Hallgató] Egyetlen érv. >> [Malan] Egyetlen érv. 462 00:27:29,680 --> 00:27:33,450 Szóval, argv [1], ami azt jelenti, az első szó, hogy a felhasználó beírt a parancssorban 463 00:27:33,450 --> 00:27:36,360 után a.out vagy bármi a program neve. 464 00:27:36,360 --> 00:27:41,680 Tehát foo tetején vesz egy char *. De char * éppen mi? >> [Hallgató] A string. 465 00:27:41,680 --> 00:27:43,350 [Malan] A húr, így semmi új itt. 466 00:27:43,350 --> 00:27:45,420 Ez a string önkényesen hívott bar. 467 00:27:45,420 --> 00:27:51,430 Ebben a sorban van, char c [12]-ben egyfajta félig műszaki English, mi ezt a vonalat csinál? 468 00:27:51,430 --> 00:27:55,220 [Hallgató] Egy sor - >> tömbje? >> [Hallgató] karakterek. >> Karakterek. 469 00:27:55,220 --> 00:27:58,870 Adj egy sor 12 karakter. Tehát nevezhetnénk ezt a puffert. 470 00:27:58,870 --> 00:28:02,920 Ez technikailag úgynevezett c, de a puffer programozási csak annyit jelent, egy csomó helyet 471 00:28:02,920 --> 00:28:04,800 hogy lehet tenni néhány dolgot be 472 00:28:04,800 --> 00:28:07,940 Aztán végül memcpy általunk nem használt korábban, de akkor talán kitalálni, hogy mit csinál. 473 00:28:07,940 --> 00:28:10,480 Másolja memória. Mit tegyek? 474 00:28:10,480 --> 00:28:19,270 Ez látszólag másolja bar, a bemeneti, a c de csak a hossza bar. 475 00:28:19,270 --> 00:28:24,930 De van egy hiba van. >> [Hallgató] szükség van a sizeof karaktert. >> Oké. 476 00:28:24,930 --> 00:28:30,860 Technikailag, meg kell tényleg strlen (bar) * sizeof (char)). Ez helyes. 477 00:28:30,860 --> 00:28:33,930 De a legrosszabb esetben is, tegyük fel, hogy ez - 478 00:28:33,930 --> 00:28:35,950 Oké. Aztán van két hiba. 479 00:28:35,950 --> 00:28:39,160 Szóval sizeof (char)); 480 00:28:39,160 --> 00:28:41,290 Nézzük, hogy ez egy kicsit szélesebb. 481 00:28:41,290 --> 00:28:44,910 Tehát most van még egy hiba, amely a mi? >> [Hallhatatlan tanulói válasz] 482 00:28:44,910 --> 00:28:46,990 Ellenőrizze, hogy milyen? >> [Hallgató] Ellenőrizze a NULL. 483 00:28:46,990 --> 00:28:50,270 Meg kell általában ellenőrzi a NULL mert rossz dolgok történnek 484 00:28:50,270 --> 00:28:53,200 amikor a mutató NULL, mert lehet, hogy végül oda, 485 00:28:53,200 --> 00:28:57,630 és akkor soha nem kell majd NULL dereferencing azt a csillag operátor. 486 00:28:57,630 --> 00:29:01,050 Szóval ez jó. És mit csinálunk? Logikusan, van egy hiba itt is. 487 00:29:01,050 --> 00:29:04,450 [Hallgató] Ellenőrizze argc a> = 2-re. 488 00:29:04,450 --> 00:29:10,550 Szóval, ellenőrizze, hogy az argc> = 2. Oké, van három hiba ebben a programban van. 489 00:29:10,550 --> 00:29:16,630 Mostantól ellenőrzi, ha a felhasználó ténylegesen beírt semmit argv [1]. Jó. 490 00:29:16,630 --> 00:29:20,950 Szóval, mi a harmadik bug? Igen. >> [Hallgató] C lehet, hogy nem elég nagy. 491 00:29:20,950 --> 00:29:23,320 Jó. Megnéztük egyik forgatókönyv. 492 00:29:23,320 --> 00:29:29,520 Mi hallgatólagosan ellenőrizni nem másolja több memóriát, mint ami meghaladja a hossza bar. 493 00:29:29,520 --> 00:29:32,510 Tehát, ha a húr a felhasználó beírt a 10 karakter hosszú, 494 00:29:32,510 --> 00:29:36,020 ez csak annyit mondott bemásolod 10 karakter. És ez rendben van. 495 00:29:36,020 --> 00:29:39,940 De mi van, ha a felhasználó beírt a szót a prompt, mint egy 20-karakteres szóval? 496 00:29:39,940 --> 00:29:44,900 Ezt mondja másolat 20 karakter honnan bar abba, hogy mi? 497 00:29:44,900 --> 00:29:49,750 C, más néven a puffer, ami azt jelenti, hogy csak írtam adatok 498 00:29:49,750 --> 00:29:52,540 8-byte helyeken, hogy ne a saját, 499 00:29:52,540 --> 00:29:54,870 és nem a tulajdonosa abban az értelemben, hogy soha nem juttatott nekik. 500 00:29:54,870 --> 00:30:00,370 Szóval ez az, ami általánosan ismert, mint a buffer overflow támadás vagy puffertúlcsordulást támadás. 501 00:30:00,370 --> 00:30:05,580 És ez a támadás, abban az értelemben, hogy ha a felhasználó vagy a program keresi a függvény 502 00:30:05,580 --> 00:30:10,490 teszi ezt rosszindulatúan, hogy valójában mi történik ezután már valóban elég rossz lesz. 503 00:30:10,490 --> 00:30:12,450 >> Szóval vessünk egy pillantást a kép itt. 504 00:30:12,450 --> 00:30:16,060 Ez a kép jelent meg stack memória. 505 00:30:16,060 --> 00:30:19,580 Emlékezzünk arra, hogy minden alkalommal, amikor hívni egy függvényt kap ez a kis keret a stack 506 00:30:19,580 --> 00:30:21,520 , majd egy másik, majd még egy és egy másik. 507 00:30:21,520 --> 00:30:24,300 És eddig, most már csak egyfajta elvonatkoztatott ezeket téglalap 508 00:30:24,300 --> 00:30:26,290 sem a fedélzeten, illetve a képernyőn van. 509 00:30:26,290 --> 00:30:30,580 De ha nagyítani egy olyan téglalap, ha hívja a function ize, 510 00:30:30,580 --> 00:30:35,880 kiderült, hogy van még a verem belsejében, amely keret E négyszögben 511 00:30:35,880 --> 00:30:40,060 , mint x, y és a és b, mint mi beszélünk csere. 512 00:30:40,060 --> 00:30:44,410 Kiderül, hogy van néhány alacsonyabb szintű részletek, köztük Return Address. 513 00:30:44,410 --> 00:30:49,550 Így kiderült, hogy amikor a fő felhívja foo, fő tájékoztatnia foo 514 00:30:49,550 --> 00:30:53,520 milyen fő címe rajta van a számítógép memóriájában 515 00:30:53,520 --> 00:30:57,770 mert különben amint foo történik végrehajtó, mint ebben az esetben itt, 516 00:30:57,770 --> 00:31:00,830 ha eléri ezt a zárt kapcsos zárójel végén foo, 517 00:31:00,830 --> 00:31:05,310 hogy a fene sem tudja, hol foo ellenőrzése a program állítólag menni? 518 00:31:05,310 --> 00:31:08,970 Kiderül, hogy a válasz erre a kérdésre ebben a piros téglalap van. 519 00:31:08,970 --> 00:31:12,670 Ez a mutató, és ez akár a számítógép átmeneti tárolására 520 00:31:12,670 --> 00:31:17,030 A úgynevezett stack címét legfontosabb úgy, hogy amint foo történik végrehajtó, 521 00:31:17,030 --> 00:31:21,120 a számítógép tudja, hol és milyen vonal fő, hogy menjen vissza. 522 00:31:21,120 --> 00:31:23,940 Mentett Frame mutató vonatkozik hasonlóan ezt. 523 00:31:23,940 --> 00:31:26,310 Char * bár itt képviseli azt, amit? 524 00:31:26,310 --> 00:31:31,350 Most ez a kék szegmens itt foo a keretben. Mi az a bar? 525 00:31:31,570 --> 00:31:35,010 Bár csak az az érv, hogy a foo függvény. 526 00:31:35,010 --> 00:31:37,500 Tehát most vagyunk vissza valami az ismerős kép. 527 00:31:37,500 --> 00:31:39,850 Van több dolgot inkább zavaró a képernyőn, 528 00:31:39,850 --> 00:31:43,380 de ez a világoskék részes csak az, amit mi már építve a táblára 529 00:31:43,380 --> 00:31:45,790 valami, mint a csere. Ez a keret a foo. 530 00:31:45,790 --> 00:31:51,490 És az egyetlen dolog, hogy most bár, ami ezt a paramétert. 531 00:31:51,490 --> 00:31:55,220 De mi mást kell lennie a verem szerint ezt a kódot itt? 532 00:31:55,220 --> 00:31:57,760 [Hallgató] char c [12]. >> [Malan] char c [12]. 533 00:31:57,760 --> 00:32:02,810 Azt is meg kell látni 12 négyzetének lefoglalt memória változó nevű c, 534 00:32:02,810 --> 00:32:04,970 és valójában mi van, hogy a képernyőn. 535 00:32:04,970 --> 00:32:08,480 A legtetején van c [0] gombot, majd a szerző ezt a diagram 536 00:32:08,480 --> 00:32:11,850 nem zavarta rajz az összes négyzet, de valóban 12 van 537 00:32:11,850 --> 00:32:16,590 mert ha megnézzük a jobb alsó sarokban, c [11], ha számít 0-tól a 12. ilyen byte. 538 00:32:16,590 --> 00:32:18,400 De itt van a probléma. 539 00:32:18,400 --> 00:32:22,390 Milyen irányba c növekszik? 540 00:32:22,390 --> 00:32:27,080 Valahogy felülről lefelé, ha indul a tetején, és nő az alján. 541 00:32:27,080 --> 00:32:30,110 Nem úgy néz ki, mint hagytuk magunkat sok kifutópálya itt. 542 00:32:30,110 --> 00:32:32,090 Már a fajta festett magunkat egy sarokba, 543 00:32:32,090 --> 00:32:36,940 és c [11] is jobb ellen bárban, amely egészen ellen Elmentve Frame mutató, 544 00:32:36,940 --> 00:32:39,960 amely egészen ellen Return Address. Nincs több hely. 545 00:32:39,960 --> 00:32:42,810 Szóval mi a hatása, akkor ha elcseszed 546 00:32:42,810 --> 00:32:46,500 és megpróbál olvasni 20 byte egy 12-bájtos puffer? 547 00:32:46,500 --> 00:32:50,060 Hol vannak azok a további 8 bájt menni? >> [Hallgató] Inside - 548 00:32:50,060 --> 00:32:53,200 Belül minden más, amelyek közül néhány a szuper fontos. 549 00:32:53,200 --> 00:32:57,260 És a legfontosabb dolog, potenciálisan a piros doboz van, Return Address, 550 00:32:57,260 --> 00:33:03,560 mert tegyük fel, hogy véletlenül vagy adversarially felülírja a 4 byte, 551 00:33:03,560 --> 00:33:07,260 hogy a mutató címet, nem csak a szemetet, hanem számos 552 00:33:07,260 --> 00:33:09,810 , ami történik, hogy képviselje a tényleges címet a memóriában. 553 00:33:09,810 --> 00:33:13,880 Mi a hatása, logikusan? >> [Hallgató] Funkció fog visszatérni egy másik helyre. 554 00:33:13,880 --> 00:33:15,250 Pontosan. 555 00:33:15,250 --> 00:33:19,170 Amikor foo megtérülése és látogatottság, hogy kapcsos zárójel, a program fog eljárni 556 00:33:19,170 --> 00:33:25,060 nem tér vissza a fő, hogy fog visszatérni, amit címe rajta van a piros mezőbe. 557 00:33:25,060 --> 00:33:28,600 >> Abban az esetben, kijátszó szoftver regisztrációs, 558 00:33:28,600 --> 00:33:32,260 mi van, ha a cím, ami visszaadta a funkció, amely rendszerint hívódik 559 00:33:32,260 --> 00:33:35,690 miután kifizette a szoftver és bevisszük a regisztrációs kódot? 560 00:33:35,690 --> 00:33:39,870 Akkor egyfajta trükk a számítógépet nem megy itt, hanem megy itt. 561 00:33:39,870 --> 00:33:45,100 Vagy ha nagyon okos, egy támadó ténylegesen írja be a billentyűzeten, például 562 00:33:45,100 --> 00:33:50,690 nem tényleges szó, nem 20 karakter, de tegyük fel, ő tényleg típusok 563 00:33:50,690 --> 00:33:52,770 néhány karakter képviselő kódot. 564 00:33:52,770 --> 00:33:55,320 És ez nem lesz C kód, ez valóban lesz a karakterek 565 00:33:55,320 --> 00:33:59,290 képviselő bináris gépi kód, 0s és 1s. 566 00:33:59,290 --> 00:34:01,290 De tegyük fel, ők elég okos ahhoz, hogy ezt megtehessük, 567 00:34:01,290 --> 00:34:06,500 valahogy illessze be a getString prompt valami alapvetően lefordított kód, 568 00:34:06,500 --> 00:34:09,980 és az utolsó 4 byte írja felül azt a feladó címét. 569 00:34:09,980 --> 00:34:13,360 És mit jelent, hogy a bemeneti címet csinálni? 570 00:34:13,360 --> 00:34:18,630 Valójában tárolja e piros téglalapban a cím első byte a puffer. 571 00:34:18,630 --> 00:34:23,070 Szóval, van, hogy nagyon okos, és ez a sok tárgyalás és a hiba a rossz ember van, 572 00:34:23,070 --> 00:34:25,639 de ha kitaláljuk, milyen nagy ez a puffer 573 00:34:25,639 --> 00:34:28,820 oly módon, hogy az elmúlt néhány bájt a bemeneti biztosítják, hogy a program 574 00:34:28,820 --> 00:34:33,540 történetesen azonos a cím a kezdetét a puffer, meg tudod csinálni ezt. 575 00:34:33,540 --> 00:34:39,320 Ha azt mondjuk, hogy általában hello and \ 0, ez az, amit végül a puffert. 576 00:34:39,320 --> 00:34:44,420 De ha vagyunk okosabbak, és töltse ki, hogy a puffer, amit fogunk hívni általánosan támadás kód - 577 00:34:44,420 --> 00:34:48,860 AAA, támadás, támadás, támadás - ha ez csak valami, ami nem valami rossz, 578 00:34:48,860 --> 00:34:51,820 mi történik, ha nagyon okos, akkor ezt. 579 00:34:51,820 --> 00:34:58,610 A piros mezőben itt van egy számsor - 80, C0, 35, 08. 580 00:34:58,610 --> 00:35:01,610 Figyeljük meg, hogy megfelel a száma, hogy ez itt. 581 00:35:01,610 --> 00:35:04,430 Ez a fordított sorrendben, de erről bővebben majd máskor. 582 00:35:04,430 --> 00:35:08,140 Vegyük észre, hogy ez a feladó címét szándékosan megváltoztatták 583 00:35:08,140 --> 00:35:12,020 hogy megegyezzen a címet ide, nem a címét fő. 584 00:35:12,020 --> 00:35:17,500 Tehát, ha a rossz fiú szuper okos, ő fog felvenni, hogy a támadó kódot 585 00:35:17,500 --> 00:35:20,930 valami hasonló törölje az összes a felhasználó fájlokat, vagy másolja a jelszavakat 586 00:35:20,930 --> 00:35:24,680 vagy készítsen egy felhasználói fiókot, hogy tudok majd be a - semmit. 587 00:35:24,680 --> 00:35:26,950 >> És ez mind a veszélyt és a hatalom a C. 588 00:35:26,950 --> 00:35:29,840 Mert van hozzáférése memória keresztül mutatók 589 00:35:29,840 --> 00:35:32,520 és ezért levelet, amit akarsz egy számítógép memóriáját, 590 00:35:32,520 --> 00:35:35,080 tudod, hogy a számítógép bármit akarsz 591 00:35:35,080 --> 00:35:39,550 egyszerűen miután azt átugorja a saját memóriát. 592 00:35:39,550 --> 00:35:44,650 És így a mai napig oly sok program és sok weboldalak, amelyek veszélybe 593 00:35:44,650 --> 00:35:46,200 szűkülnek le, hogy az emberek kihasználják ezt. 594 00:35:46,200 --> 00:35:50,760 És ez úgy tűnik, mint egy szuper kifinomult támadás, de ez nem mindig indul el így. 595 00:35:50,760 --> 00:35:53,560 A valóság az, hogy mi rossz emberek általában tennie, 596 00:35:53,560 --> 00:35:58,200 hogy ez a program egy parancssoros vagy GUI program, vagy egy honlap, 597 00:35:58,200 --> 00:35:59,940 Ön csak elkezd nyújtó ostobaság. 598 00:35:59,940 --> 00:36:03,980 Azt írja egy igazán nagy szót a keresési mezőbe, és nyomja meg az Enter, 599 00:36:03,980 --> 00:36:05,780 , és várni, hogy ha a honlap összeomlik 600 00:36:05,780 --> 00:36:09,990 vagy várni, hogy ha a program nyilvánul néhány hibaüzenet 601 00:36:09,990 --> 00:36:14,330 mert ha szerencséd lesz, mint a rossz fiú, és hogy néhány őrült input 602 00:36:14,330 --> 00:36:18,980 , hogy összeomlik a program azt jelenti, hogy a programozó nem számítottak a rossz viselkedést, 603 00:36:18,980 --> 00:36:23,630 ami azt jelenti, hogy valószínűleg elég erőfeszítést, elég tárgyalás és hiba, 604 00:36:23,630 --> 00:36:26,650 kitaláljuk, hogyan lehet a bérek pontosabb támadás. 605 00:36:26,650 --> 00:36:31,410 Tehát annyira része a biztonság nem csak elkerüli ezeket a támadásokat összesen 606 00:36:31,410 --> 00:36:34,100 de felderítésük és ténylegesen nézi most rönköt 607 00:36:34,100 --> 00:36:36,780 és látta, milyen őrült bemenetek az emberek gépelt be a honlapon, 608 00:36:36,780 --> 00:36:38,960 milyen keresési kifejezések embereket beírt webhelyére 609 00:36:38,960 --> 00:36:42,870 abban a reményben, túláradó néhány puffer. 610 00:36:42,870 --> 00:36:45,500 És ez a lényeg, hogy az egyszerű alapjait mi egy tömb 611 00:36:45,500 --> 00:36:49,080 és mit jelent az, hogy kiosztani és használni memóriát. 612 00:36:49,080 --> 00:36:51,710 >> Kapcsolódóan, hogy akkor is ez. 613 00:36:51,710 --> 00:36:54,280 Nézzük csak pillantást belsejében egy merevlemez ismét. 614 00:36:54,280 --> 00:36:58,440 Emlékszel egy vagy két hete, hogy ha húzza a fájlokat a Lomtár vagy szemetes, 615 00:36:58,440 --> 00:37:03,710 mi történik? >> [Hallgató] Semmi. >> Egyáltalán semmi, ugye? 616 00:37:03,710 --> 00:37:05,740 Végül, ha fut kevés lemezterület, 617 00:37:05,740 --> 00:37:08,190 Windows vagy Mac OS indul A fájlok törlése az Ön számára. 618 00:37:08,190 --> 00:37:10,390 De ha húzza valami ott, hogy egyáltalán nem biztonságos. 619 00:37:10,390 --> 00:37:13,800 Minden szobatársam vagy barát vagy családtag köze van dupla kattintás, és íme, 620 00:37:13,800 --> 00:37:16,310 ott van az összes vázlatos fájlokat próbált meg törölni. 621 00:37:16,310 --> 00:37:19,590 A legtöbben, legalább tudjuk, hogy van, hogy jobb gombbal vagy a Control kattintás 622 00:37:19,590 --> 00:37:22,310 és ürítse ki a szemetet, vagy valami ilyesmi. 623 00:37:22,310 --> 00:37:25,000 De még így is, hogy nem egészen ezt a trükköt 624 00:37:25,000 --> 00:37:28,010 mert mi történik, ha egy fájlt a merevlemezre 625 00:37:28,010 --> 00:37:32,770 amely képviseli néhány Word dokumentumot vagy egy JPEG, és ez azt jelenti, a merevlemez, 626 00:37:32,770 --> 00:37:35,350 és mondjuk ezt a forgács itt kijelenti, hogy fájl, 627 00:37:35,350 --> 00:37:38,390 és ez áll egy csomó 0s és 1s. 628 00:37:38,390 --> 00:37:42,470 Mi történik, ha nem csak húzza a fájlt a kukába lehet vagy újrahasznosítás bin 629 00:37:42,470 --> 00:37:48,020 hanem üres ez? Valahogy semmi. 630 00:37:48,020 --> 00:37:49,640 Ez nem semmi most. 631 00:37:49,640 --> 00:37:54,290 Most már csak azért, mert nem egy kis valami történik a formában ez a táblázat. 632 00:37:54,290 --> 00:37:58,370 Szóval van valami adatbázis vagy a tábla belsejében egy számítógép memóriáját 633 00:37:58,370 --> 00:38:03,850 hogy lényegében egy oszlop a fájlok nevét és egy oszlop a fájlok "location, 634 00:38:03,850 --> 00:38:07,720 ahol ez lehet location 123, csak egy véletlen számot. 635 00:38:07,720 --> 00:38:14,560 Tehát lehet, hogy valami ilyesmi x.jpeg and location 123. 636 00:38:14,560 --> 00:38:18,800 Mi történik akkor, ha valóban kiüríteni a szemetet? 637 00:38:18,800 --> 00:38:20,330 Ez elmúlik. 638 00:38:20,330 --> 00:38:23,610 De mi nem megy el a 0s és 1s. 639 00:38:23,610 --> 00:38:26,270 >> Szóval, mi a kapcsolat a pset4? 640 00:38:26,270 --> 00:38:31,240 Nos, pset4, csak azért, mert most már véletlenül törlik a Compact Flash kártya 641 00:38:31,240 --> 00:38:35,750 hogy már az összes ezeket a képeket, vagy csak azért, mert a rossz szerencse sérült lett 642 00:38:35,750 --> 00:38:38,000 , nem jelenti azt, hogy a 0-ák és 1-esek nincsenek még mindig ott. 643 00:38:38,000 --> 00:38:40,410 Lehet, hogy néhány közülük elveszett, mert valami van elrontott 644 00:38:40,410 --> 00:38:43,320 abban az értelemben, hogy egyes 0s lettek 1s és 1s váltak 0s. 645 00:38:43,320 --> 00:38:47,240 Rossz dolgok történnek, mert a hibás szoftver vagy hibás hardver. 646 00:38:47,240 --> 00:38:50,370 De sok ilyen bit, talán akár 100%-a még mindig ott van. 647 00:38:50,370 --> 00:38:55,050 Csak, hogy a számítógép vagy a kamera nem tudja, hol JPEG1 kezdődött 648 00:38:55,050 --> 00:38:56,910 és ahol JPEG2 elindult. 649 00:38:56,910 --> 00:39:01,070 De ha a programozó, tudod egy kis hozzáértés, amennyiben e JPEG vannak 650 00:39:01,070 --> 00:39:06,010 vagy mit néz, így elemzi a 0s és 1s és mondjuk JPEG, JPEG, 651 00:39:06,010 --> 00:39:09,440 akkor írj egy programot lényegében csak egy for vagy a while ciklus 652 00:39:09,440 --> 00:39:12,820 amely helyreállítja minden egyes ilyen fájlokat. 653 00:39:12,820 --> 00:39:16,030 Tehát a tanulság tehát az, hogy indítsa el biztonságosan a fájlok törlése 654 00:39:16,030 --> 00:39:18,340 ha szeretné, hogy elkerülje ezt teljesen. Igen. 655 00:39:18,340 --> 00:39:21,010 >> [Hallgató] Hogy azt mondja a számítógépen 656 00:39:21,010 --> 00:39:23,550 hogy van több memóriát, mint azelőtt? 657 00:39:23,550 --> 00:39:27,820 Már több memóriát, mint azelőtt - >> [hallgató] További rendelkezésre álló memóriát. 658 00:39:27,820 --> 00:39:29,630 Oh. Jó kérdés. 659 00:39:29,630 --> 00:39:32,360 Akkor miért kiürítése után a szemetet nem a számítógép megmondja 660 00:39:32,360 --> 00:39:34,910 hogy több szabad hely, mint azelőtt? 661 00:39:34,910 --> 00:39:36,770 Dióhéjban, mert hazudik. 662 00:39:36,770 --> 00:39:40,740 További technikailag, akkor nem kell több hely, mert most már azt mondta, 663 00:39:40,740 --> 00:39:43,680 tudod, hogy más dolgokat, ahol azt a fájlt egyszer volt. 664 00:39:43,680 --> 00:39:45,450 De ez nem azt jelenti, a biteket elmegy, 665 00:39:45,450 --> 00:39:48,590 és ez nem jelenti a biteket jelenleg változik minden 0s, például, 666 00:39:48,590 --> 00:39:50,150 az Ön védelme érdekében. 667 00:39:50,150 --> 00:39:54,640 Így viszont, ha biztonságosan törli fájlokat vagy fizikailag semmisítse meg a készüléket, 668 00:39:54,640 --> 00:39:57,300 hogy valóban ez az egyetlen módja néha körül, hogy. 669 00:39:57,300 --> 00:40:02,020 >> Akkor miért nem indulunk ezen a félig ijesztő jegyzetet, és mi találkozunk hétfőn. 670 00:40:02,020 --> 00:40:07,000 [Taps] 671 00:40:07,780 --> 00:40:10,000 >> [CS50.TV]