[Powered by Google Translate] [TJEDAN 5] [David J. Malan, Sveučilište Harvard] [Ovo je CS50.] [CS50.TV] [Žensko] On laže, o čemu, ja ne znam. [Čovjek] Pa što znamo? [Žensko] To u 09:15, Ray Santoya bio na bankomatu. [Čovjek] Dakle, pitanje je, što je on radio u 09:16? [Žensko] Pucanje 9 mm na nešto. Možda je vidio snajper. [Čovjek] Ili je on radio s njim. [Žensko] Čekaj. Vrati jednom. [Čovjek] Što vidiš? [♫ neizvjesnom glazba ♫] [Žensko] Donesite svoje lice prema gore. Cijeli zaslon. [Man] Njegove naočale. >> Tu je odraz. [♫ neizvjesnom glazba ♫] [Čovjek] To je Nuevita je bejzbol momčad. To je njihov logo. [Žensko] A on govori da onaj tko je nosio tu jaknu. [David Malan] Dakle, ovo je CS50 tjedan 5, a danas smo uništiti malo televiziju i film za vas. Dakle, kad god gledate show kao što je ovaj jedan ovdje, a policajci kažu "Možete li očistiti da gore?" ili "unaprijedili" nema poboljšala u stvarnom svijetu. U stvari, ono što stvarno dobivate je malo nešto ovako. Ja sam izvukao jedan od zaposlenika fotografija iz stranici. To je program koji se zove Photoshop. Ovo je 1 od 2 Razmak, 1 od 3 Razmaci zapravo, danas, jer imamo gospođu Bowden ovdje, kao i sa Rob i Pavla. No, ovdje je Rob na zaslonu, a ako smo zoom u tom odsjajem on je uvijek imao u svom oku, ono što zapravo vidi da je ono što vidite je ono što dobijete. To je "pojačan", pa "CSI" su ga malo krivo. Tu je jedan drugi isječak, ako možemo pokupiti na "CSI" samo malo duže. Ovo je jedna lijepa fraza izreći ubuduće ako želite zvuči tehnički sa svojim prijateljima kada, stvarno, govoriš apsolutno ništa. [Čovjek] Za nekoliko tjedana sam istraživao taksist ubojica ubojstva s određenom morbidnom fascinacijom. [Žensko # 1] To je u stvarnom vremenu. [Žensko # 2] Ja ću stvoriti GUI sučelje koristeći Visual Basic, da vidim mogu li pratiti IP adresu. [Malan] Dakle, audio out of sync stranu, stvarajući GUI sučelje koristeći Visual Basic pratiti IP adrese je potpuna glupost. Ovih dana ne bi koristili Visual Basic, nema potrebe za GUI, a IP adresa je tehnički točno termin. Dakle, držati oko vanjska strana za njih, i jedan od mojih favorita: Ovo je malo više tajanstvena, jer morate znati drugi jezik. Tu je jezik zove Objective-C, koji je nadskup C. Što znači da je C plus neke dodatne mogućnosti, među njima objektno-orijentirani programski. A to je jezik koji je Apple popularizirao za iOS programiranja. I tako evo isječak iz različitih pokazuju potpuno zaboravljeno, iz "Brojevi" da, ako ste zapravo gledati usko na TiVo i pauze u pravom trenutku, vidjet ćete da je ono što gledamo nije baš ono što je opisano. I neka mi probati različite audio konektor ovdje i vidjeti ako ne možemo zadržati zvuk u sync ovaj put. Ja vam dati "Brojevi". [Čovjek # 1] To je 32-bitni IPv4 adresa. [Čovjek # 2] IP, to je internet. >> Privatni mreže. To je Anita je privatna mreža. [Malan] Ok. Ovo je Objective-C, a to je za neke dječjom bojanje programa, kao što možda može zaključiti iz imena varijable tamo. Tako da je, dakle, bio "Brojevi". Dakle, danas i ovaj tjedan ćemo predstaviti Malo svijeta forenzike i konteksta u problemima zbog čega. Danas će biti skraćeno predavanje jer je poseban događaj u ovdje poslije, pa ćemo zaviriti, i zafrkavati oba učenicima i roditeljima podjednako danas s neke od stvari koje su na horizontu. Među njima, od ponedjeljka, imat ćete još nekoliko kolega iz razreda. EDX, Harvard i MITs novi online inicijativa za otvorenu courseware i više, stiže Harvarda kampusu u ponedjeljak. Što znači da dolaze ponedjeljak da će imati - od prošlog broja, 86.000 dodatnih kolege će se sljedeće zajedno s CS50 predavanja i sekcije i Walkthroughs i problem setovima. I kao dio toga, vi ćete postati članovi nastupni klasi CS50 i sada CS50x. Kao dio toga, sada shvaćaju da će biti nekih upsides kao dobro. Da biste dobili spreman za to, za veliki broj studenata, dovoljno je reći da iako imamo 108 TFS i CAS, nije baš najbolji učenik / učitelj omjer jednom smo pogodak 80.000 drugih studenata. Pa nećemo se ocjenjivanje toliko problema postavlja ručno. Dakle uvela ovaj tjedan u problematiku skupa će biti CS50 Ček, koja će biti uslužni program naredbenog retka unutar aparata da ćete dobiti nakon što ga ažurirati kasnije ovaj vikend, a vi ćete biti u mogućnosti pokrenuti naredbu, provjerite 50, na svoj pset, a vi ćete dobiti neke povratne informacije o tome je li vaš program je točno ili netočno prema raznim dizajna specifikacijama koje smo dostavili. Dakle, više o tome i specifikacija Problem set i su CS50x kolege će biti koristeći ovaj kao dobro. Dakle Problem set 4 je sve o forenzici. I ovo je skladba inspirirana nekom stvarnom životu stvari, čemu kad sam bio u dodiplomskoj školi, ja interniran za vrijeme s u Middlesex County je Županijsko državno odvjetništvo radi forenzička rad sa svojim olovnim forenzičkih istražitelja, i što je to iznosio je, mislim da sam spomenuo na nekoliko tjedan prošlost, je masa Državna policija ili netko drugi bi došao u, oni će spadati stvari poput tvrdih diskova i CD-a i diskete i slično, a onda je cilj forenzike uredu je da se utvrdi da li nije bilo ili nije bilo dokaza o nekakvoj. To je bio Posebna Istrage jedinica, tako da je bijelo-okovratnik kriminala, to je više zabrinjavajuća vrsta zločina, ništa uključuje neku vrstu digitalnih medija, ispada da se ne da mnogi ljudi napisati e-mail govoreći: "Učinio sam to." Dakle, vrlo često ove forenzika traži nije pojavio sve to puno voća, ali ponekad ljudi će pisati takve poruke. Dakle, ponekad se napori bili nagrađeni. Ali da će dovesti do ovog forenzičkih pset, mi ćemo biti uvođenje u pset 4 bitni grafike. Dakle, vjerojatno se te stvari zdravo za gotovo, JPEG, GIF i kao ovih dana, ali ako vi stvarno mislite o tome, slika, baš kao i Rob lice, mogao biti modeliran kao niz točaka ili piksela. Sada, u slučaju Rob lice, tu je sve vrste boja, i počeli smo vidjeti pojedine točke, otherwide poznat kao piksela, kad smo počeli uvećanje u. Ali ako ćemo pojednostaviti svijet malo, a samo reći da je ovo ovdje je Rob crno-bijelo, dobro, da predstavljaju crna i bijela možemo samo koristiti binarni. A ako ćemo koristiti binarni, 1 ili 0, možemo izraziti tu istu sliku od Rob je nasmijano lice s ovim uzorkom bitova: 11000011 predstavlja bijela, bijela, crna, crna, crna, crna, bijela bijela. I tako da to nije veliki skok, a zatim, kako bi počeli govoriti o šarenim fotografijama. Stvari koje bi vidjeti na Facebooku ili uzeti s digitalnom kamerom, ali, svakako, kada je riječ o bojama, trebate više bitova. I sasvim uobičajeno u svijetu fotografije je koristiti ne 1-bitnu boju, jer to sugerira, ali 24-bitna boja, gdje ste zapravo dobiti milijune boja. Dakle, kao u slučaju kad smo zumirani na Rob oku, da je bilo nekoliko milijuna različitih boja mogućnosti. Dakle, mi ćemo uvesti to u problemu set 4 kao u prohod, što će biti danas u 03:30 umjesto uobičajenog 02:30 jer petak predavanje ovdje. No, video će biti online, kao i obično, sutra. Također ćemo vas upoznati s drugom datotečnom formatu. Dakle, ovo namjerno je značilo da izgleda zastrašujuće na prvi, ali to je samo neka dokumentacija za C struct. Ispada da je Microsoft, godina, pomogao popularizirati ovaj oblik, zove bitmapa format, BMP, i to je super jednostavan, šareni grafički format koji je korišten za neko vrijeme a ponekad i dalje za pozadine na stolna računala. Ako mislite vratiti na Windows XP i valjanje brežuljcima i plavog neba, to je obično BMP ili skenirana slika, i bitmape su zabavna za nas, jer oni imaju malo više složenosti. To je ne sasvim kao jednostavan kao ovaj rešetku 0-a i jedan je; umjesto toga, imate stvari poput zaglavlju na početku datoteke. Dakle, drugim riječima, unutar. Bmp datoteke je cijela hrpa 0-ih i jedan je, ali ima neke dodatne 0-a i jedan je tamo. I ispada da ono što smo vjerojatno uzeti zdravo za gotovo već godinama, Formati sviđa. doc ili. xls ili. mp3 ili. MP4, bez obzira na Formati da ste upoznati s. Pa, što to uopće znači biti format? Jer na kraju dana, sve ove datoteke koristimo imaju samo 0-a i jedan je i možda one 0 je i 1-a predstavljaju a, b, c, preko ASCII ili slično, ali do kraja dana, to je samo 0-a i jedan je. Dakle ljudi samo povremeno odlučiti da izmisle novi format datoteke gdje su standardizirati ono obrasci bitova će zapravo znači. I u ovom slučaju ovdje, narod koji je dizajnirao bitmap format rekao je da je u prvom bajtu u bitmap datoteke, što označava ofsetnom 0, tamo, tamo će biti neki šifrirano ime varijabla zove bfType, koja samo stoji za bitmap datoteke tipa; što tip bitmap datoteku ovo. Možete zaključiti, možda, iz drugog reda koji prebijanje 2, bajt broj 2, ima uzorak 0-a i jedan je da predstavlja što? Veličina nešto, a to ide od tamo. Tako je u problemu set 4, vi ćete biti prošetao kroz neke od tih stvari. Nećemo završiti brinuti o svima njima, ali primijetiti ona počinje da biste dobili zanimljiv oko linije ili Bajt 54, rgbtBlue, zelena i crvena. Ako ste ikada čuli akronim RGB, crvena zelena plava, ovo je referenca na to. Zbog ispada možete slikati sve dugine boje s nekim kombinacija crvene i plave i zelene. A, u stvari, roditelji u sobi mogu podsjetiti na neke od najranijih projektora. Ovih dana, možete vidjeti samo jedan svjetlost izlazi iz objektiva. No, natrag u dan, da je imala crvenu leću, plavu leću, i zelenu leću i zajedno su usmjerene na zaslonu i formirao šarenu sliku. I vrlo često srednje škole i visoke škole će imati one leće uvijek-tako-malo iskosa, tako da su bili svojevrsni vidim dvostruko ili trostruko slike, ali to je ideja. Imali ste crvene i zelene i plave svjetlo slikarstvo sliku. A taj isti princip se koristi u računalima. Dakle, među izazovima, a zatim, za vas u problem postaviti četiri će biti nekoliko stvari, jedna je da se zapravo veličinu slike. Da bi se u obrascu 0-a i jedan je, shvatiti što komade 0-a i jedan je predstavljaju ono što u strukturi kao što je ovaj, i onda shvatiti kako replicirati piksela: Reds, Blues, zeleni unutar tako da kad slika izgleda ovako na početku, može izgledati ovako umjesto nakon toga. Među ostalim izazovima, također, će biti da ćete se predati forenzička slika od stvarne datoteke iz digitalnog fotoaparata i na toj kameri, nekada davno, bili su cijela hrpa fotografija. Problem je, mi slučajno izbrisati ili imao sliku korumpiran nekako. Loše stvari se dogoditi s digitalnim kamerama, pa smo brzo kopirati sve 0-a i jedan je off tu karticu za vas, spasio ih sve u jednoj velikoj datoteku, a onda ćemo ih predati tebi u problem postaviti 4, tako da možete napisati program u C s kojima se oporavi sve one JPEG, idealno. A što se ispostavilo da je JPEG, iako su oni nešto složenog formatu, oni su puno složeniji nego ove nasmijano lice ovdje. Ispada da svaki JPEG počinje s istim uzorcima 0-a i jedan je. Dakle, koristite while petlja ili za petlje ili slično, možete ponoviti preko svega 0-ih i jedan je u ovom forenzičke sliku i svaki put kad vidim poseban uzorak koji je definiran u problemu postaviti specifikaciji, možete pretpostaviti, "Oh, ovdje je, s vrlo visokom vjerojatnošću, početak JPEG, "i čim vam isti obrazac, neki broj bajtova ili kilobajta megabajtima ili kasnije, možete pretpostaviti, "Ooh! Ovdje je drugi JPEG, slika Uzeo sam nakon prvog. Dopustite mi prestati čitati tu prvu sliku, počnite pisati ovu novu. ' A izlaz vašeg programa za pset 4 će biti onoliko koliko 50 JPEG. A ako to nije 50 JPEG, imate malo petlje. Ako imate beskonačan broj JPEG, imate beskonačnu petlju. Tako da, također, će biti vrlo čest slučaj. To je ono što je na horizontu. Kviz 0, iza nas. Shvatite, po mom e, da uvijek postoji ljudi koji su oboje sretni, vrsta neutralna, i tužno oko kviza 0 puta. I nemojte doprijeti do mene, glava TFS, Zamyla, svoj TF ili jedan od CA da znate ako želite razgovarati o tome kako su stvari išle. Tako da impresionirati roditelje ovdje u sobi, što je CS50 knjižnica? Dobar posao. Što je CS50 knjižnica? Da? [Studentski odgovore, nerazumljivo] >> Dobro, dobro. Dakle, to je prewritten skup koda koji smo, osoblje, napisao je, pružamo vama, dati neke zajedničke funkcionalnosti. Stuff sviđa mi se niz; mi srediti int, sve funkcije koje su ovdje navedene. Počevši sada, možemo početi stvarno uzeti ove obuke kotača off. Tako da ćemo početi oduzeti "string" od vas, koji, podsjetimo, bio samo sinonim za ono što stvarni podaci putovanja? char *. Dakle, za roditelje, koji je vjerojatno bio - to je dobro, tako char * počet ćemo vidjeti na zaslonu sve više kao što smo ukloniti "STRING" iz našeg vokabulara, barem kad je u pitanju zapravo pisanje koda. Isto tako, mi ćemo prestati koristiti neke od tih funkcija, kao mnogo, jer su naši programi će se sofisticiraniji nego samo pisati programe koji sjede tamo sa brz treperi, čeka korisnika upisati nešto u. Vi ćete dobiti svoje inpute od drugdje. Na primjer, da ćete ih dobiti od niza bitova na lokalnom tvrdom disku. Umjesto toga ću ih dobiti u budućnosti iz mrežne veze, neke web stranice negdje. Tako ćemo guliti leđa ovom sloju za prvi put, i podići CS50 aparat i ovu sliku nazvao CS50.h, koji ste bili oštri, uključujući tjednima. Ali ajmo se zapravo vidjeti što je unutar toga. Dakle, na vrhu datoteke u plavom je samo cijela hrpa komentarima, Informacije o jamstvu i licenciranje. To je neka vrsta zajedničke paradigme u softveru, jer puno softvera ovih dana je ono što se zove "open source" što znači da je netko napisao kod i napravio je slobodno dostupan, a ne samo za pokretanje i korištenje, ali zapravo čitati i mijenjati i integriraju u svoj rad. Dakle, to je ono što ste koristili, open source softvera, iako u vrlo malom obliku. Ako sam se pomaknite prema dolje prošlosti komentarima, iako ćemo početi vidjeti neke više poznate stvari. Tako primijetiti na vrhu ovdje, da CS50.h datoteka uključuje hrpu zaglavlja datoteka. Sada, većina od njih nismo vidjeli, ali jedan je upoznati, koji od njih smo vidjeli, iako kratko, tako daleko? Da, standardne biblioteke. Stdlib.h ima malloc, pa kad smo počeli govoriti o dinamičke memorije raspodjele, koje ćemo se vratiti sljedeći tjedan kao dobro, počeli smo uključujući tu datoteku. Ispada da bool i pravi i lažni zapravo ne postoje u C, sama po sebi, osim ako su ovu datoteku ovdje. Tako smo, za nekoliko tjedana, bio uključujući standardni bool.h tako da možete koristiti pojam bool, istinita ili lažna. Bez toga, da će morati izdvojiti od lažni njega i koristiti int i samo proizvoljno pretpostaviti da je lažna 0 i 1 je istina. Sada, ako mi se pomaknite prema dolje i dalje, ovdje je naša definicija niza. Ispada, kao što smo već rekli, da ako to * je zapravo ne smeta. Možete čak imati prostor sve oko sebe. Mi, ovaj semestar, su ga promovira kao to jasno dati do znanja da je * ima veze s tipom. Ali shvatite, baš kao i uobičajeno, ako ne i malo više zajedničkog, je da ga je tamo stavio ali funkcionalno je to ista stvar. Ali sada, ako čitamo dolje dalje, ajmo pogledati recimo, GetInt, jer mi se to, možda, prije svega ovaj semestar. I ovdje je GetInt. To je ono što? To je prototip. Tako često, mi smo stavili prototipove na vrhovima naših. C datoteke, ali također možete staviti prototipove u zaglavlju datoteke, datoteke, h. kao što je ovaj jedan ovdje, tako da kada pišete neke funkcije da želite drugi ljudi biti u mogućnosti koristiti, što je upravo slučaj s CS50 knjižnici, ne samo provoditi svoje funkcije u nešto poput CS50.c, također staviti prototipa nije na vrhu tog spisa, ali na vrhu datoteke zaglavlja, zatim da header datoteka je ono što prijatelji i kolege su, s oštrim uključiti u vlastitom kodu. Dakle, sve ovo vrijeme ste bili, uključujući sve ove prototipova učinkovito na vrhu svoje datoteke, ali putem ove oštre uključuju mehanizam bitno da kopije i paste ovu sliku na svoj vlastiti. Sada, ovdje je neke prilično detaljan dokumentacija. Mi smo prilično mnogo uzeti zdravo za gotovo da GetInt dobiva int, ali ispada da je neki kutak slučajeva, zar ne? Što ako korisnik upiše u nizu koji je način prevelika? Quintillion, da jednostavno ne mogu stati unutar int? Što je očekivano ponašanje? Pa, u idealnom slučaju, to je predvidljiva. Dakle, u ovom slučaju, ako zapravo pročitate fine print, vidjet ćete da ako se linija ne može pročitati, ovaj vraća INT_MAX. Nikada nismo razgovarali o tome, ali na temelju svoje kapitalizacije, što je to, vjerojatno? To je konstanta, tako da je to neka posebna konstanta koja je vjerojatno proglasila u jednoj od tih zaglavlja datoteka koje je do veće u spisu, i INT_MAX je vjerojatno nešto slično, otprilike, 2000000000. Ideja je da zato moramo nekako označi da je nešto pošlo po zlu, mi, da, ima četiri milijarde brojeve na raspolaganju, negativna 2000000000 na do 2 milijarde, dati ili uzeti. Pa, ono što je zajedničko u programiranju je li ukrasti samo jednog od tih brojeva. Možda 0, možda 2000000000, možda negativna 2000000000. Tako ćete potrošiti jedan od vaših mogućih vrijednosti, tako da možete obvezati na svijetu da, ako nešto pođe po zlu, ja ću se vratiti ovo super veliku vrijednost. Ali vi ne želite da korisnik typing nešto grobni kao "dva, tri, četiri ..." od stvarno velikom broju, gdje se generalizirati, umjesto kao konstanta. Pa stvarno, ako su se analni posljednjih nekoliko tjedana, kad god nazvati GetInt, trebali su provjere s Ako je uvjet. Je li korisnički tip u INT_MAX, ili točnije, učinio GetInt povratka INT_MAX? Jer ako je to učinio, to zapravo znači da to nije tip, nešto je pošlo po zlu u ovom slučaju. Dakle, to je ono što je općenito poznat kao "sentinel" vrijednosti, što samo znači posebna. Pa, ajmo sad okrenuti u na c. Datotekama. C Datoteka je postojala u aparatu za neko vrijeme, i, u stvari, aparat ima precompiled za vas u toj stvari smo nazvali "objektni kod" ali to jednostavno nije bitno za vas gdje je to jer sustav ne zna, u ovom slučaju, gdje je, aparat. Ali ajmo se pomaknite prema dolje sada GetInt, i vidjeti kako GetInt je radio sve ovo vrijeme. Dakle, ovdje imamo slične komentare od prije. Dopustite mi povećali samo kod dijela, i što imamo za GetInt je sljedeći. To ne preuzima ulaz i vraća int, dok je (istina), pa smo namjerno beskonačnu petlju ali, vjerojatno ćemo izbiti iz to nekako, ili se vratiti u roku od ovoga. Dakle, neka je vidjeti kako se to radi. Pa, čini se da se pomoću GetString U ovoj prvoj liniji unutar petlje, 166. Ovo je sada dobra praksa, jer pod kojim okolnostima mogao GetString vratiti ovu posebnu ključnih riječi, null? Ako nešto pođe po zlu. Što bi moglo poći po zlu kada nazovete nešto poput GetString? Da? [Studentski odgovor, nerazumljivo] >> Da. Dakle, možda malloc ne uspije. Negdje ispod poklopca motora GetString zove malloc, koje dodjeljuje memoriju, što omogućuje računala dućan svi likovi koji korisnik upiše u tipkovnici. I pretpostavljam da je korisnik imao puno slobodnog vremena i upisali više, na primjer, od dvije milijarde znakova. Više znakova nego računalo ima čak RAM-a. Pa, GetString mora biti u mogućnosti da znači da vam, čak i ako je to super, super neuobičajeno kutak slučaj. To je na neki način biti u mogućnosti da obrađuju ovu, i tako GetString, ako ćemo se vratiti i pročitati njegovu dokumentaciju, ne, u stvari, vratiti NULL. Sada, ako ne uspije GetString po povratku NULL, GetInt će uspjeti po povratku INT_MAX, baš kao stražar. Ovo su samo ljudska konvencija. Jedini način da bi znali je to slučaj je čitanjem dokumentacije. Dakle, ajmo se pomaknite prema dolje do mjesta gdje int je zapravo GotInt. Dakle, ako sam pomaknite se dolje malo dalje, u skladu 170 imamo komentar iznad ovih redaka. Dakle, mi izjavljujemo, u 172, int n i char C, a zatim ova nova funkcija što neki od vas su nabasali prije, ali sscanf. To je kratica za gudački skeniranja f. Drugim riječima, daj mi niz i ja ću ga skenirati za dijelove informacije interesa. Dakle, što to znači? Pa, recimo da sam upisati, doslovno, 1 2 3 na tipkovnici, a zatim pritisnite enter. Koja je vrsta podataka od 1 2 3 kada se vratio po GetString? To je očito niz, zar ne? Dobio sam niz, pa 1 2 3 stvarno "1 2 3» s \ 0 na kraju njega. To nije int. To nije broj. To izgleda kao broj, ali to je zapravo nije. Dakle, ono što ne GetInt morati učiniti? To je skenirati taj niz lijeva na desno, 1 2 3 \ 0, i nekako ga pretvoriti u stvarni cijeli. Sada, mogli shvatiti kako to učiniti. Ako mislite natrag pset 2, što vjerojatno dobio malo ugodno s Cezarom ili vigenere tako da možete ponoviti preko niza, možete pretvoriti znakova da Ints s pick. To je puno posla. Zašto ne pozvati funkciju kao sscanf koji radi za vas? Dakle sscanf očekuje argument, u ovom slučaju zove linija, koja je niz. Zatim odredite, u navodnicima, vrlo slična printf, Što očekujete da ćete vidjeti u ovom nizu? Ono što sam rekao ovdje je, očekujem da ću vidjeti decimalni broj, a možda i karakter. A vidjet ćemo zašto je to slučaj u samo nekoliko trenutaka. Ispada da je ovaj zapis je sada podsjeća na stvari počeli smo govoriti o nešto više od tjedan dana. Što je & n i c & radiš za nas ovdje? [Studentski odgovore, nerazumljivo] >> Da. To je što su mi dali adresu n i adresa c. Sada, zašto je to važno? Pa, znate da sa funkcije u C uvijek možete vratiti vrijednost ili nema vrijednost na sve. Možete se vratiti int, string, float, char, kako god. Ili možete vratiti prazninu, ali možete samo vratiti jedan stvar maksimalno. No, ovdje želimo sscanf me vratiti možda je int, decimalni broj, i char, a ja ću objasniti zašto char u trenutku. Tako da učinkovito želite ž vratiti dvije stvari, to je jednostavno nije moguće u C. Tako možete raditi oko koje prolazi u dvije adrese, jer čim predati funkciju dvije adrese, što može da funkcija učiniti s njima? To može pisati tim adresama. Možete koristiti operaciju * ​​i "tamo" na svaku od tih adresa. To je vrsta ovog backdoor mehanizam, ali vrlo uobičajena za promjenu vrijednosti varijabli u više nego samo jednom mjestu, u ovom slučaju dvije. Sada, primijetit sam provjeru == to1, a zatim se vraćaju n ako to ne, u stvari, ocjenjuje da istinito. Dakle, što se događa? Pa, tehnički, svi smo stvarno želite da se dogodi u GetInt je to. Želimo analizirati, da se tako izrazim, želimo pročitati niz "1 2 3", a ako to izgleda kao da je broj postoji, ono što smo reći sscanf učiniti je staviti taj broj, 1 2 3, u ovom promjenjivom n za mene. Zašto, onda, učinio sam to kao dobro? Što je uloga također govoreći, sscanf, možda ćete također dobiti karakter ovdje. [Studentski govoreći, nerazumljivo] >> Ne - decimalna točka mogao raditi. Ajmo držite da misli na trenutak. Što još? [Student, nerazumljivo] >> Dakle, dobra misao, to bi mogao biti NULL karakter. To je zapravo nije, u ovom slučaju. Da? [Student, nerazumljivo] >> ASCII. Ili, neka mi generalizirati čak i dalje. % C je samo za provjeru pogrešaka. Mi ne želimo da se lik nakon broja, ali što to mi omogućuje da učiniti je sljedeće: Ispada da sscanf, osim pohranjivanja vrijednosti u n i C, u ovom primjeru ovdje, ono što također ne je to vraća broj varijabli to staviti vrijednosti u. Dakle, ako ste samo upisati jedan dva tri, onda samo% d ide na utakmicu i samo n dobiva pohranjena u vrijednosti poput 1 2 3 i ništa ne dobiva staviti u c; c ostaje smeće vrijednost, da se tako izrazim. Garbage, jer to nitko nikada nije inicijaliziran kao neku vrijednost. Dakle, u tom slučaju, sscanf vraća jedan, jer sam naseljena jedan od onih pokazivače, u kojem slučaju, velik. Imam int, pa sam osloboditi liniju osloboditi memoriju da GetString zapravo namijenjen, a onda sam se vratiti n. Inače, ako ste se ikad pitali gdje da ponovi izjava dolazi, dolazi iz upravo ovdje. Ako, s druge strane, ja sam upisati 1 2 3 foo, samo neki slučajni slijed teksta, sscanf će vidjeti, ooo, broj, ooh, broj, ooh, broj, ooh - f. I to će staviti jedan dva tri u n. To će staviti f u c, a zatim se vratiti dva. Dakle, imamo, samo pomoću osnovnu definiciju scanf ponašanja, vrlo jednostavan način - dobro, kompleks na prvi pogled, ali na kraju dana, prilično jednostavan mehanizam govoreći, postoji int, a ako je tako, da je jedina stvar koju sam našao? I bijeli prostor ovdje je namjerno. Ako ste pročitali dokumentaciju za sscanf, to vam govori da ako su komad bijelog prostora na početku ili na kraju, sscanf previše će omogućiti korisniku, iz bilo kojeg razloga, pogoditi razmaknicu 1 2 3, te da će biti legitimna. To neće vikati na korisnika samo zato što su hit razmaknicu na početku ili na kraju, što je samo malo više user-friendly. Sva pitanja, a zatim, na GetInts? Da? [Studentski pitanje, nerazumljivo] >> Dobro pitanje. Što ako samo upisali u char, kao i F, a pogodak ulaziti bez typing 1 2 3; što misliš da je ponašanje ove linije koda će onda biti? Dakle sscanf mogu pokriti previše, jer u tom slučaju, to neće ispuniti N ili C, to će umjesto povratak 0. U tom slučaju, ja sam također uhvatiti taj scenarij, jer je očekivana vrijednost želim je jednog. Želim samo jedna, i samo jedna stvar koju treba popuniti. Dobro pitanje. Drugi? U redu, pa neka se ne proći kroz sve funkcije u ovdje, ali onaj koji čini se da je, možda, preostale interesa je GetString jer ispada da GetFloat, GetInt, GetDouble, GetLongLong Svi Punt puno njihove funkcionalnosti na GetString. Dakle, neka je pogledati kako se on provodi ovdje. Ovaj jedan izgleda malo kompleksa, ali koristi iste osnove da smo počeli govoriti o prošlog tjedna. Tako je u GetString, koja ne uzima argumente po praznini ovdje, i vraća niz, pa sam deklariranje string zove tampon. Ja stvarno ne znam što da će se koristiti za još, ali vidjet ćemo. Izgleda kao kapaciteta, po defaultu, 0; nije sasvim siguran gdje je to ide. Niste sigurni što n će se koristiti za još. No, sada to je sve malo više zanimljiv, pa u skladu 243, smo proglasi int c, to je neka vrsta glupog detalja. Char je 8 bita, a 8 bita može pohraniti koliko različite vrijednosti? 256. Problem je, ako želite imati 256 različitih ASCII znakova, koje postoje, ako mislite vratiti, a to nije nešto zapamtiti. No, ako se sjetim tog velikog ASCII tablici smo imali tjedana prije, bilo je, u tom slučaju, 128 ili 256 ASCII znakova. Koristili smo sve obrasce 0 je i jedan je gore. To je problem, ako želite biti u mogućnosti da otkrije pogrešku. Jer ako već koristite 256 vrijednosti za svoje likove, nisi stvarno unaprijed planirati, jer sada nemate način govoreći, "Ovo nije čitljiv znak, a to je neki pogrešan poruka." Dakle, ono što svijet čini se, oni koriste sljedeći najveća vrijednost, nešto poput int, tako da imate ludu broj bitova, 32 za 4 milijarde mogućih vrijednosti, tako da možete jednostavno završiti korištenjem, suštini, 257 od njih, jedan od kojih ima neke posebno značenje kao pogrešku. Dakle, neka je vidjeti kako se to radi. U skladu 246, imam tu veliku while petlja koji se zove fgetc f značenje datoteku, getc, a zatim STDIN. Ispada to je samo precizniji način govoreći: "čitati ulaz s tipkovnice." Standardni ulaz znači tipkovnica, standardni izlaz znači zaslon, i standardna pogreška, što ćemo vidjeti u pset 4, znači zaslon, ali poseban dio zaslona, ​​tako da to nije conflated sa stvarnim izlaz da namjerava ispisati, ali više o tome u budućnosti. Dakle fgetc samo znači pročitati jedan lik iz tipkovnice, i pohraniti ga gdje? Čuvajte ga u C, a zatim provjeriti, tako da sam samo pomoću nekih Boolean veznici ovdje, provjerite da nije jednaka \ n, tako da je korisnik pogodio ući. Želimo zaustaviti u tom trenutku, na kraju petlje, i mi također želimo provjeriti za posebna konstantna, EOF, koji, ako znate ili pretpostavljate - što to stajati? Kraj spisa. Dakle, ovo je vrsta besmisleno, jer ako sam tipizacija tipkovnici, tamo je stvarno nema datoteka su uključeni u to, ali to je samo sortirati od generički termin koji se koristi za reći da ništa drugo ne dolazi iz ljudskog prstima. EOF. Kraj spisa. Kao na stranu, ako ste ikada pogodio kontrole d na tipkovnici, ne da bi još, vi ste hit kontrole c. No, kontrola d šalje ovu posebnu stalnu nazivom EOF. Tako sada imamo samo neke dinamičke raspodjele memorije. Dakle, ako je n + 1> kapacitet, sada ću objasniti n. n je samo koliko bajtova su trenutno u tampon, string koji ste trenutno gradi od korisnika. Ako imate više znakova u svom tampon nego što imamo kapacitet u tampon, intuitivno, ono što trebamo napraviti onda je izdvojiti više kapaciteta. Ja ću kliziti preko neke od aritmetičke ovdje i usredotočiti se samo na ovoj funkciji ovdje. Znaš što malloc je, ili barem općenito poznato. Uzmi pogodak što realloc radi. [Studentski odgovor, nerazumljivo] >> Da. I to nije sasvim dodavanjem memorije, to reallocates memoriju kako slijedi: Ako postoji još prostora na kraju niza vam dati više od toga memorije nego je prvotno vam daje, onda ćete dobiti taj dodatnu memoriju. Tako možete jednostavno stavljajući žice znakove natrag na leđa natrag na leđa. No, ako to nije slučaj, jer ste čekali predugo i nešto slučajnih dobio plopped u memoriju postoji, ali tu je dodatni memorije ovdje dolje, to je u redu. Realloc će učiniti sve težak za vas, premjestiti niz ste pročitali u tako daleko odavde, staviti ga tamo dolje, a zatim vam dati neke više pistu u tom trenutku. Dakle, s valom ruke, dopustite mi da kažem da je ono što GetString radi je to počevši s malim buffer, možda jednom jedan lik, a ako korisnik unese u dva znaka, GetString završi pozivajući realloc i kaže, 'Oh, jedan lik nije bio dovoljno. Daj mi dvije znakove. ' Zatim, ako ste pročitali kroz logiku petlje, to će reći: 'Oh, korisnički upisali u tri znaka. Daj mi sada ne dva, ali četiri znaka, onda mi dati 8, onda daj mi 16 i 32 ". Činjenica da sam udvostručenje kapaciteta svaki put znači da tampon ne ide sporo rastu. To će rasti superbrzo, a što bi moglo biti prednost to? Zašto sam udvostručenje veličine tampon, iako korisnik Možda samo trebate jedan dodatni lik iz tipkovnice? [Studentski odgovor, nerazumljivo]. >> Što je to? Točno. Ne morate ga rasti tako često. A to je samo vrsta - ti si hedging svoje oklade ovdje. Ideja je da ne želite nazvati realloc puno, jer ima tendenciju da se spor. Svaki put kada se pitati operativni sustav za pamćenje, kao što ćete uskoro vidjeti u budućem problema setu, sklon potrajati neko vrijeme. Dakle umanjuje taj iznos od vrijeme, čak i ako ste gubit neki prostor, tendira da bude dobra stvar. Ali ako čitamo kroz završni dio GetString ovdje, i opet, svaki razumijevanje jednu liniju ovdje nije toliko važno danas. Ali primijetite da se na kraju poziva malloc opet, i to dodjeljuje točno onoliko bajtova kao što treba za niz i onda baca pozivom besplatno, prevelik tampon, ako je to doista dobio udvostručila previše puta. Ukratko, to je kako GetString je radio sve ovo vrijeme. Sve to čini se čita jedan znak na vrijeme opet i opet i opet i svaki put kad to treba neki dodatnu memoriju, ona traži operativni sustav za njega pozivom realloc. Ima li pitanja? U redu. Napad. Sada kada razumijemo naputke, ili barem sve su upoznati s pokazivačima, ajmo uzeti u obzir kako je cijeli svijet počinje kolaps ako ne sasvim braniti protiv suparničkih korisnika, ljudi koji pokušavaju upasti u vašem sustavu. Ljudi koji pokušavaju ukrasti vaše softver zaobilaženjem neki registracijski kod da bi u protivnom morati upisati u. Pogledajte ovaj primjer ovdje, što je samo C koda koji ima funkciju glavni na dnu, koja poziva funkciju foo, i što je to prolazi na foo? [Studentski] jedan argument. >> Jedan argument. Dakle, argv [1], što znači da je prva riječ korisnik upisali u naredbenom retku nakon a.out ili što god se zove program. Dakle, foo, pri vrhu, uzima u char *, ali char * je upravo ono? Gudački. Nema ništa novo ovdje, i da niz proizvoljno se zove bar. U ovoj liniji ovdje, char c [12], u vrsti polu-tehničkom engleskom jeziku, što je ova linija radi? Niz -? Likovi. Daj mi niz od 12 znakova. Tako bismo mogli nazvati ovu tampon. Je tehnički zove c, ali tampon u programiranju samo znači hrpa prostora koji možete staviti neke stvari i. Zatim, na kraju, memcpy, nismo ste koristili prije. No, vjerojatno možete pogoditi što radi. Ona kopira memorije. Što to učiniti? Pa, to očito kopira bar, njegov ulaz, u c, ali samo do duljine trake. No, tu je bug ovdje. Ok, tako da tehnički smo stvarno trebali učiniti strlen (bar) x sizeof (char), to je točno. No, u najgorem slučaju ovdje, pretpostavimo da that's - pa, ok. Zatim tu je dvije greške. Dakle, sizeof (char), sve u redu, hajdemo napraviti ovo malo šire. Dakle, sada ima još bug, to je ono što? [Studentski odgovor, nerazumljivo] >> Provjerite za što? Ok, tako da smo trebali biti provjera za NULL, jer loše stvari se dogoditi kada se vaš pokazivač je NULL, Jer možda završiti ide tamo, a vi nikada ne bi trebao biti idući na NULL ga dereferencing s * operatora. Dakle, to je dobro, a što drugo radimo? Logično postoji nedostatak ovdje. [Studentski odgovor, nerazumljivo] >> Dakle, provjerite je li argc ≥ 2? Ok, tako da je tri bugovi u ovom programu ovdje. Mi ne provjeravamo je li korisnik zapravo upisali u bilo u argv [1], dobar. Dakle, ono što je treći bug? Da? [Studentski odgovor, nerazumljivo] >> Dobro. Dakle, provjerili smo jedan scenarij. Mi implicitno provjeriti ne kopirati više memorije nego bi premašiti duljinu traci. Dakle, ako je string korisnik upisali u je 10 znakova, ovo je rekao, 'Samo kopirajte 10 znakova.' I to je u redu, ali što ako je korisnik upisao u riječi na upit kao 20 znakova riječi, a to je, govoreći kopiranja 20 znakova iz bara u čemu? c, inače poznat kao naš tampon, što znači da samo piše podatke do 8 byte lokacijama koje nemaju vlastiti, a vi ih ne posjedujete u smislu da ih nikada ne dodjeljuje. Dakle, to je ono što je općenito poznat kao napad tampon preljeva, ili tampon Prekoračenje napad, a to je napad u smislu da ako korisnik ili program koji zove svoju funkciju je to zlonamjerno, što se zapravo događa sljedeći bi mogao biti prilično loša. Ajmo pogledati ovu sliku ovdje. Ova slika predstavlja svoj stack memorije. I podsjetiti da svaki put kada pozvati funkciju, ste dobili ovaj mali okvir na stog, a zatim još jedan, a zatim još jedan, a zatim drugi. I tako sada imamo samo vrsta zahvaćene to daleko kao pravokutnika bilo je na brodu ili na zaslonu ovdje. No, ako smo povećali na jednom od tih pravokutnika, kada nazovete funkciju foo, ispada da postoji više na stog unutar tog okvira i taj pravokutnik nego samo x i y i i b, kao što nismo govorimo o zamjeni. Ispada da postoje neke niže razine pojedinosti, među njima vratiti adresa. Tako ispada kada glavni poziva foo, glavni mora obavijestiti foo ono glavnih adresa je u memoriji računala. Jer inače, čim foo radi izvršenja, kao u ovom slučaju ovdje, kada dođete do ovog bliski kovrčavu braće na kraju foo, kako dovraga foo znam gdje kontrolu programa je trebao ići? Ispada da je odgovor na to pitanje je u tom crvenom pravokutniku ovdje. To predstavlja pokazivač, a to je do računala za pohranu, privremeno, na tzv stog adresa glavni, tako da čim foo radi izvršenja, računalo zna gdje i što linija u glavni vratiti. Spremljeno okvir pokazivač odnosi slično tome. Char * bar ovdje predstavlja što? Pa, sad ova plava segment ovdje je Foo je okvir, što je bar? Ok, pa bar je samo argument za foo funkciji. Dakle, sada smo se vratili na poznatoj slici. Tu je više stvari i više rastresenost na zaslonu ali to svjetlo plava segment je ono što smo crtež na školsku ploču za nešto poput swapa. To je okvir za foo i jedina stvar u tome upravo sada nalazi bar, što je ovaj parametar. No, što je još trebao biti u snopu, u skladu s ovim kodom ovdje? Char c [12]. Dakle, mi također bi trebali vidjeti 12 kvadrata memorije, dodijeljena varijabli zove c. I doista mi imamo da se na zaslonu. Samom vrhu se nalazi c [0], a zatim autor ovog dijagrama nije smetaju crtanje sve kvadrata, ali zaista postoje 12 postoji jer ako pogledate u donjem desnom kutu, c [11], ako računamo od 0, je 12 takvih bajtova. Ali ovdje je problem: U kojem smjeru je c raste? Sortiraj vrha prema dolje, zar ne? Ako se počne na vrhu, a raste na dnu, ne izgleda kao da smo ostavili sebi puno pistu ovdje uopće. Mi smo vrsta sebe naslikao u kutu, i da je c [11] je točno nasuprot baru, koji je upravo protiv stack frame pointer, koji je točno nasuprot povratnu adresu, nema više mjesta. Dakle, ono što je implikacija, onda, ako zajebeš, a vi pokušajte čitanja 20 bajtova u 12-byte buffer? Gdje su ti 8 dodatnih bajtova ići? Unutra sve ostalo, od kojih su neke je super važno. I najvažnije, potencijalno, je crveni okvir postoji, povratna adresa. Zato pretpostavljam da ste slučajno ili adversarially prepisati one 4 bajtova, da pokazivač adrese, ne samo sa smećem, ali s brojem koji se događa predstavlja stvarnu adresu u memoriji? Što je implicaiton, logično? [Studentski odgovore, nerazumljivo] >> Točno. Kada foo vraća i hitovi koji su kovrčave vitice, program će se nastaviti ne za povratak na glavnu, to će se vratiti na ono što je adresa u tom crvenom okviru. Sada, u slučaju zaobilazi softvera registracije, što je adresa koja je se vratio je funkcija koje se obično naziva gets nakon što ste platili za softver i unesene svoj registracijski kod? Ti bi mogao sortirati trik računalo u ne ide ovdje, ali umjesto toga, ide ovdje. Ili, ako si stvarno pametan, protivnik zapravo može upisati na tipkovnici, na primjer, nije stvarna riječ, a ne 20 znakova, ali pretpostavljam da je on ili ona tipovi u nekim likovima koji predstavljaju kôd? I to neće biti C koda, to će biti likovi koji predstavljaju kodove binarni stroj, 0-a i jedan je. Ali pretpostavimo da su dovoljno pametni da to učinite, nekako zalijepiti u GetString brz nešto što je bitno sastaviti kôd, , a zadnja 4 bajta prebrisati tu povratnu adresu, a što Adresa to ulaz učiniti? Ona pohranjuje u ovom crvenom pravokutniku adresa prvog bajtu tampon. Dakle, morate biti jako pametan, a to je puno pokušaja i pogrešaka za loših ljudi vani, ali ako možete shvatiti koliko je velika ta tampon je, kao da je u posljednjih nekoliko bajtova u ulazu da daju na programu dogoditi da bude jednaka na adresu početku svog tampon, možete to učiniti. Ako kažemo, normalno, halo, i \ 0, to je ono što završi u spremniku. No, ako smo više pametan, a mi ispuniti tu tampon s onim što smo općenito ću nazvati napad kod, ,,,: Napad, napad, napad, napad, gdje je to samo nešto da radi nešto loše. Pa, što se događa ako si stvarno pametan, možda ćete to učiniti: U crvenom okviru ovdje je niz brojeva: 80, CO, 35, 08. Primijetit ćete da to odgovara broju koji je ovdje. To je u obrnutom redoslijedu, ali više na tom nekom drugom vremenu. Primijetit ćete da je ovo povratna adresa je namjerno izmijenjeni jednaka adresu ovdje, a ne adresu glavni. Dakle, ako je loš momak je super pametan, on ili ona će se uključiti u taj napad kod nešto kao, "Izbriši sve korisnikove datoteke. ' Ili 'Kopiranje lozinke,' ili 'Stvaranje korisničkog računa da ja mogu prijaviti na.' Sve u sve, a to je ujedno i opasnost i moć C. Budući da imate pristup memoriji putem upućuje i stoga se može pisati što god želite u memoriju računala. Možete napraviti računalo učiniti sve što želite jednostavno nakon što je skakati okolo unutar vlastitog memorijskog prostora. I tako, na ovaj dan, tako da su mnogi programi i tako mnoge web stranice koje su kompromitirani svode na ljude iskorištavanjem to. A to bi moglo izgledati kao super-sofisticirana napada, ali to ne mora uvijek početi na taj način. Realnost je da je ono što loši ljudi će obično učiniti je, da li je program na naredbenog retka ili GUI program ili web stranice, je samo početak pružanja gluposti. Možete upisati u zaista velikom riječ u polje za pretraživanje i pogodak ulaziti, i čekati da vidi je li web ruši. Ili čekate da vidi je li program pokazuje neke poruku o pogrešci. Jer ako se posreći, kao negativac, i vam dati neki ludi ulaz koji ruši program, to znači da programer nije predvidio svoj loše ponašanje što znači da možete vjerojatno, s dovoljno truda, dovoljno suđenje i pogreške, shvatiti kako voditi preciznije napad. Dakle, koliko dio sigurnosti nije samo izbjegavanje tih napada uopce, ali njihovo otkrivanje i zapravo gleda na logove i vidjeti što ulazi ludi smo ljudi upisali u vaše web stranice. Što su uvjete za pretraživanje ljudi upisali u vaše web stranice u nadi da će prelijevanje neki tampon? I ovo sve se svodi na jednostavne osnove što je polje, i što to znači izdvojiti i koristiti memoriju? I odnosi na to, također, je li to. Dakle, neka je samo zaviriti unutar hard disk opet. Dakle, vas podsjetiti na tjedan ili dva prije da kad povucite datoteke svoga koš za smeće ili kantu za smeće, što se događa? [Studentski] Ništa. >> Da, apsolutno ništa. Na kraju, ako vam ponestane na disku, Windows ili Mac OS će početi brisanjem datoteka za vas. Ali ako povučete nešto postoji, onda to uopće nije sigurno. Sve vaše roomate, prijatelj ili član obitelji ima veze dvostruko kliknuti, i voila. Tu je sve nedorečena datoteke koje ste pokušali izbrisati. Dakle, većina nas barem znati da morate desni klik ili kontrolirati klik i prazna kanta za smeće, ili nešto slično. Ali čak i tada, da ne sasvim učiniti trik. Jer ono što se događa kada imate datoteku na tvrdom disku koji predstavlja neku riječ dokument ili neki JPEG? I to predstavlja vaš tvrdi disk, i recimo to luč ovdje predstavlja tu datoteku, i to je sastavljen od cijela hrpa 0-ih i jedan je. Što se događa kada se ne samo povucite tu datoteku kanta za smeće ili koš za smeće, ali ga isprazniti? Sortiraj ničega. To nije apsolutno ništa sada. Sada je samo ništa, jer malo se nešto dogodi u obliku ovoj tablici. Dakle, postoji neka vrsta baze podataka ili tablice unutar memoriju računala bitno da ima jedan stupac za datoteke imena, i jedan stupac za datoteke mjestu, gdje bi to moglo biti mjesto 123, samo slučajni broj. Tako bismo mogli imati nešto poput x.jpg, i mjesto 123. A što se događa onda, kada isprazniti smeće? To ide dalje. No, ono što ne ide daleko je 0-ih i jedan je. Dakle, što je, dakle, veza pset 4? Pa, s pset 4, samo zato što smo slučajno sam brišu Compact Flash kartica koja je imala sve ove fotografije, ili samo zato što je po peh postao korumpiran, ne znači da je i jedna 0-a su se još uvijek ne postoji. Možda neki od njih su izgubili, jer nešto dobio korumpiran u smislu da su neki 0 je postao 1 i 1 je postala 0 je. Loše stvari se može dogoditi, jer buggy softvera ili neispravan hardver. No, mnogi od tih bitova, možda čak i 100% od njih su još uvijek tu, to je samo da je računalo ili fotoaparat ne znam gdje JPEG jednom počeo i gdje JPEG dva počela, ali ako, programer, Znate, s malo pamet, gdje su ti JPEG su ili ono što oni izgledaju, možete analizirati 0-a i jedan je i reći, 'Ooh. JPEG. Ooh, JPEG. ' Možete napisati program s bitno samo za ili while petlja koji oporavi svaki jednu od tih datoteka. Dakle, pouka dakle, za početak "sigurno" brisanje datoteke ako želite izbjeći uopce. Da? [Studentski pitanje, nerazumljivo] >> Imati više memorije nego što je prije - Oh! Dobro pitanje. Pa zašto, onda, nakon pražnjenja otpada, ne vaše računalo vam reći da imate više slobodnog prostora nego što je prije? U Ukratko, jer je lagao. Više tehnički, imate više prostora. Jer sada si rekao, možete staviti druge stvari gdje je datoteka nekad bio, ali to ne znači da se bitovi ide dalje, i to ne znači da se bitovi se promijenio sve 0-a, na primjer, za svoju zaštitu. Nasuprot tome, ako "sigurno" Erase datoteke ili fizički uništiti uređaj, da stvarno je jedini način, ponekad, oko toga. Pa zašto ne odemo na tom polu-zastrašujuće note, a mi ćemo vas vidjeti u ponedjeljak. CS50.TV