[Powered by Google Translate] [HÉT 5] [David J. Malan, Harvard University] [Ez a CS50.] [CS50.TV] [Nő] Hazudik, hogy mit, azt nem tudom. [Man] Szóval, mit tudunk? [Nő] Ez 9:15-kor, Ray Santoya volt az ATM. [Man] Tehát a kérdés az, hogy mit csinál a 9:16? [Nő] Lövés a 9 mm-es valamit. Talán látta a mesterlövész. [Man] Vagy dolgozott vele. [Nő] Várj. Menj vissza egy. [Man] Mit látsz? [♫ ♫ izgalmas music] [Nő] Hozd arcát felfelé. Teljes képernyő. [Man] a szemüvegét. >> Van egy reflexió. [♫ ♫ izgalmas music] [Man] Ez a Nuevita baseball csapata. Ez a logo. [Nő] És ő beszél aki visel, hogy a kabát. [David Malan] Szóval ez CS50 héten 5, és ma már tönkre egy kicsit a televíziós és film az Ön számára. Szóval amikor nézed a show, mint ez itt, és a rendőrök azt mondják: "Tud tiszta, hogy akár?" vagy "Enhance" nincs fokozza a valós világban. Valójában, amit igazán kap egy kicsit valami ilyesmi. Már húzta fel az egyik személyzeti képek az oldalt. Ez a program neve Photoshop. Ez 1 of 2 Bowdens, 1 3 Bowdens valójában, ma, mert már Mrs. Bowden itt is, Rob és Paul. De itt van Rob a képernyőn, és ha nagyítani kell e villanás ő mindig a szeme, amit valóban látni, hogy amit látsz, amit kapsz. Ez a "továbbfejlesztett", így "CSI" van egy kicsit rossz. Van még egy klip, ha tudjuk felvenni a "CSI" csak egy kicsit hosszabb. Ez egy szép mondatot kimondani ezentúl, ha azt szeretné, hogy alapos műszaki barátaival, amikor tényleg mondasz semmit. [Férfi] A héten én már vizsgálja a taxis gyilkos gyilkosságok egy bizonyos morbid lenyűgöző. [Woman # 1] Ez a valós időben. [Woman # 2] fogok létrehozni egy grafikus felület segítségével Visual Basic, hátha tudok követni az IP-címet. [Malan] Szóval audio out of sync területpihentetés, ami egy grafikus felület segítségével Visual Basic követni az IP-cím teljes képtelenség. Ezek a napok, hogy nem használja a Visual Basic, nincs szükség a GUI-t, és az IP-cím egy technikailag pontos kifejezés. Így tartsa a szemét ki ezeket, és az egyik kedvencem: Ez az ember egy kicsit misztikus, mert tudnia kell, egy másik nyelvet. Van egy nyelv úgynevezett Objective-C, amely felülbírálja a C. Ami azt jelenti, hogy a C, valamint néhány további funkciók, köztük az objektum-orientált programozás. És ez az a nyelv, amely az Apple népszerű for iOS programozással. És itt egy klip egy másik mindet teljesen, a "számok" hogy ha valóban jobban megnézed a TiVo és a szünet a megfelelő pillanatban, látni fogod, hogy mit néz, nem elég, amit éppen le. És hadd próbálkozzon egy másik audio csatlakozó ide, hátha nem tudunk hogy a hang szinkronban ebben az időben. Adok "Számok". [Man # 1] Ez egy 32-bites IPv4 címet. [Man # 2] IP, ez az interneten. >> Private hálózat. Ez Anita privát hálózat. [Malan] Oké. Ez az Objective-C, és ez néhány gyerek színezés program, amennyit csak lehet talán következtetni a nevét a változó van. Szóval, hogy akkor volt a "számok". Szóval ma, és ezen a héten bemutatjuk egy kicsit a világ kriminalisztika és a környezet, a problémák tehát. Ma lesz egy rövidített előadás, mert van egy különleges esemény itt! utána, így lesz egy pillantást, és kötekedik a diákok és a szülők egyaránt ma néhány, a dolgok, amelyek a horizonton. Közülük, mint hétfőn, akkor néhány osztálytársaival. EDX, a Harvard és a MITS új online kezdeményezés a nyílt oktatóprogram és több, indít a Harvard egyetemen hétfőn. Ami azt jelenti, gyere hétfő lesz - ahogy az utolsó szám, 86.000 további osztálytársai fogják követően együtt CS50 előadásaiból és a szakaszok és walkthroughs és a probléma készletek. És ennek részeként, akkor tagja lesz az alakuló osztály CS50 és most CS50x. Ennek részeként, most észre, hogy lesz néhány upsides is. Ahhoz, hogy készen áll erre, a nagy hallgatói létszám, elegendő annyit mondani, hogy bár van 108 TF és CA, nem egészen a legjobb diák / tanár arány, ha elérünk 80.000 más versenyző. Szóval nem lesz osztályozó annyi probléma készletek kézzel. Szóval be ezen a héten a probléma halmaz lesz CS50 Check, ami lesz parancssori segédprogram belül a készüléket hogy kapsz ha egyszer frissíti később ezen a hétvégén, és akkor lesz képes futtatni egy parancsot, ellenőrizze 50, saját Pset, és kapsz némi visszajelzést arról, hogy a program helyes vagy helytelen szerint a különböző tervezési előírások általunk biztosított. Szóval inkább ezt, és a probléma meg specifikáció és A CS50x osztálytársai fogja használni ezt is. Szóval probléma halmaz 4 szól kriminalisztika. És ez a darab ihlette néhány valós dolog, amely koromban egyetemre, én internálták egy ideig A Middlesex megyei kerületi ügyész hivatala csinál törvényszéki munkát azok vezető törvényszéki nyomozó, és mi ez az összeg van, azt hiszem, már említettem, néhány hét múlt, a Mass állam rendőri vagy más jönne, akkor lehull dolgok, mint a merevlemezek, valamint CD-és floppy lemezek és a hasonlók, és majd a cél a törvényszéki hivatal volt, hogy megállapítsa, hogy a nem volt, vagy nem volt bizonyíték valami. Ez volt a különleges vizsgálatok Unit, így volt a fehérgalléros bűnözés, ez több volt aggasztó fajta bűncselekmények, bármi érintő valamilyen digitális média, kiderül, hogy nem, hogy sok ember írjon egy e-mailt mondván: "Én tettem". Szóval elég gyakran ezek kriminalisztika keresések nem kapcsolja fel az összes, hogy sok gyümölcs, de néha az emberek levelet az ilyen e-maileket. Szóval néha erőfeszítéseket jutalmazták. De ahhoz, hogy vezet fel e törvényszéki Pset, mi lesz bevezetésével Pset 4 egy kicsit grafika. Szóval talán ezeket a dolgokat kiadni, JPEG, GIF és hasonló ezekben a napokban, de ha igazán belegondolunk, egy képet, ugyanúgy, mint Rob arca, lehet modellezni sorozatát pontok, vagy a pixel. Nos, abban az esetben, Rob arca, van mindenféle színben, és elkezdtük, hogy az egyes pontok, otherwide nevei pixel, egyszer elkezdtük a nagyításhoz be De ha egyszerűsítik a világot egy kicsit, és csak azt mondják, hogy ez itt Rob fekete-fehér, valamint, hogy képviselje fekete és fehér tudjuk csak használni bináris. És ha fogunk használni bináris, 1 vagy 0, tudjuk, hogy ezt az ugyanazt a képet Rob mosolygó arcát ez a minta a bitek: 11000011 jelentése fehér, fehér, fekete, fekete, fekete, fekete, fehér, fehér. És ez nem egy hatalmas ugrás, akkor kezdeni beszélni színes fényképek. Azok a dolgok, akkor látni a Facebook-on, vagy tegyen egy digitális fényképezőgép, de, természetesen, amikor a színeket, meg kell több bitet. És elég gyakori a világ fényképek használata nem 1-bites szín, mivel ez azt sugallja, de 24-bit szín, ahol tényleg kap millió szín. Szóval, abban az esetben, amikor nagyított részt Rob szemében, volt bármennyi millió különböző színes lehetőségeket. Így fogunk bevezetni ezt a problémát meg 4, valamint a walkthrough, melyik lesz ma 3:30 helyett a szokásos 2:30 mert a pénteki előadás itt. De a video lesz online, mint mindig, holnap. Majd azt is bemutatni, hogy egy másik fájlformátumban. Szóval ez szándékosan célja, hogy nézd félelmetes az első, de ez csak néhány dokumentumot a C struct. Kiderül, hogy a Microsoft, évekkel ezelőtt, segített népszerűsíteni ezt a formátumot, az úgynevezett bitmap fájlformátumot, BMP, és ez volt a szuper-egyszerű, színes, grafikai formátumban is használt jó ideje és néha még a háttérképeket az asztali gépek. Ha úgy gondolja, vissza a Windows XP és a dombok és a kék ég, ez jellemzően egy BMP vagy bitmap kép, és bitmap szórakoztató számunkra, mert egy kicsit bonyolult. Ez nem annyira egyszerű, mint ez a rács a 0 és 1-es; helyett, akkor a dolgok, mint a fejléc elején egy fájlt. Más szóval, belül. Bmp fájl egy csomó a 0 és 1-es, de van néhány további 0 és 1-es ott. És kiderül, hogy mi az, amit valószínűleg magától értetődőnek évek, fájlformátumokat, mint a. doc vagy. xls vagy. mp3 vagy. mp4, függetlenül a fájlformátumokat Ön ismeri. Nos, mit is jelent, hogy egy fájl formátum? Mert a végén a nap, mind a fájlok általunk használt imént 0 és 1-es és talán a 0 és 1-es jelentenek, b, c, keresztül ASCII vagy a hasonló, hanem az a nap végén, ez csak 0 és 1-es. Szóval az emberek csak alkalmanként úgy, hogy kitaláljon egy új fájlformátumot amennyiben azok szabványosítása milyen mintákat bitet jelent valójában. És ebben az esetben is az emberek, akik célja a bitmap formátum azt mondta, hogy az első byte egy bitmap fájlt, például jelölése offset 0, ott, ott lesz valami rejtélyes nevű nevű változó bfType, ami csak áll a bitmap fájl típusát, milyen típusú bitképfájl ez. Lehet következtetni, talán a második sort offset 2, byte szám 2, egy minta a 0 és 1-es azt jelenti, mi? A méret a valamit, és ez megy onnan. Tehát a probléma készlet 4, akkor meg kell végigsétált néhány ezeket a dolgokat. Nem fogunk a végén törődve mindet, de észre, hogy kezd érdekes körül vonal vagy byte 54, rgbtBlue, zöld és piros. Ha valaha is hallotta a betűszó RGB, piros, zöld, kék, ez a hivatkozás, hogy a. Mert kiderült, hogy tudja festeni a színek a szivárvány néhány kombinációja piros, kék és zöld. És valóban, a szülők a szobában lehet felidézni néhány, a legkorábbi projektorok. Ezek a napok, csak lásd 1 erős fény jön ki a lencse. De térjünk vissza a nap, akkor volt a vörös lencse, a kék lencse, és a zöld lencse és együtt, amelynek célja a képernyőn, és kialakított egy színes képet. És gyakran közép iskolák és főiskolák volna e lencsék mindig úgy kissé ferdén, így volt, egyfajta látás dupla vagy tripla képek de ez volt az ötlet. Nem volt piros, zöld és kék fény festő egy képet. És ez elvet használt számítógépek. Tehát között a kihívásokat, akkor az Ön számára a probléma szett 4 lesznek egy pár dolgot, az egyik az, hogy valóban átméretezi a képet. Ahhoz, hogy a minta a 0 és 1-es, kitaláljuk, melyik darabokat a 0 és 1-es képviseli, amit a szerkezet, mint ez, majd kitaláljuk, hogyan lehet lemásolni a pixelek: a vörös, a kék, a zöld benne, hogy amikor a kép úgy néz ki, mint ez kezdetben ilyesmi inkább után. Az egyéb kihívások is lesz, hogy akkor át kell adni törvényszéki kép tényleges fájl egy digitális fényképezőgép és az, hogy a kamera, egyszer régen, volt egy csomó fotók. A probléma az, hogy véletlenül törölte, vagy volt a kép sérült valahogy. Rossz dolgok történnek, a digitális fényképezőgépek, és így gyorsan másolt összes 0 és 1-es le, hogy a kártya az Ön számára, mentette meg őket mind 1 big fájlt, aztán adja át őket, hogy Ön a probléma szett 4 így írni egy programot C-ben, amellyel vissza Mindezen JPEG, ideális esetben. És kiderül, hogy a JPEG, annak ellenére, hogy kissé összetett fájl formátum, ők sokkal összetettebb, mint a mosolygó arc itt. Kiderült, hogy minden JPEG kezdődik az azonos minták a 0 és 1-es. Tehát egy while vagy for ciklus vagy hasonló, akkor ismételget egész a 0 és 1-es e törvényszéki kép és minden alkalommal, amikor látni a különleges minta, ami meghatározott probléma set specifikációja, akkor feltételezhető, hogy "Ó, itt van, nagyon nagy a valószínűsége, a kezdete a JPEG ", és amint megtalálják ugyanazt a mintát, egyes bájtok száma vagy kilobyte vagy megabájt később, akkor feltételezhető, "Ó! Itt van egy második JPEG, a kép vettem az első után. Engedjék meg, hagyd abba az olvasást, hogy az első fájlra, kezdjük el írni ezt újat. " És a kimenet a program Pset 4 lesz több mint 50 JPEG. És ha ez nem 50 JPEG, van egy kis hurok. Ha van egy végtelen számú JPEG, van egy végtelen ciklusba. Szóval, hogy is lesz elég gyakori eset. Ez az, ami a horizonton. Kvíz 0, mögöttünk. Ismerd fel, egy e-mail címemet, hogy mindig ott van srácok akik mindketten boldogok, egyfajta semleges, és szomorú körülbelül kvíz 0 idő. És kérem, nem érhetünk el nekem, a fej TFs, Zamyla, saját TF vagy az egyik CA, hogy tudod, ha szeretné, hogy megvitassák, hogyan mentek a dolgok. Tehát, hogy lenyűgözni a szülők itt a szobában, mi a CS50 könyvtár? Szép munka. Mi a CS50 könyvtár? Igen? [Student válaszok, érthetetlen] >> Oké, jó. Tehát ez egy előre megírt sor kódot, hogy mi, a személyzet, írta, nyújtunk az Ön számára, hogy néhány közös funkciók. Ilyesmi nekem egy string; érts int, az összes funkciót, amelyek az itt felsorolt. Kezdő most kezdjük igazán figyelembe e képzési kerekekkel. Így fogunk kezdeni, hogy vegye el a "string" tőled, amely visszahívás, csak egy szinonimája, amit a tényleges adatok típus? char *. Így a szülők, ez volt talán - ez jó, így char * kezdünk látni a képernyőn, annál is inkább, ahogy eltávolítani "string" a mi szókincs, legalábbis amikor ténylegesen kódot írni. Hasonlóképpen, akkor hagyja abba a néhány ezeket a funkciókat, mint sok, mert a programokat fog kapni kifinomultabb ahelyett, hogy csak levelet programok, üljön ott a prompt villog, várakozás, hogy a felhasználó, hogy írja be valami Megkapod a bemenetek máshol. Például, kapsz őket egy sor bit a helyi merevlemezre. Majd ahelyett, hogy azokat a jövőben a hálózati kapcsolatot, néhány honlap valahol. Szóval héjúak vissza, ez a réteg az első alkalommal, és húzza ki a készüléket CS50 és ez a nevű fájlt CS50.h, melyeket a már éles, beleértve hetekig. De nézzük valóban látni mi van benne jelen. Így a tetején a fájl a kék csak egy csomó észrevételek jótállási információk és engedélyezés. Ez egyfajta közös paradigma a szoftver, mert sok szoftver ezekben a napokban az úgynevezett "nyílt forráskódú" ami azt jelenti, hogy valaki írt a kódot és tette szabadon hozzáférhető, nem csak futni és használni, de valójában olvasni és módosítja, és integrálható a saját munkáját. Szóval ez az, amit használ, a nyílt forráskódú szoftverek, bár nagyon kis formában. Ha lapozzunk lefelé múltban a megjegyzéseket, bár, akkor elkezd látni néhány ismerős dolgot. Így észre a tetején van, hogy a CS50.h fájl tartalmazza egy csomó header fájlokat. Nos, a legtöbb ilyen még nem látott, de az egyik ismerős, melyik láttunk, de röviden, eddig? Ja, standard könyvtárak. Stdlib.h van malloc, így ha elkezdtünk beszélni dinamikus memória kiosztás, amely akkor jön vissza a jövő héten is, elkezdtük beleértve a fájlt. Kiderül, hogy bool és igaz és a hamis valójában nem léteznek C, önmagában, kivéve, ha ezt a fájlt. Szóval már, hetekig, nem beleértve a standard bool.h úgy, hogy tudod használni a fogalmát a bool, igaz vagy hamis. E nélkül meg kellett volna rendezni a hamis, és használni int és csak önkényesen feltételezik, hogy a 0 és 1 hamis igaz. Most, ha görgessen tovább, itt a mi meghatározása a string. Kiderült, ahogy azt már korábban mondtam, hogy ha ez a * nem igazán számít. Akkor is van hely körül. Mi, ebben a félévben, mindig is támogatták azt, hogy ez egyértelművé teszi, hogy a * köze a típusnak. De észre, csak a közös, ha nem egy kicsit több közös, az, hogy ott de funkcionálisan ez ugyanaz a dolog. De most, ha azt olvassuk le a további, vessünk egy pillantást mondjuk, getInt, mert használják, hogy talán, mielőtt bármi más ebben a félévben. És itt van getInt. Ez az, amit? Ez a prototípus. Oly gyakran, mi tesz prototípusok a tetejét a. C kép, de akkor is fel prototípusok header fájlokat. h fájlokat, mint ez itt, hogy amikor írsz, bizonyos funkciók azt szeretnénk, hogy más emberek hogy képes legyen használni, ami pontosan a helyzet a CS50 könyvtár, nem csak végre a feladatokat valami hasonló CS50.c, Ön is tegye a prototípusok nem a tetején, hogy a fájl, de a tetején egy header fájl, akkor a header fájlt, amit barátok és a kollégák között, éles közé a saját kódját. Szóval ez alkalommal már, beleértve az összes ilyen prototípusok hatékonyan a tetején a fájl, de ahogy ezen éles közé mechanizmus hogy lényegében másolatok és paszták ezt a fájlt a saját. Nos, itt van néhány meglehetősen részletes dokumentáció. Már nagyjából magától értetődőnek tekinti, hogy getInt kap egy int, de kiderült, hogy van néhány sarok esetekben, ugye? Mi van, ha a felhasználó beír egy számot, hogy ez túl nagy? Egy trillió, hogy egyszerűen nem fér el egy int? Mi a várt viselkedést? Nos, ideális esetben, ez kiszámítható. Tehát ebben az esetben, ha valóban olvassa el az apró betűs részt, látni fogod, hogy amennyiben az adott vonalon nem lehet olvasni, ez visszatér INT_MAX. Még soha nem beszéltünk erről, de alapuló tőkésítés, mi ez, talán? Ez egy állandó, így néhány speciális konstans, ami valószínűleg a bejelentett az egyik ilyen fejlécfájlokat ami feljebb a fájlba, és INT_MAX valószínűleg valami hasonló, kb, 2 milliárdot. Az ötlet az, hogy azért, mert meg kell valahogy jelzi, hogy valami baj, mi, igen, van 4000000000 számban állnak rendelkezésünkre, negatív 2 milliárd legfeljebb 2 milliárd ide vagy oda. Nos, mi a közös programozás te vagy lopni csak az egyik számot. Lehet, hogy 0, talán 2 milliárd talán negatív 2 milliárdot. Szóval eltölteni egy a lehetséges értékek, így kötelezzék el magukat a világnak hogy ha valami elromlik, vissza fogok térni a szuper-nagy érték. De nem akarjuk, hogy a felhasználó gépelési valami rejtélyes, mint a "2, 3, 4 ..." Az igazán nagy szám, ahol általánossá, hanem, mint egy állandó. Szóval tényleg, ha arra, hogy az anális az elmúlt hetekben, bármikor hívod getInt, akkor kellett volna, ha ellenőrzi egy feltételt. Vajon a felhasználó típusát INT_MAX, vagy pontosabban, tette getInt visszatérés INT_MAX? Mert ha igen, hogy valójában azt jelenti, hogy nem írja, valami baj ebben az esetben. Szóval ez az, ami általánosan ismert, mint egy "őrszem" érték, ami csak azt jelenti, különleges. Nos, most már fordulni a. C fájlokat. A C fájl létezett a készülék egy ideig, , sőt, a készülék megvan előre lefordított Önnek figyelembe, hogy a dolog, amit az úgynevezett "tárgykód" de ez csak nem számít, hogy hol van, mert a rendszer tudja, ebben az esetben, ha igen, akkor a készülék. De nézzük görgessen le most getInt, és látom, hogy getInt dolgozott egész idő alatt. Tehát itt is hasonló megjegyzéseket előtt. Hadd nagyításához csak a kód része, és mi van a getInt a következő. Ez nem veszi be, és ez ad vissza int, while (true), így van egy szándékos végtelen ciklus de feltehetően fogjuk kitörni e valahogy, vagy visszatérnek ebben. Nézzük, hogyan is működik ez. Nos, úgy tűnik, hogy a getString ebben az első sorban a cikluson belül, 166. Ez most jó gyakorlat, mert milyen körülmények között lehetne getString vissza ezt speciális kulcsszó, NULL? Ha valami balul sül el. Mi lehet baj, ha hívja ilyesmit getString? Igen? [Student válasz, érthetetlen] >> Igen. Szóval talán malloc sikertelen. Valahol a motorháztető alatt getString hívja malloc, amely rendelkezésre bocsátja memória, amely lehetővé teszi a számítógép tárolja az összes karakter, hogy a felhasználó beír a billentyűzetet. És tegyük fel, a felhasználó már egy csomó szabad idő és gépelt még, például, mint 2 milliárd karakter. Több karakter, mint a számítógép is van RAM. Nos, getString képesnek kell lennie, hogy jelzi, hogy az Ön számára, még akkor is, ha ez egy szuper, szuper gyakori sarok ügyben. Meg valahogy, hogy képes legyen kezelni ezt, és így getString, ha megyünk vissza, és olvassuk el a dokumentációját, nem, sőt, vissza NULL. Most, ha nem sikerül getString visszaküldésével NULL, getInt fog sikertelen visszaküldésével INT_MAX, csak mint egy őrszem. Ezek csak emberi egyezményeket. Az egyetlen módja, akkor tudjuk, hogy ez a helyzet ha elolvassuk a dokumentációt. Szóval lapozzunk lefelé, ahol az int ténylegesen GotInt. Szóval, ha lapozzunk lefelé egy kicsit tovább, összhangban van 170 hozzászólás fölött ezeket a sorokat. Tehát állapítsa meg, hogy 172, int n, és egy char c, és akkor ez az új funkció amelyek közül néhány Önök közül botlott korábban, de sscanf. Ez áll a string szkennelési f. Más szóval, adj egy húr, és én is kutatnak az információt érdekes. Szóval mit jelent ez? Nos, tegyük fel, hogy azt írja be, szó szerint, 1 2 3, a billentyűzet, , majd nyomja meg az Entert. Mi az adattípusa 1 2 3 mikor által visszaadott getString? Ez nyilvánvalóan egy string, ugye? Van egy string, ezért 1 2 3 valóban "1 2 3" -val a \ 0-nél a végét. Ez nem egy int. Ez nem egy szám. Úgy néz ki, mint egy szám, de ez valójában nem. Szóval mit getInt kell tennem? Azt olvasni, hogy a karakterlánc balról jobbra, 1 2 3 \ 0, és valahogy átalakítani, hogy a tényleges értéke. Most lehet kitalálni, hogyan kell ezt csinálni. Ha úgy gondolja, vissza a Pset 2, akkor valószínűleg egy kicsit kényelmes A Caesar vagy Vigenère így navigálhat egy string, tudja konvertálni karakterről ints a csákány. Ez egy csomó munka. Miért nem hív egy függvényt, mint sscanf azt nem, hogy az Ön számára? Szóval sscanf elvárja érv, ebben az esetben az úgynevezett vonal, ami egy string. Ezután megadhatja, az idézetek, nagyon hasonló a printf, mit vársz látni ezt a fonalat? Azt mondom, itt van, várom, hogy egy decimális szám, és talán egy karaktert. És majd meglátjuk, hogy miért ez a helyzet, csak egy pillanatra. Kiderült, hogy ez a jelölés most emlékeztető stuff elkezdtünk beszélni alig több mint egy héttel ezelőtt. Mi az & n és & c tesz minket? [Student válaszok, érthetetlen] >> Igen. Ez ad nekem a címét, n és címe c. De miért olyan fontos ez? Hát, tudod, hogy a funkciók C akkor mindig vissza értéket, vagy értékkel egyáltalán nem rendelkeznek. Akkor vissza int, egy string, egy úszó, egy char, mindegy. Vagy akkor vissza semmis, de csak vissza 1 dolog maximálisan. De itt akarunk sscanf vissza hozzám talán egy int, egy decimális szám, és egy char, és leírom, miért char egy pillanat. Szóval hatékonyan szeretné f visszatérni 2 dolog, hogy ez egyszerűen nem lehetséges, C. Így megkerüli ezt átadásával a 2 címet, mert amint átadja a funkció 2 címeket, mit tud ez a funkció csinálni velük? Meg lehet írni ezeket a címeket. Használhatja a * művelet és "ott", hogy minden egyes ilyen címeket. Ez a fajta a backdoor mechanizmus, de nagyon gyakori a változó a változók értékei több, mint csak 1 hely, a jelen esetben 2. Most észre én ellenőrzésekor == to1, majd vissza n ha ez valójában, értékeli az igaz. Szóval, mi folyik itt? Nos, gyakorlatilag minden, amit igazán akar történni getInt ez. Azt akarjuk, hogy elemezze, hogy úgy mondjam, azt akarjuk, hogy olvassa el a húr "1 2 3", és ha úgy néz ki, van egy szám van, mi mondod sscanf tennie fel azt a számot, 1 2 3, hogy ezt a változót n nekem. Akkor miért tettem ezt is? Mi a szerepe az is, mondván, sscanf, akkor is kap egy karaktert ide. [Diák beszélő, érthetetlen] >> Nem - a tizedespont működhet. Nézzük meg, hogy egy pillanatra elgondolkozott. Mi van még? [Diák, érthetetlen] >> Szóval, jó gondolat, lehet, hogy a NULL karaktert. Ez valójában nem, a jelen esetben. Igen? [Diák, érthetetlen] >> ASCII. Vagy hadd általánosítani még tovább. A% c van csak a hiba-ellenőrzés. Nem akarom, hogy karakter szám után, de mi ez lehetővé teszi számomra, hogy a következő: Kiderült, hogy sscanf mellett értéket tárolhatunk n-ben és c, ebben a példában itt, mit is jelent ez visszaadja a változók száma terjesztett értékek be Tehát, ha csak írja be 1 2 3, akkor csak a% d lesz, hogy megfeleljen és csak n lesz tárolt értékű, mint 1 2 3, és semmi sem lesz hozott c; c marad szemét érték, hogy úgy mondjam. Garbage mert ez soha nem inicializált mint néhány értéket. Tehát ebben az esetben sscanf értéke 1, mert lakott egy olyan mutató, ebben az esetben, nagy. Van egy int, úgyhogy szabad a vonal szabadítson fel a memória hogy getString ténylegesen kiosztott, és aztán vissza n. Különben, ha már azon, ha ez újra kijelentés származik, jön itt. Ha ezzel szemben azt írja 1 2 3 foo, csak néhány véletlenszerű sorrendben szövegének, sscanf fog látni, ó, szám, ó, szám, ó, szám, ó - f. És ez megy, hogy az 1 2 3 n. Ez megy, hogy az f-ben c, majd vissza 2. Tehát, csak a meghatározást scanf viselkedését, egy nagyon egyszerű módon - nos, az összetett első pillantásra, de a végén a nap, meglehetősen egyszerű mechanizmusa mondván, van egy int, és ha igen, az, hogy az egyetlen dolog, amit találtam? És a white space itt szándékos. Ha elolvasod a dokumentációt sscanf, azt mondja, hogy ha tartalmaz egy darab fehér tér elején vagy a végén, sscanf is lehetővé teszi, hogy a felhasználó bármilyen okból, a hit szóközt 1 2 3, és hogy lesz legitim. Nem fog kiabálni a felhasználó csak azért, mert megüt a szóközt elején vagy a végén, ami csak egy kicsit felhasználóbarát. Bármilyen kérdése van, akkor a GetInts? Igen? [Student kérdés, érthetetlen] >> Jó kérdés. Mi van, ha csak beírt egy karakter, mint a f, és nyomd meg az Entert anélkül, hogy valaha gépelés 1 2 3, mit gondolsz viselkedését ezt a kódsort akkor lenne? Így sscanf fedezhetik azt is, mert ebben az esetben, ez nem fog kitölteni n vagy c; ez fog helyette vissza 0-ra. Ebben az esetben én is kifogása, hogy a forgatókönyv, mert a várható érték akarom 1 lehet. Én csak azt akarom 1, csak 1 dolog, amit ki kell tölteni. Jó kérdés. Mások? Rendben, ne menjünk végig a funkciók itt, de az egyik, hogy úgy tűnik, hogy talán a fennmaradó kamat A getString mert kiderül, hogy getFloat, getInt, GetDouble, GetLongLong minden ladik is sok a funkcionalitást getString. Szóval vessünk egy pillantást, hogyan valósul meg itt. Ez úgy néz ki, egy kicsit bonyolult, de ugyanazt a fundamentumok hogy elkezdtünk beszélni a múlt héten. Tehát getString, amely nem veszi érvet, mint egy a semmis itt, és visszatér a húr, így vagyok nyilvánításáról egy string nevű puffer. Én nem igazán tudom, hogy mi fog használni még, de majd meglátjuk. Úgy néz ki, mint a kapacitás, alapértelmezés szerint 0, nem egészen biztos benne, ha ez megy. Nem tudja, mit n fog használni még. De most ez egy kicsit érdekesebb, így sorban 243, kijelentjük int c, ez egyfajta hülye részletességgel. A char 8 bites, és 8 bit tud tárolni, hogy hány különböző értéke? 256. A probléma az, ha azt szeretnénk, hogy 256 különböző ASCII karakterek amelyek vannak, ha úgy gondolja, vissza, és ez nem valami memorizálni. De ha úgy gondolja, vissza a nagy ASCII chart volt héttel ezelőtt, voltak, ebben az esetben, 128 vagy 256 ASCII karakter. Használtuk a mintákat 0 és 1 múlik. Ez egy probléma, ha azt szeretné, hogy képes legyen felismerni a hiba. Mert ha már használja a 256 értéket a karakterek, Ön nem igazán tervez előre, mert most nincs módja mondván, "Ez nem egy legit karakter, ez valami hibás üzenet." Szóval, mi a világ nem az, hogy használja a következő legnagyobb érték, valami, mint egy int úgy, hogy egy őrült bitek száma, 32, 4 milliárd lehetséges értékeit, így egyszerűen csak a végén használ, lényegében, 257 közülük, ebből 1 olyan különleges jelentése a hiba. Nézzük, hogyan is működik ez. A sorban 246, van ez a nagy while hogy hívja fgetc; f értelmében fájl, getc, majd stdin. Kiderült, hogy ez csak a pontosabb módja mondván, hogy "olvasott bemenet a billentyűzet". Szabványos bemeneti eszközök billentyűzet, standard output olyan képernyőn, és standard hiba, amit majd látni Pset 4, azt jelenti, a képernyőn, hanem egy speciális része a képernyőn úgy, hogy ez nem összetévesztette a tényleges teljesítmény, hogy célja a nyomtatás, de erről bővebben a jövőben. Szóval fgetc csak azt jelenti, olvasni egy karaktert a billentyűzeten, és tárolja, ahol? Tárolja c, majd ellenőrizze, úgyhogy én csak használ néhány boolean kötőszók itt, ellenőrizze, hogy nem egyenlő \ n, így a felhasználó nyomd meg az Entert. Azt akarjuk, hogy ne ezen a ponton, vége a hurok, és mi is szeretnénk ellenőrizni a különleges állandó EOF, amely, ha tudja, vagy kitalálni - mit jelent ez állni? Vége a fájl. Tehát ez a fajta értelmetlen, mert ha én vagyok gépelni a billentyűzeten, már tényleg nincs fájlt részt ebben, de ez csak egyfajta általános kifejezés azt jelenti, hogy semmi más nem jön az ember ujjai. EOF. Vége a fájl. Mint félre, ha valaha is sújtotta ellenőrzés d at a billentyűzet, nem az, hogy akkor még nem, amit Ctrl c. De ellenőrzési d küldi ezt a különleges állandó nevű EOF. Szóval most már csak néhány dinamikus memória kiosztás. Tehát, ha n + 1> kapacitás, most leírom n. n éppen hány bájt van jelenleg a puffer, a szöveg, hogy te éppen kiépítése a felhasználó elől. Ha több karaktert a puffer kapacitása, mint a pufferben, ösztönösen, mit kell tennünk ezután fordítsanak több kapacitást. Megyek sovány át néhány számtani itt és elsősorban csak ezt a funkciót itt. Tudod mit malloc van, vagy legalábbis általában ismerik. Vegyünk egy tipp, amit realloc csinál. [Student válasz, érthetetlen] >> Igen. És ez nem elég hozzá memóriát, ez reallocates memóriát az alábbiak szerint: Ha van még hely a végén a húr, hogy Ön több e memória mint azt eredetileg ad, akkor kapsz, hogy további memóriát. Szóval egyszerűen üzembe a húrok karaktereket háttal hátra hátra. De ha nem ez a helyzet, mert túl sokáig vártam és valami véletlen került lehuppant a memóriában van, de van extra memória ide, ez rendben van. Realloc fog tenni a nehéz emelés az Ön számára, mozog a húr, amit olvasott eddig innen, tedd le oda, aztán kapsz néhány futópálya ezen a ponton. Tehát egy kézlegyintéssel, hadd mondjam el, hogy amit csinál getString van ez kezd egy kis puffer, talán 1 single karakter, és ha a felhasználó típusok 2 karaktert, getString végül hívó realloc és azt mondja: "Ó, 1 karakter nem volt elegendő. Adj nekem 2 karakter. " Akkor, ha olvassa el a logikája a hurok azt fogja mondani: "Ó, a felhasználó beírt 3 karaktert. Adj már nem 2, hanem 4 karakter, akkor adj nekem 8, akkor adjon nekem 16 és 32 ". Az a tény, hogy én vagyok a kapacitás megduplázása minden alkalommal azt jelenti, hogy a puffer nem fog lassan növekszik. Ez fog növekedni szuper gyors, és mi lehet az előnye, hogy a? Miért megduplázva a méretét a puffer, még akkor is, ha a felhasználói Lehet, csak kell 1 extra karaktert a billentyűzet? [Student válasz, érthetetlen]. >> Mi ez? Pontosan. Nem nő azt gyakran. És ez csak egyfajta - készen fedezeti meg tétjeiket itt. Az ötlet az, hogy nem akarja, hogy hívja realloc sokat, mert hajlamos arra, hogy lassú. Minden alkalommal, amikor kérdez az operációs rendszer a memória, ahogy hamarosan látni a jövőbeni probléma halmaz, akkor hajlamos arra, hogy időbe telik. Így minimálisra, hogy mennyi időt, akkor is, ha pazarolja egy kis helyet, inkább egy jó dolog. De ha olvassa végig az utolsó része getString itt, újra és újra, a megértés minden egyes sor itt nem olyan fontos ma. De észre, hogy ez végül felhívja malloc újra, és osztja pontosan annyi bájt, mint szüksége a húr majd eldobja hívja ingyenes, túlzottan nagy puffer, ha ez valóban kapott kétszeresére túl sokszor. Röviden, ez hogyan getString dolgozott egész idő alatt. Minden ez olvasható egy karaktert egy időben újra és újra és újra és minden alkalommal, amikor szüksége van némi további memória azt kéri az operációs rendszer által hívó realloc. Van még kérdése? Rendben van. A támadás. Most, hogy megértettük mutató, vagy legalább egyre inkább ismerik mutatók, nézzük meg, hogy az egész világ kezd összeomlani ha nem elég védekezni ellenséges felhasználók, az emberek, akik megpróbálják feltörni a rendszert. Emberek, akik megpróbálják ellopni a szoftver megkerülésével bizonyos regisztrációs kód hogy máskülönben írja be Nézd meg ezt a példát itt, ami csak a C kód , hogy van egy fő funkciója az alján, hogy felhívja a function ize, és milyen halad a foo? [Student] Egyetlen érv. >> Single érv. Szóval, argv [1], ami azt jelenti, az első szó a felhasználó beírt a parancssorban után a.out vagy bármi a program neve. Szóval foo, felül, úgy a char *, de char * csak mi? String. Nincs semmi új itt, és ez karaktersorozat önkényesen hívott bar. Ebben a sorban van, char c [12], a sort félig műszaki English, mi ezt a vonalat csinál? Tömbje -? Színészek. Adj egy sor 12 karakter. Tehát nevezhetnénk ezt a puffert. Ez technikailag úgynevezett c, de a puffer programozási csak azt jelenti, egy csomó hely, amit fel néhány dolgot be Aztán végül memcpy, már nem használt előtt. De akkor talán kitalálni, mit csinál. Másolja memória. Mit tegyek? Nos, ez nyilvánvalóan másolja bar, a bemeneti, a c, de csak a hossza bar. De van egy hiba van. Oké, technikailag meg kell tényleg strlen (bar) x sizeof (char), ez helyes. De a legrosszabb esetben is, tegyük fel, hogy ez - így, oké. Aztán ott van 2 hiba. Szóval sizeof (char), rendben, tegyük ezt egy kicsit szélesebb. Tehát most van még egy hiba, amely a mi? [Student válasz, érthetetlen] >> Ellenőrizze mire? Oké, mi kell ellenőrző A NULL, mert a rossz dolgok történnek, ha a mutató NULL, Mert lehet, hogy végül oda, és akkor soha nem kell majd NULL által dereferencing azt a * operátor. Szóval ez jó, és mit csinálunk? Logikailag van egy hiba itt is. [Student válasz, érthetetlen] Tehát >> ellenőrizze argc ≥ 2? Oké, van 3 bogarak ebben a programban van. Mi nem ellenőrzi, ha a felhasználó ténylegesen beírt semmit argv [1], jó. Szóval, mi a harmadik bug? Igen? [Student válasz, érthetetlen] >> Jó. Így ellenőrizni egyik forgatókönyv. Mi hallgatólagosan ellenőrizni nem másolható több memóriát mint azt meghaladó bar. Tehát, ha a húr a felhasználó beírt a 10 karakter hosszú, ezt mondván: "Csak bemásolod 10 karakter." És ez rendben van, de mi van, ha a felhasználó beírt a szót a prompt mint egy 20 karakteres szó, ez, mondván másolat 20 karaktert bar abba, hogy mi? c, más néven a puffer, ami azt jelenti, hogy csak írtam adatok 8-byte helyeken, hogy ne a saját, és nem a tulajdonosa abban az értelemben, hogy soha nem juttatott nekik. Szóval ez az, ami általánosan ismert, mint a buffer overflow támadást, vagy puffertúlcsordulás támadás, és ez a támadás az értelemben, hogy ha a felhasználó vagy a program keresi a függvény ezt rosszindulatúan, hogy valójában mi történik a következő lehet elég rossz. Vessünk egy pillantást a kép itt. Ez a kép jelent meg stack memória. És emlékszem, hogy minden alkalommal, amikor hív egy függvényt, kap ez a kis keret a verem, majd egy másik, majd egy másik, majd egy másik. És így messzire csak egyfajta elvonatkoztatott e el, mint téglalap vagy ott a fedélzeten, illetve a képernyőn van. De ha nagyítani egy olyan téglalap, ha hívja a function ize, kiderül, hogy van még a verem belül, hogy a váz és a téglalap , mint x, y és a és b, mint mi beszélünk csere. Kiderül, hogy vannak alacsonyabb szintű részletek, köztük visszatérés címét. Így kiderült, hogy amikor a fő felhívja foo, fő tájékoztatnia foo milyen fő címe rajta van a számítógép memóriájában. Mert ellenkező esetben, amint foo történik végrehajtó, mint ebben az esetben itt, ha eléri ezt a szoros kapcsos zárójel végén foo, hogy a fene sem tudja, hol foo ellenőrzése a program kellene menni? Kiderül, hogy a válasz erre a kérdésre az, hogy a piros téglalap van. Ez a mutató, és ez akár a számítógép tárolására, átmenetileg A úgynevezett stack címét legfontosabb úgy, hogy amint foo történik végrehajtó, a számítógép tudja, hol és milyen vonal fő, hogy menjen vissza. Mentett frame pointer vonatkozik hasonlóan ezt. Char * bár itt képviseli azt, amit? Nos, ez a kék szegmens itt foo a keret, mi a bar? Oké, bár csak az az érv, hogy a foo függvény. Szóval most újra itt vagyunk az ismerős képet. Van több dolgot inkább zavaró a képernyőn de ez a világoskék szegmensben, amit mi már merítve a táblára valami, mint a csere. Ez a keret a foo és az egyetlen dolog, hogy most bár, ami ezt a paramétert. De mi mást kell lennie a verem szerint ezt a kódot itt? Char c [12]. Tehát kell látni 12 négyzet memória, kiosztott változó nevű c. És valóban, mi van, hogy a képernyőn. A legtetején van c [0] gombot, majd a szerző ezt a diagram nem zavarta rajz minden négyzet, de valóban vannak 12 van mert ha megnézzük a jobb alsó sarokban, c [11], ha számolni 0-tól, a 12 ilyen bájt. De itt van a probléma: Milyen irányba c növekszik? Valahogy felülről lefelé, igaz? Ha az elindul a tetején és növekszik az alsó, nem úgy néz ki, mint hagytuk magunkat sok kifutópálya itt. Már a fajta festett magunkat egy sarokba, és c [11] is jobb ellen bárban, amely egészen ellen stack frame pointer, amely a jobb szemben a visszatérési címet, nincs több hely. Szóval, mi a hatása, akkor, ha elcseszed, és megpróbál olvasni 20 byte egy 12-bájtos puffer? Hol vannak azok a további 8 bájt menni? Belül minden más, amelyek közül néhány a szuper fontos. És a legfontosabb dolog, potenciálisan a piros doboz van, feladó címét. Mert tegyük fel, hogy Ön véletlenül vagy adversarially felülírja a 4 byte, azaz pointer címét, nem csak a szemetet, de ez a szám történik, hogy képviselje a tényleges címet memória? Mi a implicaiton, logikusan? [Student választ, érthetetlen] >> Pontosan. Amikor foo visszatér és a látogatottság, hogy kapcsos zárójel, a program fog eljárni, hogy ne térjen vissza a fő, ez fog visszatérni, amit címe rajta van a piros mezőbe. Nos, abban az esetben, megkerülésének szoftver regisztrációs, mi az a cím, ami visszaadta a funkció hogy általában kap hívott, miután kifizette a szoftver és bevisszük a regisztrációs kódot? Lehet egyfajta trükk a számítógépet nem megy itt, hanem, megy itt. Vagy, ha nagyon okos, egy támadó ténylegesen írja be a billentyűzet, például nem tényleges szó, nem 20 karakter, de tegyük fel, ő típusok néhány karakter jelentő kódot? És ez nem lesz C kód, ez lesz a karakter képviselő bináris gép-kódok, 0 és 1-es. De tegyük fel, ők elég okos ahhoz, hogy ezt megtehessük, valahogy illessze be a getString prompt valamit, ami lényegében lefordított kód, és az utolsó 4 bájt felülírja hogy visszatérési címet, és mit jelent, hogy a bemeneti cím csinálni? Ez tárolja az e piros téglalapban a cím első byte a puffer. Szóval, van, hogy nagyon okos, és ez a sok tárgyalás és a hiba a rossz ember van, de ha tudod kitalálni, milyen nagy ez a puffer, oly módon, hogy az elmúlt néhány bájt a bemeneti, amit nyújtanak a program történetesen azonos a cím a kezdetét a puffer, meg tudod csinálni. Ha azt mondjuk, általában, hello, és \ 0, ez az, amit végül a puffert. De ha mi több okos, és töltse ki, hogy a puffer, amit fogunk hívni általánosan támadó kódot, A, A, A, A: Támadás, támadás, támadás, támadás, ha ez csak valami, amit csinál valamit rosszul. Nos, mi történik, ha nagyon okos, akkor tedd ezt: A piros mezőben itt van egy számsor: 80, CO, 35, 08. Figyeljük meg, hogy megfelel a száma, hogy ez itt. Ez a fordított sorrendben, de erről bővebben majd máskor. Vegyük észre, hogy ez a feladó címét szándékosan megváltoztatták hogy megegyezzen a címet ide, nem a címét fő. Tehát, ha a rossz fiú szuper okos, ő fog felvenni, hogy a támadó kódot valami ilyesmit: "Mindent töröl a felhasználó fájlokat." Vagy "másolása a jelszavakat," vagy "Hozzon létre egy felhasználói fiókot, hogy tudok bejelentkezni. Bármi, minden, és ez mind a veszélyt és a hatalom a C. Mert van hozzáférése memória keresztül mutatók és ezért levelet, amit akarsz egy számítógép memóriájában. Tudod, hogy a számítógép bármit akarsz csupán a miután az ugrálást a saját memóriát. És így, a mai napig, így a sok program, és így sok weboldalak, amelyek veszélybe szűkülnek le, hogy az emberek kihasználják ezt. És ez tűnhet, mint egy szuper-kifinomult támadás, de ez nem mindig indul el így. A valóság az, hogy mi rossz emberek általában tennie, hogy ez a program egy parancssoros vagy GUI program, vagy egy honlap, az Ön csak elkezd nyújtó ostobaság. Azt írja egy igazán nagy szót a keresési mezőbe, és nyomd meg az Entert, , és várni, hogy ha a honlap összeomlik. Vagy várni, hogy ha a program nyilvánul néhány hibaüzenetet. Mert ha szerencséd lesz, mint a rossz fiú, és hogy néhány őrült input, hogy lefagy a program, azt jelenti, hogy a programozó nem számítottak a rossz viselkedés ami azt jelenti, akkor valószínűleg elég erőfeszítés, Elég próba-és hiba, kitaláljuk, hogyan lehet a bérek a pontosabb támadás. Tehát annyira része a biztonság nem csak elkerüli ezeket a támadásokat teljesen, de felderítésük és valójában nézi most rönköt, és látta, milyen őrült bemenetek az emberek gépelt be a honlapján. Milyen keresési kifejezések embereket beírt webhelyére annak reményében, túláradó egyes puffer? És ez a lényeg, hogy az egyszerű alapokat, hogy mi egy tömb, és mit jelent az, hogy kiosztani és használni memória? És kapcsolatos, hogy is van ez. Szóval csak pillantást belsejében egy merevlemez ismét. Szóval felidézni egy vagy két hete, hogy mikor húzza fájlokat a Lomtár vagy szemetes, mi történik? [Student] Semmi. >> Igen, abszolút semmi. Végül, ha lecsökken a lemezterület, Windows vagy Mac OS indul A fájlok törlése az Ön számára. De ha húzza valami ott, akkor ez egyáltalán nem biztonságos. Minden roomate, barát vagy családtag köze van dupla kattintás, és íme. Ott van az összes vázlatos fájlokat próbált meg törölni. Így a legtöbben, legalább tudjuk, hogy van, hogy jobb gombbal vagy ellenőrzése kattintással és ürítse ki a szemetet, vagy valami ilyesmi. De még akkor is, hogy nem egészen erre a célra. Mert mi történik, ha egy fájlt a merevlemezre amely képviseli néhány Word dokumentumot vagy egy JPEG? És ez azt jelenti, a merevlemez-meghajtót, és mondjuk ezt a forgács itt kijelenti, hogy fájl, és ez áll egy csomó 0 és 1-es. Mi történik, ha nem csak húzza a fájlt a kukába vagy a kukába, hanem üres ez? Valahogy semmi. Ez nem semmi most. Most már csak semmit, mert egy kis valami történik a formában ez a táblázat. Szóval van valami adatbázis vagy a tábla belsejében egy számítógép memóriáját hogy lényegében 1 oszlop a fájlok nevét, és 1 oszlop fájl helyét, ahol ez lehet location 123, csak egy véletlen számot. Tehát lehet, hogy valami ilyesmi x.jpg, és helyét 123. És mi történik akkor, amikor üres a szemetet? Ez elmúlik. De mi nem megy el a 0 és 1-es. Akkor mi van, akkor a kapcsolat Pset 4? Nos, Pset 4, csak azért, mert mi már véletlenül törölt A Compact Flash kártya, hogy már az összes ilyen fotókat, vagy csak azért, mert a rossz szerencse sérült lett, , nem jelenti azt, hogy a 0 és 1-es nem mindig ott van. Lehet, hogy néhány közülük elveszett, mert valami van elrontott abban az értelemben, hogy az egyes a 0-lett 1-es és 1-es 0-lett. Rossz dolgok történnek, mert a hibás szoftver vagy hibás hardver. De sok ilyen bit, talán még 100%-uk még mindig ott van, ez csak, hogy a számítógép vagy a kamera nem tudja, hol JPEG 1 kezdődött és ha JPEG 2 megkezdődött, de ha a programozó, Tudja, egy kis hozzáértés, amennyiben e JPEG vagy és mit néznek ki, tudja elemezni a 0 és 1-es és azt mondja: "Ó. JPEG. Ó, JPEG. Írhatsz egy programot lényegében csak egy for vagy a while ciklus amely helyreállítja minden egyes egy ilyen fájlokat. Tehát a tanulság tehát az, hogy indítsa el a "biztonságos" fájlok törlése ha szeretné, hogy elkerülje ezt teljesen. Igen? [Student kérdés, érthetetlen] >> Már több memóriát, mint azelőtt - Oh! Jó kérdés. Akkor miért, akkor kiürítése után a szemetet, sem a számítógép megmondja, hogy van több szabad hely, mint azelőtt? Dióhéjban, mert hazudik. További technikailag, akkor több hely. Mert most már azt mondta, akkor, hogy más dolog, ha ezt a fájlt egyszer volt, de ez nem jelenti a biteket elmegy, , és ez nem jelenti a biteket megváltoztatták összes 0-k, például az Ön védelme érdekében. Ezzel szemben, ha a "biztonságos" törlés fájlokat, vagy fizikailag semmisítse meg a készüléket, hogy valóban ez az egyetlen módja, néha körül ezt. Akkor miért nem indulunk ezen a félig ijesztő jegyzetet, és mi találkozunk hétfőn. CS50.TV