[Powered by Google Translate] [Viikko 5] [David J. Malan - Harvardin yliopisto] [Tämä on CS50. - CS50.TV] Tämä on CS50, Viikko 5. Tänään ja tällä viikolla esittelemme hieman maailman Forensics yhteydessä Harjoitus 4. Tänään on lyhennetty luento, koska siellä on erityinen tapahtuma täällä jälkeenpäin. Joten me kurkistaa ja kammata sekä opiskelijoiden ja heidän vanhemmilleen tänään joitakin asioita, jotka ovat näköpiirissä. Niistä, kuten maanantaina, sinulla on muutama enemmän luokkatoverit. EDX, Harvardin ja MIT: n uusi online aloite OpenCourseWare ja enemmän, käynnistää on Harvardin kampuksella maanantaina, mikä tarkoittaa tulevat maanantai sinulla on, koska viime count, 86000 ylimääräisiä luokkakaverit joka tulee sen jälkeen yhdessä CS50 luentoja ja osat ja walkthroughs ja ongelma sarjaa. Ja osana tätä, sinun tulee jäseniä avajais luokan CS50 ja nyt CS50x. Osana tätä nyt, ymmärtää, että siellä on joitakin upsides samoin. Saada valmis tähän, sillä valtava määrä opiskelijoita, on riittävää todeta, että vaikka meillä on 108 TF ja CAS, se ei ole aivan paras oppilas-opettaja-suhde, kun osuimme 80.000 opiskelijaa. Emme aio olla luokittelu niin monta ongelmaa asettaa manuaalisesti, joten käyttöön tällä viikolla Harjoitus on CS50 Tarkista, joka tulee olemaan komentoriviapuohjelman sisällä laitteen että saat kun päivittää myöhemmin tänä viikonloppuna. Pystyt ajaa komennon, check50, omalla PSET, ja saat välitöntä palautetta siitä, onko ohjelma oikea tai väärä mukaan eri eritelmät, jotka olemme antaneet. Lisää, että ongelma asetettu vaatimuksia. CS50x luokkatoverit tulee käyttämään tätä samoin. Harjoitus 4 on kyse Forensics, ja tämä PSET oli todella innoittamana joitakin tosielämän tavaraa jolloin kun olin tutkijakoulussa I turvasäilöön hetkeksi kanssa Middlesex County syyttäjän toimisto tekee oikeuslääketieteen työtä niiden lyijyä oikeuslääketieteen tutkija. Mitä tämä oli, niin kuin luulen mainitsin muutama viikko aiemmin, on Mass valtiollinen poliisi tai muut tulevat, he pudota pois asioita, kuten kiintolevyjen ja CD-levyjä ja levykkeitä ja vastaavia, ja sitten tavoitteena Forensics toimisto oli selvittää oliko vai ei todisteita jonkinlaisia. Tämä oli Special Investigations yksikkö, joten se oli valkokaulusrikollisuuden. Se oli enemmän huolestuttavia tavallaan rikoksia, mitään mukana jonkinlainen digitaalisen median. On käynyt ilmi, että ei ole, että monet ihmiset kirjoittavat sähköpostia sanomalla "Minä tein sen." Niin usein nämä oikeuslääketieteen haut eivät nosta kovin paljon hedelmää, mutta joskus ihmiset kirjoittavat tällaisia ​​sähköposteja. Joten joskus, ponnistelut palkittiin. Mutta johtaa jopa tämän oikeuslääketieteen PSET, me voidaan ottaa käyttöön vuonna pset4 vähän grafiikkaa. Olet luultavasti ottaa näitä asioita itsestäänselvyyksinä - JPEG, GIF, ja kuten - näinä päivinä. Mutta jos todella miettiä sitä, kuva, aivan kuten Rob kasvot, voitaisiin mallintaa sekvenssi pisteitä tai pikseliä. Tapauksessa Rob kasvot, siellä on kaikenlaisia ​​värejä, ja aloimme nähdä yksittäisiä pisteitä, muuten kutsutaan pikseliä, Kun aloimme Lähennä Mutta jos me yksinkertaistaa maailmaa hieman ja sanoa, että tämä tässä on Rob musta ja valkoinen, edustaa mustaa ja valkoista, voimme vain käyttää binääri. Ja jos aiomme käyttää binääri, 1 tai 0, voimme ilmaista tämän saman kuvan Rob on hymyilevät kasvot tämän kuvion bittiä. 11000011 edustaa valkoinen, valkoinen, musta, musta, musta, musta, valkoinen, valkoinen. Ja niin se ei ole valtava harppaus sitten alkaa puhua värikkäitä valokuvia, asioita, joita haluat nähdä Facebookissa tai ottaa digitaalikameralla. Mutta varmasti kun se tulee väriä, tarvitset enemmän bittejä. Ja varsin yleisiä maailmassa valokuvat on käyttää ei 1-bittiset värit, koska tämä viittaa siihen, mutta 24-bittiset värit, jossa voit itse saada miljoonia värejä. Joten kuten kun zoomataan Rob silmään, , joka oli mikä tahansa määrä miljoonia erilaisia ​​värikkäitä mahdollisuuksia. Joten me esitellä tämän Harjoitus 4 sekä esittely, joka on tänään klo 3:30 sijasta tavallista 2:30 koska perjantain luento täällä. Mutta video on verkossa normaalisti huomenna. Otamme myös esitellä sinut toiseen tiedostomuotoon. Tämä on tarkoituksella tarkoitus tarkastella uhkaava aluksi, mutta tämä on vain joitakin asiakirjoja C struct. On käynyt ilmi, että Microsoft vuotta sitten auttoi kansantajuistaa tätä muotoa kutsutaan bitmap tiedostomuoto, bmp, ja tämä oli erittäin yksinkertainen, värikäs graafinen tiedostomuoto että on käytetty jo jonkin aikaa ja joskus vielä tapetteja pöydälle. Jos luulet takaisin Windows XP ja mäkiä ja sininen taivas, että oli tyypillisesti bmp tai bittikarttakuvana. Bittikartat ovat hauskoja meille, koska heillä on hieman enemmän monimutkaisuutta. Se ei ole aivan niin yksinkertaista kuin tämä ruudukko 0s ja 1s. Sen sijaan sinulla asioita, kuten otsikon alussa tiedoston. Eli toisin sanoen, sisällä. Bmp tiedosto on koko joukko 0s ja 1s, mutta siellä on joitakin ylimääräisiä 0s ja 1s siellä. Ja näyttää siltä, ​​että mitä olemme ehkä itsestäänselvyys jo vuosia - tiedostomuotoja kuten. doc tai. xls tai. mp3,. mp4 riippumatta tiedostomuodot että olet perehtynyt - mitä se edes tarkoittaa olla tiedostomuotoon, koska loppujen lopuksi kaikki nämä tiedostot käytämme on vain 0 ja 1s. Ja ehkä nuo 0s ja 1s edustavat ABC kautta ASCII tai vastaava, mutta loppujen lopuksi, se on silti vain 0s ja 1s. Joten ihmiset vain satunnaisesti päättää keksiä uusi tiedostomuoto jossa he standardoida mitä malleja bittien todella tarkoittaa. Ja tässä tapauksessa tänne, ihmiset, jotka on suunniteltu bitmap tiedostomuoto sanoi, että aivan ensimmäinen tavu bittikarttatiedostoa, kuten merkitään offset 0 siellä, siellä tulee olemaan joitakin arvoituksellisesti nimetty muuttuja nimeltä bfType, joka vain seisoo varten bittikarttatiedostoa tyyppi, millaista bittikarttana tätä. Voit päätellä ehkä toisen rivin offset 2, tavu numero 2, on kuvio 0s ja 1s joka edustaa mitä? Koko jotain. Ja se menee sieltä. Joten Harjoitus 4, voit kävellä läpi joitakin näistä asioista. Emme lopulta välittänyt niitä kaikkia. Mutta huomaa se alkaa saada mielenkiintoisia ympäri tavu 54: rgbtBlue, vihreä ja punainen. Jos olet koskaan kuullut lyhenne RGB - punainen, vihreä, sininen - tämä on viittaus kyseiseen koska se kääntyy pois, voit maalata kaikki sateenkaaren värit joidenkin yhdistelmä punainen ja sininen ja vihreä. Ja itse asiassa, vanhempien huoneessa voi muistaa joitakin pian projektorit. Nykyään voit vain nähdä yksi kirkkaan valon tulevan ulos linssin, mutta takaisin päivä sinulla oli punainen linssi, sininen linssi ja vihreä linssi, ja yhdessä ne pyritään näyttö ja muodostunut värikäs kuva. Ja melko usein, yläasteen ja lukion olisi nuo linssit koskaan niin hieman vinossa, joten olimme tavallaan nähdä kaksin-tai kolminkertainen kuvia. Mutta se oli ajatus. Sinulla oli punainen ja vihreä ja sininen valo maalaus kuvaa. Ja että samaa periaatetta käytetään tietokoneita. Joten joukossa haasteita niin sinulle Harjoitus 4 tulevat olemaan muutamia asioita. Yksi on todella muuttaa kuvan ryhtyä rakenteessa 0s ja 1s, selvittää, mitkä paloina 0s ja 1s edustavat mitä rakenteessa näin, ja sitten selvittää, miten toistaa pixels - punaiset, siniset, vihreät - sisällä siten, että kun kuva näyttää tämän aluksi, Se voisi näyttää tältä sijaan jälkeen. Niistä muista haasteista myös tulee olemaan, että sinun on luovutettava rikosteknisen kuva on todellinen tiedoston digitaalikamerasta. Ja se kamera, Olipa kerran, oli koko joukko kuvia. Ongelma on meillä vahingossa poistetaan tai on ollut kuvan vioittunut jotenkin. Bad Things Happen digitaalikameroissa. Ja niin me nopeasti kopioida kaikki 0s ja 1s pois tuosta kortin sinulle, pelasti heidät kaikki yhteen iso tiedosto, ja sitten me ojentaa ne sinulle Harjoitus 4 jotta voit kirjoittaa ohjelman C, joka palauttaa kaikki ne JPEG, mieluiten. Ja näyttää siltä, ​​että JPEG, vaikka he jokseenkin monimutkainen tiedostomuoto - ne ovat paljon monimutkaisempia kuin tämä hymyilevät kasvot täällä - käy ilmi, että jokainen JPEG alkaa saman malleja 0s ja 1s. Joten käyttäen, lopulta, kun silmukan tai for-silmukka tai vastaava, voit toistaa kaikkia 0s ja 1s tässä oikeuslääketieteen kuva, ja joka kerta näet erityinen kuvio, joka on määritelty Harjoitus erittely, Voit olettaa tässä, hyvin suurella todennäköisyydellä, alku JPEG. Ja heti kun löytää sama kuvio joidenkin tavujen tai kilotavua tai megatavua uudempi, voit olettaa tässä on toinen JPEG, kuvan otin ensimmäisen jälkeen. Saanen lopettaa lukemisen että ensimmäistä tiedostoa, kirjoita tähän uuteen, ja tuotoksen teidän ohjelman pset4 tulee olemaan jopa 50 JPEG. Ja jos se ei ole 50 JPEG, sinulla on vähän silmukan. Jos sinulla on ääretön määrä JPEG, sinulla on ääretön silmukka. Niin sekin on melko yhteinen asia. Niin, että mitä horisontissa. Quiz 0 takanamme, ymmärtää kohti minun email poikkeuksetta olemassa ihmisiä, jotka ovat molemmat tyytyväisiä, tavallaan neutraalia, ja surullinen noin tietovisa 0 kertaa. Ja älä tavoittaa minua, pää TF Zamyla, oma TF, tai yksi varmenteiden että tiedät, jos haluat keskustella siitä, miten asiat menivät. Joten vaikutuksen vanhemmille tässä huoneessa, mikä on CS50 kirjastoon? [Naurua] Hyvää työtä. Mikä CS50 kirjastoon? Joo. >> [Opiskelija] Se ennalta kirjoitetun joukko koodi [kuulumattomissa] Okei, hyvä. Se on ennalta kirjoitetun joukko koodin että henkilöstö kirjoitti tarjoamme sinulle, joka tarjoaa joitakin yhteisiä toimintoja, juttuja saada minut merkkijono, saa minua int - kaikki toiminnot, jotka on lueteltu tässä. Alkaa nyt, alamme todella nämä apupyörät pois. Aiomme aloittaa viedä merkkijono teiltä, mikä Recall oli vain synonyymi mitä todellinen tietotyypin? >> [Useita opiskelijoita] Char *. Char *. Vanhemmille, joka oli luultavasti [tekee whooshing ääni]. Se on hyvä. Char * aloitamme nähdä ruudulla sitäkin me poistaa merkkijonon sanastosta, ainakin kun se tulee todella kirjoittaa koodia. Samoin me lopeta jotkut näistä toimii paljon koska meidän ohjelmat menevät kehittyneempiä. Sen sijaan vain kirjoittaa ohjelmia, jotka istuvat siellä nopeasti vilkkuva, odottaa käyttäjä kirjoittaa jotain, saatte tuloja muualta. Esimerkiksi, saat ne sarjan bittiä paikalliselle kiintolevylle. Sinä sen sijaan saada heidät tulevaisuudessa verkkoyhteyden, joitakin verkkosivuilla jonnekin. Joten Taitat tämän kerroksen ensimmäisen kerran ja vedä ylös CS50 Appliance ja tämä tiedosto nimeltä cs50.h, joihin sinulla on # lukien viikkoja, mutta katsotaanpa itse nähdä mitä on sisällä tämän. Tiedoston alkuun sinisellä on vain koko joukko kommentit: takuutietoja ja lisensointi. Tämä on eräänlainen yhteinen paradigma ohjelmisto koska paljon ohjelmistoja näinä päivinä on mitä kutsutaan avoimen lähdekoodin, mikä tarkoittaa, että joku on kirjoittanut koodin ja teki vapaasti saatavilla ei vain ajaa ja käyttää, mutta itse lukenut ja muuttaa ja integroida omaan työhön. Niin, että mitä olet käyttänyt, avoimen lähdekoodin ohjelmistoja, vaikkakin hyvin pienikokoinen. Jos minä selaa ohi kommentit kuitenkin aloitamme nähdä joitakin tuttuja asioita. Ilmoitus huipulla tässä, että cs50.h tiedosto sisältää koko joukko header-tiedostot. Useimmat näistä, emme ole ennen nähneet, mutta yksi on tuttu. Mitkä näistä olemme nähneet, vaikkakin lyhyesti, tähän mennessä? >> [Opiskelija] Vakio kirjastoon. Joo, vakio kirjasto. stdlib.h on malloc. Kun aloimme puhua dynaamisen muistin jakamista, jonka tulemme takaisin ensi viikolla samoin, aloitimme mukaan lukien tiedoston. On käynyt ilmi, että bool ja tosi ja epätosi eivät todellisuudessa olemassa C sinänsä ellet sisällyttää tämän tiedoston täällä. Olemme jo viikkoja ollut lukien stdbool.h jotta voit käyttää käsitettä bool, tosi tai epätosi. Ilman tätä, sinun pitäisi lajitella väärennettyjä ja käyttää int ja vain mielivaltaisesti olettaa, että 0 on epätosi ja 1 on tosi. Jos me selaa edelleen, tässä on meidän määritelmä merkkijono. On käynyt ilmi, kuten olemme sanoneet, että jos tämä tähti on, ei ole väliä. Voit jopa tilaa ympäri. Olemme tällä lukukaudella on edistää sitä, koska se selventää että tähti on tekemistä tyyppi, mutta ymmärtää yhtä yleistä, jos ei hieman yleisempää, on laittaa se sinne, mutta toiminnallisesti se on sama asia. Mutta nyt jos luemme alas entisestään, katsotaanpa katsomaan GetInt koska käytimme että ehkä ennen kuin mitään muuta tällä lukukaudella. Tässä on GetInt. Tämä on mitä? >> [Opiskelija] prototyyppi. >> Tämä on vain prototyyppi. Usein olemme tehneet prototyyppien yläosien meidän. C-tiedostoja, mutta voit myös laittaa prototyyppejä header-tiedostoja,. h tiedostoja, kuten tämä täällä niin että kun kirjoittaa joitakin toimintoja, jotka haluat muut ihmiset voivat käyttää, joka on täsmälleen asianlaita CS50 kirjasto, et vain toteuttaa omia toimintoja jotain cs50.c, voit myös laittaa prototyyppejä ei yläreunassa tiedoston, mutta yläosassa otsikkotiedoston. Sitten se header tiedosto on mitä ystävät ja kollegat ovat kanssa # sisällyttää omiin koodin. Joten kaiken tämän ajan, olet myös kaikki nämä prototyyppejä, tehokkaasti yläreunassa tiedoston mutta miten tästä # include mekanismi, joka olennaisesti kopiot ja pastat tämä tiedosto omaan. Tässä on muutamia varsin yksityiskohtaiset ohjeet. Olemme melko itsestään selvänä, että GetInt saa int- mutta se osoittautuu joitakin rajatapauksissa. Entä jos käyttäjä tyypit ja määrä on aivan liian suuri, quintillion, että vain ei mahdu sisälle int? Mikä on odotettu käytös? Ihannetapauksessa se on ennustettavissa. Eli tässä tapauksessa, jos olet itse lukenut sakon tulostaa, voit itse nähdä, että jos rataa ei voi lukea, tämä palaa INT_MAX. Emme ole koskaan puhuneet tästä, mutta perustuen arvo, mitä se luultavasti? [Opiskelija] vakiona. >> Se vakio. On joitakin erityisiä vakio, joka on luultavasti ilmoitettu johonkin näistä header-tiedostot Se on jopa suurempi tiedosto ja INT_MAX on luultavasti jotain noin 2 miljardia Ajatuksena on, että koska meidän jotenkin merkiksi, että jotain meni pieleen, me, kyllä, on 4000000000 numerot käytössämme: -2 miljardia jopa 2 miljardia, antaa tai ottaa. No, mikä on yleinen ohjelmointi on sinun varastaa vain yksi noita numeroita, ehkä 0, ehkä 2 miljardia ehkä -2000000000, joten voit viettää joku mahdollisista arvoista, jotta voit sitoutua maailmalle että jos jokin menee pieleen, palaan tähän super iso arvo. Mutta et halua käyttäjän kirjoittaa jotain arvoituksellinen kuin 234 ..., todella iso määrä. Sinä yleistää sen sijaan kuin vakiona. Siis todella, jos olisit on anaali viime viikkoina tahansa soitit GetInt, sinun olisi pitänyt tarkkailun jos ehto ei käyttäjän kirjoita INT_MAX, tai tarkemmin, ei GetInt paluu INT_MAX, koska jos se ei, että oikeastaan ​​tarkoittaa, että he eivät kirjoita sitä. Jokin meni pieleen tässä asiassa. Joten tämä on mitä yleisesti kutsutaan sentinel arvo, mikä tarkoittaa vain erityistä. Katsotaanpa nyt muuttuu. C tiedosto. C tiedosto on olemassa laitetta jonkin aikaa. Ja itse asiassa, laite on sen valmiiksi koottu sinut että asia vaadimme konekielisessä mutta se vain ei ole väliä missä se on, koska järjestelmä tietää Tässä tapauksessa se on: laite. Katsotaanpa selaa nyt GetInt ja nähdä miten GetInt on työskennellyt koko ajan. Täällä meillä on samankaltaisia ​​kommentteja ennen. Saanen suurentaa vain koodin osaa. Ja mitä olemme GetInt on seuraava. Siinä ei tulo. Se palauttaa int, while (true), joten meillä on tahallinen loputon silmukka, mutta oletettavasti me eroon tästä jotenkin tai palaa tämän. Katsotaanpa, miten tämä toimii. Meidän näyttävät käyttävän GetString tätä ensimmäisellä rivillä sisällä silmukan, 166. Tämä on nyt hyvä käytäntö, koska, missä olosuhteissa voisi GetString palata erikois NULL? >> [Opiskelija] Jos jokin menee pieleen. Jos jokin menee pieleen. Ja mikä voisi mennä pieleen, kun soitat jotain GetString? Joo. >> [Opiskelija] malloc ei anna sitä ints. Joo. Ehkä malloc epäonnistuu. Jossain alla huppu, GetString kutsuu malloc, joka allokoi muistia, jonka avulla tietokone tallentaa kaikki merkit että käyttäjän tyypit osaksi näppäimistö. Ja olettaa käyttäjän oli paljon vapaa-aikaa ja kirjoittanut enemmän esimerkiksi yli 2 miljardia merkkiä, enemmän merkkejä kuin tietokoneessa on jopa RAM. GetString on voitava merkiksi siitä, että teille. Vaikka tämä on super, super harvinaista kulma tapauksessa, se on jotenkin pystyä käsittelemään tätä, ja niin GetString, jos menimme takaisin ja lukea sen dokumentointi, itse asiassa paluuta NULL. Joten nyt jos GetString epäonnistuu palauttamalla NULL, GetInt on menossa epäonnistua palauttamalla INT_MAX aivan kuten sentinel. Nämä ovat vain ihmisen yleissopimukset. Ainoa tapa sinun pitäisi tietää tämä on asia lukemalla dokumentaation. Katsotaanpa selaa missä int todella saanut. Jos minä selaa hieman pidemmälle, linjassa 170, meillä kommentin yläpuolella näitä rivejä. Me julistamme 172 int, n, ja char, c, ja sitten tämä uusi toiminto, jonka jotkut teistä ovat törmänneet aiemmin, sscanf. Tämä tarkoittaa merkkijonoa scanf. Toisin sanoen, anna minulle merkkijono, ja aion tarkistaa sen palaset kiinnostavia tietoja. Mitä se tarkoittaa? Oletetaan, että minä kirjoita, kirjaimellisesti, 123-näppäimistö ja paina sitten Enter. Mikä on tietotyyppi 123 kun palauttamat GetString? >> [Opiskelija] String. Se on tietysti merkkijono, eikö? Sain merkkijono. Eli 123 on todella, lainaus-lainaus päättyy, 123 \ 0 lopussa se. Tämä ei ole int. Se ei ole numero. Se näyttää useita, mutta se ei ole oikeastaan. Joten mitä GetInt pitää tehdä? Se on skannata merkkijonon vasemmalta oikealle - 123 \ 0 - ja jotenkin muuntaa todellinen kokonaisluku. Voisit selvittää, miten tehdä tämä. Jos muistelen pset2, sinulla luultavasti sai vähän mukava Caesar tai Vigenere, joten voit toistaa yli merkkijono, voit muuntaa merkkiä ja ints. Mutta pahus, se on paljon työtä. Miksi ei kutsua toimivat kuten sscanf joka tekee sen puolestasi? Joten sscanf odottaa argumentti - tässä tapauksessa kutsutaan linja, joka on merkkijono. Olet määritä lainausmerkkeihin, hyvin samankaltainen kuin printf, mitä odottaa tältä merkkijono. Ja mitä minä sanon tässä on minun odottaa desimaaliluvun ja ehkä luonne. Ja näemme, miksi näin on vain hetken. Ja näyttää siltä, ​​että tämä merkintätapa on nyt muistuttaa kamaa aloimme puhua hieman yli viikko sitten. Mikä on & n ja & C tekee meille täällä? >> [Opiskelija] osoite n ja osoite c. Joo. Se antaa minulle osoite n ja osoite c. Miksi on niin tärkeää? Tiedät, että toimii C, voit aina palauttaa arvon tai lainkaan arvoa. Voit palauttaa int, string, float, char, mitä, tai voit palauttaa void- mutta voit vain palauttaa yksi asia maksimaalisesti. Mutta tässä me haluamme sscanf palauttaa minulle ehkä int, desimaaliluku, ja myös char, ja selitän miksi nieriää hetki. Voit tehokkaasti haluavat sscanf palata kaksi asiaa, mutta se ei vain ole mahdollista C. Voit kiertää viemällä kaksi osoitetta koska heti kun käsin tehtävä kaksi osoitetta, mitä tämä tehtävä tehdä niille? >> [Opiskelija] Kirjoita osoitteet. Se voi kirjoittaa osoitteet. Voit käyttää tähti toimintaa ja mennä sinne, jokainen näistä osoitteista. Se on eräänlainen tämän takaoven mekanismi, mutta hyvin tavallista muuttaa muuttujien arvot enemmän kuin vain yksi paikka - tässä tapauksessa kaksi. Nyt huomaa olen tarkistanut == 1 ja palaavat sitten n jos näin ei itse asiassa arvioi totta. Joten mitä on tekeillä? Teknisesti kaikki haluamme todella tapahtua GetInt on tässä. Haluamme jäsentää, niin sanoakseni, haluamme lukea merkkijono - lainaus-lainaus päättyy 123 - ja jos se näyttää siellä useita siellä, mitä me kerromme sscanf tehdä laitetaan että numero - 123 - Tämän muuttujan n minulle. Miksi sitten minä oikeastaan ​​tämän samoin? Mikä on rooli sscanf sanomalla saatat myös saada hahmo täällä? [Äänetön opiskelija vastausta] >> desimaalipilkun todella toimisi. Katsotaanpa katsonut, että mietti hetken. Mitä muuta? [Opiskelija] Voisi olla NULL. >> Hyvä ajatus. Se voisi olla nollamerkki. Se on oikeastaan ​​ole tässä tapauksessa. Joo. >> [Opiskelija] ASCII. ASCII. Tai haluan yleistää entisestään. % C on vain Virheentarkistus. Me emme halua olla merkki jälkeen numero, mutta mitä tämä antaa minulle mahdollisuuden tehdä seuraavalla. On käynyt ilmi, että sscanf lisäksi tallentamiseen arvot N ja C tässä esimerkissä täällä Mitä se tekee on se palauttaa muuttujien määrä sen laittaa arvot tuumaa Joten jos vain kirjoitat 123, vain% d menee vastaamaan, ja vain n saa tallennettu arvo, kuten 123, ja mitään ei otettu c. C pysyy roskat arvo, niin sanoakseni - roskat koska se ei ole koskaan alustetaan jotain arvoa. Joten siinä tapauksessa, sscanf palauttaa 1 koska olen asuttu 1 näiden osoittimia, jolloin suuri, minulla int joten vapauttaa linjan vapauttaa muistia että GetString todellisuudessa varattu, ja sitten palaan n, if Oletko koskaan miettinyt minne se Uudelleen ilmoitus tulee, se tulee täällä. Joten jos sen sijaan, minä kirjoita 123foo - vain joitakin satunnaisia ​​järjestyksessä tekstiä - sscanf tulee nähdä numero, numero, numero, f, ja se tulee laittaa 123 N, se tulee laittaa F c ja palata sitten 2. Joten meillä on vain käyttää perusmääritelmää sscanf käyttäytymistä, hyvin yksinkertaisella tavalla - hyvin monimutkaisia ​​ensi silmäyksellä, mutta loppujen lopuksi melko yksinkertainen mekanismi - sanoa onko int ja jos niin on, että ainoa asia, löysin? Ja välilyönnit tässä on tahallista. Jos luet asiakirjat sscanf, se kertoo sinulle, että jos kuuluu pala whitespace alussa tai lopussa, sscanf liian sallii käyttäjän, mistä tahansa syystä, lyödä välilyönti 123 ja se tulee olemaan oikeutettu. Et huuda käyttäjä vain koska ne välilyöntiä alussa tai lopussa, mikä on vain hieman käyttäjäystävällinen. Kaikki kysymykset sitten GetInt? Joo. >> [Opiskelija] Mitä jos vain laittaa char? Hyvä kysymys. Mitä jos vain kirjoitetaan char kuten f ja paina Enter koskaan kirjoittaa 123? Mitä mieltä olette käytöksen koodirivin olisi sitten? [Äänetön opiskelija vastausta] Niin, joten sscanf voi kattaa että liian koska siinä tapauksessa, se ei tule täyttää n tai c. Se tulee sen sijaan palauttaa 0, jolloin olen myös kiinni siitä, että skenaario koska odotusarvo haluan on 1. Haluan vain yksi ja vain yksi asia täytettäväksi. Hyvä kysymys. Muut? Selvä. Älkäämme käydä läpi kaikki toiminnot tänne, mutta joka näyttää olevan kenties jäljellä korko on GetString koska näyttää siltä, ​​että GetFloat, GetInt, GetDouble, GetLongLong kaikki punt paljon niiden toiminnallisuutta GetString. Joten katsomaan kuinka hän on toteutettu täällä. Tämä näyttää hieman monimutkainen, mutta se käyttää samoja perusteita että aloimme puhua viime viikolla. Vuonna GetString, jossa ei väitettä kohti void täällä ja se palauttaa merkkijonon, olen ilmeisesti olen julistamisesta merkkijono kutsutaan puskurin. En todellakaan tiedä, mitä se tulee käyttää, mutta me näemme. Näyttää siltä kapasiteetti on oletuksena 0. Ole aivan varma mihin tämä on menossa, ei tiedä mitä n aiotaan käyttää vielä, mutta nyt se alkaa hieman mielenkiintoisemman. Linjassa 243, me julistamme int c. Tämä on eräänlainen tyhmä yksityiskohta. Char on 8 bittiä, ja 8 bittiä voi tallentaa miten monta eri arvoja? >> [Opiskelija] 256. >> 256. Ongelma on, jos haluat olla 256 eri ASCII-merkkejä, jotka on jos luulet takaisin - ja tämä ei ole jotain muistaa. Mutta jos muistelen että iso ASCII kaavio meillä oli viikko sitten, oli tässä tapauksessa 128 tai 256 ASCII-merkkiä. Käytimme kaikki mallit 0s ja 1s ylös. Tämä on ongelma, jos haluat pystyä havaitsemaan virhettä koska jos käytät jo 256 arvoja hahmosi, et todellakaan suunnittele talouttaan sillä nyt sinulla ei ole tapa sanoa, Tämä ei ole legit luonnetta, tämä on noin virheellinen viesti. Joten mitä maailma tekee, on ne käyttävät seuraavaksi suurin arvo, jotain int- niin että sinulla on hullu määrä bittejä, 32, 4 miljardia mahdollisia arvoja niin että voit päätyä käyttämään pääasiassa 257 heistä, Jonka 1 on joitakin erityisiä merkitys kuin virhe. Joten miten tämä toimii. Linjassa 246, minulla on tämä iso, kun silmukka, joka soittaa fgetc, F Merkitys tiedosto, niin getc, ja sitten stdin. Paljastui, että tämä on vain tarkempi tapa sanoa luetaan panosta näppäimistö. Vakiosyöttökapasiteetti tarkoittaa näppäimistö, vakiotulosteeseen tarkoittaa näytön, ja keskivirhe, joka me nähdä pset4, tarkoittaa näytön mutta erityinen osa näytön niin, että se ei ole conflated varsinaiseen ulostulo että tarkoitus tulostaa. Mutta siitä lisää tulevaisuudessa. Joten fgetc tarkoittaa vain lukea yhden merkin päässä näppäimistön ja säilytä se minne? Säilytä se c. Ja tarkista sitten - joten olen vain käyttäen joitakin loogisia konjunktiot täällä - tarkista, että se ei vastaa - \ n, joten käyttäjä on Enter, haluamme lopettaa siinä vaiheessa, Silmukan lopussa - ja haluamme myös tarkistaa erityistä vakio EOF, jotka, jos tiedät tai arvailla, mitä se tarkoittaa? >> [Opiskelija] End of file. >> End of file. Tämä on tavallaan järjetöntä, koska jos olen kirjoittamalla klo näppäimistön, siellä oikeastaan ​​mitään tiedostoa mukana tässä, mutta tämä on vain eräänlainen yleinen termi tarkoittamaan että mikään muu on peräisin ihmisen sormet. EOF - tiedoston loppu. Sivuhuomautuksena, jos olet joskus lyönyt Ohjaus D näppäimistö, ei että olisit vielä - olet osuma Ohjaus C - Ohjaus D lähettää tätä erityistä vakio nimeltään EOF. Eli nyt meillä on vain muutamia dynaaminen muistin jakamista. Joten jos (n + 1> kapasiteettia). Nyt Selitän n. N on vain kuinka monta tavua on tällä hetkellä puskuriin, merkkijonon olet parhaillaan rakentaa käyttäjältä. Jos sinulla on enemmän merkkejä omassa puskurissa kuin sinulla kapasiteettia puskuriin, intuitiivisesti mitä meidän täytyy tehdä niin on jakaa enemmän kapasiteettia. Joten aion silmäillä joitakin aritmeettinen täällä ja keskittyä vain tätä toimintoa täällä. Tiedätkö mitä malloc on tai ainakin yleisesti tuttu. Ota arvaus mitä realloc tekee. >> [Opiskelija] Lisää muistia. Se ei ole aivan lisää muistia. Se allokoi uudelleen muistin seuraavasti. Jos siellä on vielä tilaa lopussa merkkijonon antaa sinulle enemmän että muistia kuin se alun perin antaa sinulle, niin saat että lisämuistia. Joten voit vain sysäämään merkkijonon merkkejä takaisin takaisin takaisin takaisin. Mutta jos se ei pidä paikkaansa, koska olet odottanut liian kauan ja jotain random pelaaja plopped muistissa on mutta siellä on ylimääräistä muistia täällä, se on okei. Realloc aikoo tehdä kaiken raskaan työn puolestasi, siirrä merkkijono olet lukenut näin kaukana täältä, laita se siellä, ja sitten antaa sinulle lisää kiitotien tässä vaiheessa. Joten aallon käden, haluan sanoa, että mitä GetString tekee on se alkaa pieni puskuri, ehkä yksi merkki, ja jos käyttäjä on kaksi merkkiä, GetString päätyy kutsuvan realloc ja sanoo yksi merkki ei riitä, anna minulle kaksi merkkiä. Sitten jos luet logiikan silmukan, se tulee sanoa käyttäjän kirjoittanut 3 merkkiä, anna minulle nyt ole 2, mutta 4 merkkiä, anna minulle 8, niin anna minulle 16 ja 32. Se, että olen kaksinkertaistaa kapasiteetin kerta tarkoittaa, että puskuri ei aio kasvaa hitaasti, se tulee kasvamaan erittäin nopeasti. Ja mikä voisi olla hyötyä siitä? Miksi olen koko kaksinkertaistui puskurin vaikka käyttäjä saattaa pitää vain yksi ylimääräinen merkki näppäimistöllä? [Äänetön opiskelija vastausta] >> Mikä tuo on? >> [Opiskelija] Sinun ei tarvitse kasvattaa sitä niin usein. Aivan. Sinun ei tarvitse kasvattaa sitä niin usein. Ja tämä on vain eräänlainen olet suojaavien vedot täällä, Ajatuksena on, että et halua soittaa realloc paljon, koska se on yleensä hidasta. Aina kysyä käyttöjärjestelmä muistia, niin saat pian nähdä tulevaisuudessa ongelma joukko, se yleensä kestää jonkin aikaa. Joten minimointi että aikaa, vaikka tuhlaat tilaa, yleensä hyvä asia. Mutta jos luemme läpi viimeisen osan GetString täällä - ja jälleen ymmärtää jokaisen rivin täällä ei ole niin tärkeää tänään - huomaa, että se lopulta kutsuu malloc uudelleen ja se jakaa tasan yhtä monta tavua kuin se tarvitsee merkkijono ja sitten heittää pois soittamalla ilmaiseksi liian suuri puskuri jos se todellakin voittamaan kaksinkertaistui liian monta kertaa. Eli lyhyesti sanottuna, että miten GetString on työskennellyt koko ajan. Kaikki se luetaan yksi merkki kerrallaan uudestaan ​​ja uudestaan ​​ja uudestaan, ja joka kerta se tarvitsee lisämuistia, se kysyy käyttöjärjestelmä sen soittamalla realloc. Kysyttävää? Selvä. Hyökkäys. Nyt ymmärrämme osoittimia tai ainakin ovat yhä paremmin perillä osoittimia, Tarkastellaan miten koko maailma alkaa romahtaa jos et ole aivan puolustautua kontradiktorisessa käyttäjiä, ihmiset, jotka yrittävät murtautua järjestelmään, ihmiset, jotka yrittävät varastaa ohjelmiston kiertämällä jotkut rekisteröintikoodin että niillä muutoin olisi kirjoittaa tuumaa Katsokaa tätä esimerkkiä täällä, mikä on vain C-koodia, joka on tehtävä tärkein alareunassa joka kutsuu funktio foo. Ja mitä on se ohimennen foo? [Opiskelija] yksittäisenä argumenttina. >> [Malan] yksittäisenä argumenttina. Joten argv [1], mikä tarkoittaa ensimmäistä sanaa että käyttäjä kirjoittaa komentoriville jälkeen a.out tai mikä ohjelma on nimeltään. Joten foo huipulla vie char *. Mutta char * on juuri mitä? >> [Opiskelija] merkkijono. [Malan] string, joten ei ole mitään uutta täällä. Tämä merkkijono on mielivaltaisesti kutsutaan bar. Tällä rivillä täällä, char c [12], on tavallaan puoliksi teknisiä Englanti, mitä tämä rivi tekee? [Opiskelija] joukko - >> Array? >> [Opiskelija] Characters. >> Characters. Anna minulle joukko 12 merkkiä. Joten voisimme kutsua tätä puskuria. Se on teknisesti kutsutaan C, mutta puskuri ohjelmointi tarkoittaa vain joukko avaruuden että voit laittaa kamaa sisään Sitten lopuksi, memcpy olemme ei käytetty ennen, mutta arvata saattaa, mitä se tekee. Se kopioi muistia. Mitä se tekee? Se ilmeisesti kopioi baari, sen panos, otetaan C mutta vain pituuden baarissa. Mutta on bugi täällä. >> [Opiskelija] Tarvitset sizeof luonnetta. >> Okei. Teknisesti, meidän pitäisi todella strlen (bar) * sizeof (char)). Aivan oikein. Mutta pahimmassa tapauksessa tässä oletetaan, että that's - Okei. Sitten on kaksi bugeja. Joten sizeof (char)); Tehdään tästä hieman laajemmin. Joten nyt on vielä bugi, joka on mitä? >> [Äänetön opiskelijan vastausta] Tarkista, mitä? >> [Opiskelija] Tarkista NULL. Meidän tulee yleensä tarkistamalla NULL koska pahoja asioita tapahtuu kun osoitin on NULL koska saatat päätyä sinne, ja sinun ei koskaan tule NULL by dereferencing se tähti operaattorin. Joten se on hyvä. Ja mitä muuta me teemme? Loogisesti siellä virhe tässäkin. [Opiskelija] Tarkista argc on> = 2. Joten tarkista jos argc on> = 2. Okei, joten siellä on kolme bugeja tästä ohjelmasta. Nyt tarkistaa, jos käyttäjä itse kirjoittanut mitään argv [1]. Hyvä. Joten mitä kolmas bugi? Joo. >> [Opiskelija] C ei ehkä tarpeeksi iso. Hyvä. Pyysimme Yhdessä skenaariossa. Meillä epäsuorasti tarkastetaan älä kopioi enemmän muistia kuin ylittäisi pituus baarissa. Joten jos merkkijono käyttäjä kirjoitettu on 10 merkkiä pitkä, tämä sanoo vain kopioida 10 merkkiä. Ja se on okei. Mutta entä jos käyttäjä kirjoitettu sana kehotteen 20-merkin sana? Tämä sanonta kopio 20 merkkiä siitä baarin, mitä? C, joka tunnetaan myös meidän puskuri, mikä tarkoittaa juuri kirjoitti dataa 8 tavu paikkoihin että et omista, ja et omista niitä siinä mielessä, että et koskaan varattu niille. Joten tämä on mitä yleisesti kutsutaan puskurin ylivuoto hyökkäys tai puskurin ylivuoto hyökkäys. Ja se on hyökkäys siinä mielessä, että jos käyttäjä tai ohjelma, joka soittaa oman toiminnan tekee tätä vihamielisesti, mitä todella tapahtuu seuraavaksi voisi todella olla melko huono. Joten katsomaan tätä kuvaa täällä. Tämä kuva edustaa pinon muistin. Muistuttaa, että joka kerta kun soittaa toiminnon saat tämän pienen kehyksen pinoon ja sitten toinen ja sitten toinen ja toinen. Ja tähän mennessä olemme vain eräänlainen otetun näistä suorakulmioina joko aluksella tai ruudulla täällä. Mutta jos me zoomata yksi niistä suorakulmioita, kun soitat funktio foo- käy ilmi, että siellä on enemmän pinon sisällä että kehyksen että suorakulmion kuin vain x ja y ja a ja b, niin kuin emme puhu swap. On käynyt ilmi, että siellä on joku alemman tason yksityiskohdat, joukossa Return Address. Joten se kääntyy pois, kun tärkeimmät kutsuu foo, tärkein on ilmoitettava foo mitä tärkein osoite on tietokoneen muistiin koska muuten, niin pian kuin foo tehdään suorittamalla, kuten tässä tapauksessa tässä, Kun saavutat tämän suljetun kihara ahdin lopussa foo- Miten hitossa se foo tietää, missä valvonta ohjelman on tarkoitus mennä? On käynyt ilmi, että vastaus tähän kysymykseen on tämä punainen suorakulmion täällä. Tämä merkitsee osoittimen, ja se on jopa tietokone tallentaa tilapäisesti on ns pino osoite tärkeimmistä niin, että niin pian kuin foo on tehty täytäntöönpanovaltion, tietokone tietää missä ja mitä linjaa pääasiassa palata. Tallennetut Kehys osoitin liittyy samalla tämän. Char * bar täällä edustaa mitä? Nyt tämä sininen segmentti tässä foo runkoon. Mikä on baari? Bar on vain argumentti foo toimintoa. Joten nyt olemme takaisin tavallaan tuttu kuva. On enemmän tavaraa ja lisää häiriötekijöitä ruudulla, mutta tämä vaaleansininen segmentti juuri mitä olemme piirtämällä taululle jotain kuten swap. Tämä on runko foo. Ja ainoa asia juuri nyt on baari, joka on tämän parametrin. Mutta mitä muuta pitäisi olla pinon mukaan tämän koodin tänne? [Opiskelija] char c [12]. >> [Malan] char c [12]. Meidän pitäisi myös nähdä 12 ruutua varatun muistin muuttuja nimeltä C, ja todellakin meillä on, että ruudulla. Hyvin alkuun on c [0] ja sitten kirjoittanut tämän kaavion ei vaivaudu piirustus kaikki neliöt, mutta on todellakin 12 siellä sillä jos tarkastellaan oikeassa alakulmassa, c [11] jos lasketaan 0 on 12. tällaisen tavu. Mutta tässä on ongelma. Mihin suuntaan on C kasvaa? Järjestä ylhäältä alas, jos se alkaa ylhäältä ja kasvaa pohjaan. Se ei näytä jätimme itsellemme paljon kiitotien täällä ollenkaan. Olemme tavallaan maalannut itsemme nurkkaan, ja että c [11] on oikeassa vastaan ​​bar, mikä on oikea vastaan ​​Tallennetut Frame osoitin, mikä on oikea vastaan ​​Return Address. Ei ole enää tilaa. Joten mitä vaikutuksia silloin, jos mokaat ja yrität lukea 20 tavua 12-tavun puskuri? Missä ovat ne 8 lisätavujen menossa? >> [Opiskelija] Inside - Sisällä kaikki muu, joista osa on erittäin tärkeää. Ja tärkeintä, mahdollisesti, on punainen laatikko siellä, palautusosoite, koska Oletetaan, että sinulla on joko vahingossa tai adversarially ylikirjoittaa ne 4 tavua, että osoitin osoite, ei vain roskaa, mutta numero että sattuu edustamaan todellista osoitetta muistiin. Mitä vaikutuksia loogisesti? >> [Opiskelija] Toiminto tulee palata eri paikkaan. Aivan. Kun foo palaa ja osumia että kihara ahdin, ohjelma tulee edetä ei palata päävalikkoon, se tulee palauttaa mihin tahansa osoitteeseen on se punainen laatikko. Tapauksessa kiertää ohjelmiston rekisteröinnin mitä jos osoite on palautetaan on toiminto, joka normaalisti saa kutsutaan kun olet maksanut ohjelmiston ja syötetään rekisteröintikoodi? Voit lajitella temppu tietokoneen aio tässä vaan menee täällä. Tai jos olet todella fiksu, vastustaja voi todella kirjoittaa on näppäimistö, esimerkiksi ei todellista sanaa, ei 20 merkkiä, mutta kai hän todella tyypit joitakin merkkejä, jotka edustavat koodia. Ja se ei tule olemaan C-koodia, se on todella olemaan merkit jotka edustavat binary konekielelle, 0s ja 1s. Mutta oletetaan he tarpeeksi fiksu tehdä niin, jotenkin liitä GetString kehote mikä on olennaisesti käännetty koodi, ja viimeinen 4 tavua ylikirjoittaa että palautusosoite. Ja mitä osoite tuo panos tehdä? Se on itse asiassa tallentaa tämän punainen suorakulmio osoite ensimmäisen tavun puskuria. Joten sinun täytyy olla todella fiksu, ja tämä on paljon ja erehdyksen huonoja ihmisiä, mutta jos voit selvittää, kuinka suuri tämä puskuri on siten, että viime tavua tulo annat ohjelman sattuvat olemaan vastaavan osoitteen alussa oman puskurin, voit tehdä tämän. Jos sanomme tavallisesti Hei ja \ 0, sitähän päätyy puskuriin. Mutta jos olemme viisaampi ja täytämme sen puskuri mitä me yleisesti kutsua hyökkäys koodi - AAA, hyökkäys, hyökkäys, hyökkäys - jos tämä on vain jotain, joka tekee jotain pahaa, Mitä tapahtuu, jos olet todella fiksu, saatat tehdä tämän. Vuonna punainen laatikko tässä järjestyksessä numerot - 80, C0, 35, 08. Huomaa, että vastaava määrä, joka on täällä. Se on käänteisessä järjestyksessä, mutta siitä lisää joku toinen kerta. Huomaa, että tämä paluu osoite on tarkoituksellisesti muutettu on yhtä osoitetta tänne, ei osoitetta tärkein. Joten jos pahis on super älykäs, hän aikoo sisällyttää kyseisen hyökkäyksen koodi jotain poistaa kaikki käyttäjän tiedostot tai kopioida salasanat tai luo käyttäjätili että voin sitten kirjautua - yhtään mitään. Ja tämä on sekä vaaran ja voiman C. Koska sinulla on pääsy muistiin kautta osoittimia Voit siis kirjoittaa mitä haluat osaksi tietokoneen muistiin, voit tehdä tietokoneen tehdä mitä haluat yksinkertaisesti ottaa se hypähdellä omassa muistia. Ja niin tänä päivänä niin monia ohjelmia ja niin monia sivustoja, jotka ovat vaarassa pohjimmiltaan ihmiset hyödyntää tätä. Ja tämä saattaa tuntua erittäin hienostunut hyökkäys, mutta se ei aina käynnisty niin. Tosiasia on, että mitä pahaa ihmiset yleensä tehdä, on, onko se ohjelma komentoriviltä tai GUI ohjelmaa tai verkkosivuilla, olet vain alkaa tarjota hölynpölyä. Kirjoitat todella iso sana hakukenttään ja paina Enter- ja odotat nähdä, jos sivusto kaatuu tai voit odottaa, jos ohjelma näkyy jonkin virheilmoituksen koska jos olet onnekas niin pahis ja annat joitakin hullu panos että kaatuu ohjelma, joka tarkoittaa ohjelmoija ei ennakoida huonoa käyttäytymistä, mikä tarkoittaa, että voit luultavasti tarpeeksi vaivaa, niin ja erehdyksen, selvittää, miten käydä tarkemmin hyökkäys. Niin paljon osa turvallisuutta ei ole vain välttää nämä hyökkäykset kokonaan mutta havaittuaan ne ja itse katsot lokit ja nähdä, mitä hulluja tulot ovat ihmisiä kirjoitetaan sivuston, mitä hakusanoja ihmiset ovat kirjoitetut sivustoosi toiveita täynnä joidenkin puskuria. Ja tämä kaikki pohjimmiltaan yksinkertainen perusasiat mitä array ja mitä se tarkoittaa kohdentaa ja käyttää muistia. Liittyvät että niin myös tämä. Toivotaan vain vilkaista sisällä kiintolevyn jälleen. Voit muistamme viikko tai kaksi sitten, että kun vedät tiedostot roskakoriin tai roskakoriin, mitä tapahtuu? >> [Opiskelija] Nothing. >> Yhtään mitään, eikö? Lopulta jos käytät vähän levytilaa, Windows tai Mac OS alkaa poistaa tiedostoja sinulle. Mutta jos vedät jotain siellä, että ei ole ollenkaan turvallista. Kaikki kämppäkaveri tai ystävä tai perheenjäsen tarvitsee vain tuplaklikkaa ja voila, siellä kaikki summittainen tiedostot yritit poistaa. Useimmat meistä ainakin tietää, että olet oikealla painikkeella tai Ctrl-osoittamalla ja tyhjennä roskakori tai jotain. Mutta silloinkaan se ei aivan tepsiä sillä mitä tapahtuu, kun olet tiedoston kiintolevylle joka edustaa jotkut Word-asiakirjan tai joidenkin JPEG, ja tämä merkitsee kiintolevylle, ja sanokaamme tämä suikale täällä edustaa tiedoston, ja se koostuu koko joukko 0s ja 1s. Mitä tapahtuu, kun ei vain vedä tätä tiedostoa roskakoriin tai roskakoriin mutta myös tyhjentää sen? Tavallaan mitään. Se ei ole mitään nyt. Nyt se on vain mitään, koska hieman jotain tapahtuu muodossa tämän taulukon. Joten siellä jonkinlainen tietokantaan tai taulukkoon sisällä tietokoneen muistiin että pohjimmiltaan on yksi sarake tiedostojen nimet ja yksi sarake tiedostojen sijainnin, jos tämä voi sijainti 123, vain satunnaisluku. Joten meillä voisi olla jotain x.jpeg ja sijainti 123. Mitä sitten tapahtuu kun itse tyhjentämään roskakorin? Se menee pois. Mutta mitä ei mene pois on 0s ja 1s. Joten mitä sitten yhteyden pset4? No, pset4, vain koska olemme vahingossa poistetaan compact flash-kortti että oli kaikki nämä valokuvat tai vain koska se huono tuuri tuli vioittunut ei tarkoita, että 0s ja 1s ole vielä olemassa. Ehkä muutama heistä menetetään, koska jotain todella vioittunut siinä mielessä, että jotkin 0s tuli 1s ja 1s tuli 0s. Pahoja asioita voi tapahtua, koska viallisista ohjelmistojen tai viallinen laitteisto. Mutta monet näistä bittiä, ehkä jopa 100% niistä, ovat edelleen olemassa. Se on vain, että tietokone tai kamera ei tiedä missä JPEG1 alkoi ja missä JPEG2 alkoi. Mutta jos, ohjelmoija, tietää vähän taju kun nämä JPEG ovat tai mitä ne näyttävät niin voit analysoida 0s ja 1s ja sanoa JPEG, JPEG, Voit kirjoittaa ohjelman lähinnä vain varten tai kun silmukka että toipuu jokainen näistä tiedostoista. Joten oppitunnin jälkeen on aloittaa turvallisesti poistamatta tiedostoja Jos haluat välttää kokonaan. Kyllä. [Opiskelija] Miksi se sanoo tietokoneeseen että sinulla on enemmän muistia kuin teit ennen? On enemmän muistia kuin teit aikaisemmin - >> [opiskelija] Lisää muistia. Oh. Hyvä kysymys. Joten miksi sitten tyhjennyksen jälkeen roskakoriin ei tietokoneen kertoa että sinulla on enemmän tilaa kuin teit ennen? Pähkinänkuoressa, koska se valehtelee. Teknisesti, sinulla on enemmän tilaa, koska nyt olette sanoneet voit laittaa muita juttuja, jos tiedoston kerran oli. Mutta se ei tarkoita bitit ovat menossa pois, ja se ei tarkoita bitit ollaan muuttamassa kaikki 0s, esimerkiksi oman suojan. Niin sitä vastoin, jos turvallisesti poistaa tiedostoja tai fyysisesti tuhota laite, todella on ainoa tapa joskus kiertää. Joten miksi emme jätä tähän osittain pelottava note, ja näemme sinut maanantaina. [Aplodit] [CS50.TV]