[Powered by Google Translate] [Savaitė 5]
[David J. Malan - Harvardo universiteto]
[Tai CS50. - CS50.TV]
>> Tai CS50, Savaitė 5.
Šiandien ir šią savaitę, mes pristatome šiek tiek ekspertizės pasaulyje
problemos kontekste rinkinys 4.
Šiandien bus sutrumpintai paskaita, nes ten yra ypatingas įvykis čia vėliau.
Taigi, mes priimsime žvilgtelėti ir erzinti tiek mokiniai bei jų tvai panašūs šiandien
kai kurių dalykų, kurie, dėl horizonto.
>> Tarp jų, kaip nuo pirmadienio, jūs turite keletą klasiokų.
EDX, Harvardo ir MIT nauja internetinė iniciatyva OpenCourseWare ir daugiau,
pradeda Harvardo universiteto miesteliu pirmadienį, o tai reiškia ateiti pirmadienis
jums reikės, kaip ir praėjusiais skaičius, 86.000 papildomų klasiokai
, kurie bus kartu su CS50 paskaitų ir skirsnius
ir Walkthroughs ir problemų rinkiniai.
Ir pagal šią programą, jūs tapsite CS50 ir dabar CS50x steigiamajame klasės nariais.
Pagal šią programą dabar, suprantame, kad ten bus kai upsides taip pat.
Pasiruošti už tai, dėl didelio studentų skaičiaus,
pakanka pasakyti, kad nors mes turime 108 TFS ir CAS,
tai ne visai geriausių studentų ir mokytojų santykis, kai mes Hit 80.000 studentų.
Mes neketiname būti klasifikavimo tiek daug problema nustato rankiniu būdu,
taip pristatė šią savaitę problemą, bus CS50 Registracijos
kuri ketina per prietaiso komandų eilutės įrankis
kad jūs gaunate, kai jūs ją atnaujinti vėliau šį savaitgalį.
Galėsite paleisti komandą, check50, į savo pset
ir gausite trumpąją grįžtamąjį ryšį, ar programa yra teisingas, ar neteisingas
pagal įvairaus dizaino specifikacijas, kad mes teikiame.
Daugiau apie šią problemą, specifikaciją.
Bus naudojamas CS50x klasiokai tai taip pat.
>> Problema rinkinys 4 yra visa informacija apie ekspertizės,
ir šis pset buvo tikrai įkvėpė kai kurių realaus gyvenimo dalykų
, pagal kurią, kai man buvo aukštosios mokyklos aš internuoti tam tikrą laiką
Middlesex County apygardos prokuratūra daro ekspertizės darbą
jų švino kriminalistikos tyrėjas.
Ką tai sudarė, nes manau, minėjau kelias savaites po
yra masė valstybinės policijos ar kiti ateis,
jie užsnūsti standžiųjų diskų ir kompaktinių diskų ir diskelių ir panašių dalykų, pavyzdžiui,
, o po to teismo ekspertizės biure tikslas buvo išsiaiškinti
ar ten buvo ar nebuvo įrodymų, kad tam tikros rūšies.
Tai buvo Specialiųjų tyrimų skyrius, todėl buvo baltos apykaklės nusikalstamumu.
Tai buvo daugiau rūpesčių rūšies nusikaltimus, nieko įtraukiant kažkokį skaitmeninės žiniasklaidos.
Pasirodo, kad ne, kad daugelis žmonių parašyti laišką, kuriame rašoma: "Aš tai padariau."
Taigi, gana dažnai, šie kriminalistikos ieško ne riesti visi, kad daug vaisių,
bet kartais žmonės rašyti tokius pranešimus.
Todėl kartais, pastangos buvo apdovanoti.
>> Bet vadovauti šio teismo ekspertizės pset mes nustatyti pset4 šiek tiek grafikos.
Jūs tikriausiai atsižvelgti į šiuos dalykus suprantamas - JPEG, GIF ir panašūs dirbiniai: - šių dienų.
Bet jei jūs tikrai manote apie tai, vaizdas, panašiai kaip Rob veidą,
galėtų būti sukurtas kaip taškų seka arba taškais.
Rob veidą, yra įvairiausių spalvų,
ir mes pradėjome matyti atskirus taškus, kitaip žinoma kaip taškų,
Kai mes pradėjome, norėdami ją padidinti.
Bet jei mes supaprastinti pasaulį šiek tiek ir tiesiog pasakyti, kad tai čia is Rob juodos ir baltos spalvos,
atstovauti juoda ir balta, mes galime tiesiog naudokite dvejetainis.
Ir jei mes ketiname naudoti dvejetainis, 1 arba 0, mes galime išreikšti tą patį vaizdą
Rob besišypsantį veidą su šiuo bitų modelis.
11000011 atstovauja balta, balta, juoda, juoda, juoda, juoda, balta, balta.
Ir todėl didžiulis šuolis pradėti kalbėti apie spalvingų fotografijų,
dalykų, kad jūs norite pamatyti "Facebook" arba pasiimti su skaitmeninio fotoaparato.
Bet tikrai, kai kalbama apie spalvų, jums reikia daugiau bitų.
Ir gana paplitusi fotografijų pasaulyje yra naudoti ne 1-bitų spalvos,
, nes tai rodo, bet 24-bitų spalvos, kur jūs iš tikrųjų gauti milijonus spalvų.
Taigi, tuo atveju, kai mes Mastelis Rob akis,
, kuris buvo bet milijonų skirtingų spalvinga galimybių.
Taigi, mes jums pristatyti šią problemą, 4, taip pat į rankos
kuri bus šiandien 03:30 vietoj įprastos 2:30 dėl penktadienio paskaitos čia.
Bet vaizdo įrašas bus internete, kaip įprasta, rytoj.
>> Mes taip pat supažindinti jus į kitą failo formatą.
Tai sąmoningai siekiama atrodyti bauginanti iš pirmo,
bet tai tik kai C struct dokumentacija.
Pasirodo, kad "Microsoft" metų padėjo populiarinti šį formatą
vadinamas bitmap failo formatas, BMP, ir tai buvo super paprastas, spalvingas grafinę failo formatas
, kuris buvo naudojamas gana ilgą laiką ir kartais vis dar tapetai ant darbo stalų.
Jei manote, kad atgal į Windows XP ir kalvomis ir mėlynas dangus,
kad buvo paprastai bmp arba Bitmap Image.
Rastrai yra įdomus mums, nes jie turi šiek tiek daugiau sudėtingumą.
Tai ne visai taip paprasta, kaip šis tinklelis 0s ir 1s.
Vietoj to, turite dalykų, pavyzdžiui, ne antraštės failo pradžioje.
Taigi, kitaip tariant, viduje. Bmp failą yra visa krūva 0s ir 1s,
bet yra ten keletas papildomų 0s ir 1s.
Ir paaiškėja, kad tai, ką mes tikriausiai savaime suprantamu dalyku už metus -
failų formatus, pavyzdžiui, doc arba. xls arba. mp3, mp4, nepriklausomai nuo failų formatai
, kad esate susipažinę su ką tai net reiškia būti failo formatas,
nes dienos pabaigoje visi iš šių failų, mes naudojame tik 0s ir 1s.
O gal 0s ir 1s atstovauti ABC per ASCII arba panašių dirbinių,
bet dienos pabaigoje, jis vis dar tik 0s ir 1s.
Todėl žmonės tiesiog kartais nusprendžia sukurti naują failo formatą
kur jie standartizuoti bitų modeliai bus iš tikrųjų reiškia.
Ir šiuo atveju čia, žmonės, kurie sukūrė bitmap failo formatą
rastrinio formato failą labai iš pirmo baito sakė, kad, kaip pažymėta kompensacijų 0 Nėra
ten bus kai cryptically pavadintas kintamasis vadinamas bfType
, kuris tiesiog reiškia bitmap failo tipą, ką bitmap failo tipas tai.
Galite daryti išvadą, galbūt iš antroje eilėje, kad kompensuoti 2, baitų skaičius "2",
turi 0s ir 1s modelį, kuris atitinka tai, ką? Ko nors dydis.
Ir jis eina iš ten.
4 problemą, jums bus vaikščioti per kai kurias iš šių dalykų.
Mes nebus baigti rūpintis apie juos visus.
Bet pastebėsite, kad jis pradeda gauti įdomus aplink baito 54: rgbtBlue, žalia, raudona.
Jei jūs kada nors girdėjote akronimas RGB - raudona, žalia, mėlyna - tai yra nuoroda, kad
nes paaiškėja, jūs galite dažyti visas vaivorykštės spalvas
su šiek tiek raudonos ir mėlynos ir žalios spalvos derinys.
Ir iš tiesų, tėvų kambaryje gali priminti kai iš pirmųjų projektorių.
Šių dienų, jūs tiesiog pamatyti viena ryški šviesa išeina iš lęšio,
bet atgal į tą dieną, kai turėjo raudoną objektyvas, mėlyną objektyvas, ir Green lens,
ir jie kartu siekiama ekrane ir sudarė spalvingą vaizdą.
Ir gana dažnai, vidurinės mokyklos ir gimnazijos tuos lęšius
vis tiek šiek tiek Marley, todėl jūs tarsi matyti dviejų ir trijų vaizdų.
Bet tai buvo idėja. Jūs turėjote raudona ir žalia ir mėlyna šviesa, tapyba nuotrauką.
Ir tas pats principas naudojamas kompiuteriuose.
>> Taigi tarp iššūkių, tada jums problema bus keletas dalykų rinkinys 4.
Vienas iš jų yra iš tikrųjų dydį vaizdą, 0s ir 1s modelio
išsiaiškinti, kuris gabaliukus 0s ir 1s atstovauti konstrukcija, kaip ir tai,
ir tada išsiaiškinti, kaip atkartoti pikselių - REDs, bliuzo, Žalieji -
viduje, todėl, kad, kai vaizdas atrodo taip iš pradžių,
ji gali atrodyti taip, o ne po to.
Tarp kitų iššūkių bus, kad jums bus įteiktas teismo ekspertizės vaizdą
faktinės bylos iš skaitmeninės kameros.
Ir kad kamera once upon a time, buvo visa krūva nuotraukų.
Problema yra, mes netyčia ištrinti arba buvo sugadinta kažkaip vaizdas.
Blogi dalykai nutinka su skaitmeninėmis kameromis.
Ir todėl mes greitai nukopijuoti visus 0s ir 1s off tos kortelės už jus,
išgelbėti juos visus į vieną didelį failą, o tada mes jums perduoti juos jums problema rinkinys 4
, kad būtų galima rašyti C programą, su kuria susigrąžina visą šių JPEG, idealiai.
Ir paaiškėja, kad JPEG, nors jie šiek tiek sudėtingos failo formatas -
jie yra daug sudėtingesnis nei šis besišypsantis veidas čia -
it turns out, kad kiekvienas JPEG prasideda nuo tų pačių modelių 0s ir 1s.
, Galų gale, todėl naudojant while cikle arba linijos ar panašios,
galite pakartoti per 0s ir 1s šiame teismo ekspertizės vaizdas,
ir kiekvieną kartą, kai pamatysite specialų modelį, kuris apibrėžtas problemą, specifikaciją,
galite manyti, čia yra su labai didele tikimybe, JPEG pradžia.
Ir kuo greičiau rasti tą patį modelį, kiek baitų skaičių
kilobaitų ar megabaitų vėliau, galite manyti, čia yra antras JPEG,
nuotrauka aš paėmė po pirmosios.
Leiskite man nustoti skaityti, kad pirmą failą, pradėkite rašyti šį naują,
ir savo programą išėjimas pset4 bus ne daugiau kaip 50 JPEG.
Ir jei tai ne 50 JPEG, turite šiek tiek kilpa.
Jei turite begalinį skaičių JPEG, turite begalinis ciklas.
Taip, kad taip pat bus gana dažnas atvejis.
Todėl tai, kas dėl horizonto.
>> 0 Viktorina už mus, supranta, kad per mano elektroninio pašto adresą, kad visada yra žmonės, kurie yra abu laimingi,
tarsi neutralaus, ir liūdna, aplink viktorina 0 laiką.
Ir prašome į mane, galva TF Zamyla, savo TF,
CAS arba, kad jūs žinote, jei norite aptarti, kaip viskas vyko.
>> Taigi įspūdį tėvams į kambarį, kas yra CS50 biblioteka?
[Juokas] Geras darbas.
Kas yra CS50 biblioteka? Taip. >> [Studentas] Tai iš anksto parašytų kodo rinkinys [nesigirdi]
Gerai, gerai.
Tai iš anksto parašytų kodo rinkinys, kad mes darbuotojai rašė, mes suteiksime jums,
, kuri suteikia tam tikrų bendrų funkcijų,
stuff like man eilutę, man int - visų funkcijų, kurios yra išvardyti čia.
>> Nuo dabar, mes pradedame iš tiesų imtis šias mokymo ratus.
Mes ketiname pradėti atimti iš jūsų eilutę,
išėmimas iš apyvartos yra tik už tai, ką faktinis duomenų tipas sinonimas? >> [Keli studentai] char *.
Char *. Tėvams, kad tikriausiai buvo [daro švilpesys garsas]. Tai gerai.
Char * mes pradėsime matyti ekrane daugiau, kaip mes pašalinti eilutę iš mūsų žodyno,
bent jau kai kalbama, kad iš tikrųjų rašyti kodą.
Be to, mes sustabdysime naudojant kai kurias iš šių funkcijų, kiek
, nes mūsų programos gauti daugiau sudėtingas.
, O ne tik rašyti programas, kad sėdi ten su greitai mirksi,
laukia, kad vartotojas galėtų įvesti kažką, jūs gausite savo sąnaudas iš kitur.
Pavyzdžiui, jūs gausite juos iš bitų serijos dėl vietos standžiajame diske.
Jūs, o ne gauti ateityje juos nuo tinklo ryšį,
kai svetainė kažkur.
>> Todėl galime žievelės atgal pirmą kartą šį sluoksnį ir atsigriebti CS50 Appliance
ir šį failą, vadinamas cs50.h, jūs buvote # įskaitant savaites,
bet tegul iš tikrųjų pamatyti, kas yra viduje.
Mėlynai failo viršuje yra tiesiog visa krūva komentarų:
Informacija apie garantiją ir licencijavimas.
Tai yra tarsi bendros paradigmos programinės įrangos
nes yra tai, kas vadinama atviro kodo programinės įrangos daug šių dienų,
, o tai reiškia, kad kažkas parašė kodą ir jis laisvai
ne tiesiog paleisti ir naudoti, bet iš tiesų perskaityti ir pakeisti ir integruoti į savo darbą.
Todėl tai, ką jūs naudojate, atviro kodo programinę įrangą, nors ir labai maža.
Jei aš slinkti žemyn praeityje komentarų, nors mes pradėsime pamatyti kai kuriuos žinomus dalykus.
Pranešimas viršuje, kad cs50.h faile yra visa krūva header files.
Dauguma iš jų, mes dar nematėte anksčiau, bet vienas yra susipažinęs.
, Kuris iš jų mes matėme, nors ir trumpai, iki šiol? >> [Studentas] Standartinis biblioteka.
Taip, standartinės bibliotekos. stdlib.h turi malloc.
Kai mes pradėjome kalbėti apie dinaminio atminties paskirstymo,
kuriuos mes grįžti kitą savaitę, taip pat, mes pradėjome įskaitant šio failo.
Pasirodo, kad bool, true ir false ne iš tikrųjų egzistuoja C per se
, jei norite įtraukti šį failą čia.
Mes savaites įskaitant stdbool.h
taip, kad jūs galite naudoti bool, true arba false. sąvoką
Be to, jums reikės rūšiuoti Fake It ir naudoti int
ir tiesiog savavališkai manyti, kad 0 yra klaidingas ir 1 yra tiesa.
Jei mes slinkti žemyn toliau, čia yra mūsų apibrėžimas eilutę.
It turns out, kaip mes minėta anksčiau,, kad tais atvejais, kai ši žvaigždė yra tikrai ne klausimas.
Jūs netgi galite turėti erdvę, visi aplink.
Mes šį semestrą buvo skatinti, nes tai, kad būtų aišku,
kad žvaigždė turi daryti su tipo,
bet suprantame, toks dažnas reiškinys, jei ne šiek tiek labiau paplitęs,
padėkite jį ten, bet funkciniu požiūriu tai tas pats dalykas.
Bet dabar, jei mes skaitome toliau, tegul už GetInt išvaizdą
nes mes naudojamas, kad galbūt pirma prieš ką nors šį semestrą.
Čia yra GetInt. Tai, ką? >> [Studentas] prototipas. >> Tai tik prototipas.
Dažnai mes turime įdėti prototipų ne mūsų viršūnes c failai,
bet taip pat galite įdėti prototipų header files, h failus, patiko šį vieną čia
taip, kad, kai rašote kai kurias funkcijas, kad jūs norite, kad kiti žmonės galėtų naudotis,
kuris yra tiksliai su CS50 bibliotekos atvejis,
jūs ne tik įgyvendinti savo funkcijas kažką panašaus cs50.c
jūs taip pat įdėti prototipų ne dėl šios bylos viršuje, bet antraštės failo viršuje.
Tada, kad failo antraštės yra tai, ką draugai ir kolegos
# include savo kodą.
Taigi visą šį laiką buvote įskaitant visus iš šių prototipų,
veiksmingai failo viršuje, bet kaip tai # include mechanizmą,
iš esmės kopijos ir pastos šį failą į savo.
Čia yra keletas gana išsamūs dokumentai.
Mes beveik savaime suprantamu dalyku kad GetInt gauna int,
tačiau paaiškėja, yra keletas kampiniai atvejai.
Ką daryti, jei vartotojas įveda kelias pernelyg didelis skaičius, kad, quintillion
kad tiesiog negali tilpti int? Koks numatomas elgesys?
Idealiu atveju, tai yra nuspėjama.
Taigi šiuo atveju, jei jūs iš tikrųjų skaityti baudos spausdinti,
jūs iš tikrųjų matyti, kad jei linija negali būti perskaityti, tai grąžina INT_MAX.
Mes niekada kalbėjo apie tai, bet remiantis jos kapitalizacijoje, kas tai yra tikriausiai?
[Studentas] pastovus. >> Tai konstanta.
Tai kai speciali konstanta, tikriausiai, viena iš tų header files
tai iki didesnis failo ir INT_MAX yra turbūt kažkas kaip maždaug 2 mlrd.
idėja yra ta, kad, nes mes turime kažkaip reiškia, kad kažkas negerai,
mes, taip, 4 mlrd. numerius mūsų žinioje: -2 mlrd. iki 2 milijardų, suteikti arba užtrukti.
Na, kas yra bendra programavimo jūs pavogti tik vieną iš šių numerių,
gal 0, o gal 2 mlrd. -2 mlrd., o gal,
taigi jūs prarandate vieną iš savo galimų reikšmių, kad būtų galima įsipareigoti pasaulyje
, kad jei kas nors negerai, aš grįšiu šį super neįkainojamos vertės.
Bet jūs neturite norite, kad vartotojas rašyti kažką neaiškūs kaip 234 ..., tikrai didelis skaičius.
Jūs apibendrinti ją, o ne kaip konstanta.
Ir tikrai, jei jums buvo analinis pastaruosius keletą savaičių, bet kada vadinamas GetInt
jums turėjo tikrinti jei sąlyga vartotojo tipą INT_MAX
arba, tiksliau, padarė GetInt grąžinimo INT_MAX, nes jei ji,
tai iš tikrųjų reiškia, jie nebuvo įveskite jį. Kažkas negerai šioje byloje.
Taigi, tai yra tai, kas paprastai žinomas kaip sarginio vertės, kuris tiesiog reiškia specialiuosius.
>> Tegul dabar virsta c failas.
C failas egzistuoja prietaiso tam tikrą laiką.
Ir iš tikrųjų reiškia, kad prietaisas yra iš anksto surinkti už jus į tą daiktą, mes vadinami objekto kodas
bet jis tiesiog nėra klausimas jums, kur jis yra, nes sistema žino
šiuo atveju, kai ji yra: prietaisas.
Leiskite slinkti žemyn dabar GetInt ir pamatyti, kaip GetInt dirbo visą šį laiką.
Čia mes turime panašias pastabas anksčiau.
Leiskite man priartinti tik kodo dalis.
Ir tai, ką mes turime GetInt tokia.
Ji nežino įvestį.
Ji grąžina int, while (true), todėl mes turime sąmoningai begalinis ciklas,
bet turbūt mes išeiti tai vienaip ar grįžti iš per šį laikotarpį.
>> Pažiūrėkime, kaip tai veikia.
Mes, atrodo, kad naudojant GetString šioje pirmoje eilutėje viduje linijos, 166.
Šiuo metu tai yra gera praktika, nes, kokiomis aplinkybėmis gali grįžti GetString
konkrečių raktinių žodžių NULL? >> [Studentas] Jei kas nors negerai.
Jei kažkas negerai. Ir kas galėtų suklysti, kai skambinate kažką panašaus GetString?
Taip. >> [Studentas] malloc nesugeba suteikti jai int.
Taip. Gal malloc nepavyksta.
Kažkur po kapotu, GetString skambina malloc, kuri paskirstoma atmintį,
kuri leidžia kompiuterių parduotuvėje visus simbolius
kad vartotojas įveda klaviatūra.
Ir tarkime, vartotojas buvo visai daug laisvo laiko ir atspausdinti daugiau, pavyzdžiui,
nei 2 mlrd. simbolių, daugiau simbolių, nei kompiuterio, net RAM.
GetString turi būti galėtų reikšti, kad jums.
Net jei tai super, super neįprasta kampe atveju,
jis turi kažkaip būti galėtų dirbti,
ir taip, jei mes grįžo ir perskaityti jo dokumentus, GetString daro tiesų grąžina NULL.
Taigi dabar, jei GetString nepavyksta grąžinant NULL, GetInt vyksta žlugti grąžinant INT_MAX
tik kaip Sentinel. Tai tik žmogaus konvencijas.
Vienintelis būdas turėtumėte žinoti, šiuo atveju yra skaityti dokumentus.
>> Leiskite slinkite žemyn, kur iš tikrųjų Dotarłeś int.
Jei aš slinkti žemyn šiek tiek toliau, atitinka 170, mes turime virš šių eilučių komentarą.
Mes pareiškiame, 172, int n, char, C, ir tada šios naujos funkcijos,
kai kurios iš jūsų turite szarpnęły priešais prieš sscanf.
Tai reiškia styginių scanf.
Kitaip tariant, duok eilutę ir bus nuskaityti informacijos vienetų interesų.
Ką tai reiškia?
Tarkime, kad aš tipo, pažodžiui, 123 prie klaviatūros ir tada paspauskite Enter.
Kas yra duomenų tipas 123 sugrįžę GetString? >> [Studentas] String.
Tai akivaizdžiai eilutę, tiesa? Aš turiu eilutę.
Taigi, 123 yra tikrai, citata citatos, 123, \ 0 "jo pabaigoje.
Tai ne int. Kad ne skaičius. Atrodo, kad skaičius, bet iš tikrųjų tai ne.
Taigi, ką GetInt daryti?
Ji turi nuskaityti tą eilutę, iš kairės į dešinę - 123 \ 0 ir kažkaip konvertuoti į faktinį sveikojo skaičiaus.
Jūs galite išsiaiškinti, kaip tai padaryti.
Jei manote, kad atgal į pset2, jūs tikriausiai gavo šiek tiek patogiau su Cezario
arba Vigenere, todėl galite pakartoti per eilutę, galite konvertuoti simbolių int.
Bet gi, tai visai daug darbo.
Kodėl gi ne skambinti kaip sscanf funkcija, kad visa tai už jus?
Taigi sscanf tikisi argumentą - šiuo atveju vadinamas eilutė, kurioje yra eilutė.
Jūs tada nurodykite į kabutes, labai panašus į printf, ką jūs tikitės pamatyti šios eilutės.
O ką aš sakau čia aš tikėtis pamatyti dešimtainį skaičių, o gal ir charakterį.
Ir mes pamatyti, kodėl tai yra vos akimirką.
Ir paaiškėja, kad ši aiškinamoji pastaba yra dabar primena daiktų mes pradėjome kalbėti apie
šiek tiek daugiau nei prieš savaitę.
Kas yra ir nanotechnologijų ir c daro mums čia? >> [Studentas] n adresas ir adresas a.
Taip. Tai, kad suteikėte man n ir adresas c adresą. Kodėl tai svarbu?
Žinote, funkcijų C, jūs visada galite grįžti reikšmę arba jokios vertės.
Galite grįžti Žiniasklaida, eilutę, apyvartinės lėšos, char, neatsižvelgiant, arba galite grįžti negaliojančiu,
tačiau jūs galite tik grąžina vieną dalyką maksimaliai.
Bet čia mes norime sscanf gal man grįžti Žiniasklaida, dešimtainis skaičius,
ir taip pat char, ir aš paaiškinti, kodėl char per akimirką.
Jums efektyviai norite sscanf grąžinti du dalykus, bet tai tiesiog neįmanoma C.
Galite dirbti aplink, kad išlaikius dviem adresais
nes kuo greičiau perduoti tam tikrą funkciją du adresus,
ką gali, kad funkcija su jomis daryti? >> [Studentas] Parašyti šiais adresais.
Gali rašyti šiais adresais.
Galite naudoti žvaigždė operaciją, ir ten, į kiekvieną iš šių adresų.
Tai tarsi šios atgal durų mechanizmas, tačiau labai dažnai keičiasi kintamųjų reikšmes
daugiau nei vienoje vietoje - šiuo atveju, dvi.
Dabar pastebėsite, aš tikrinti == 1 ir tada grįžti n jeigu tai, iš tiesų, įvertinti, tiesa.
Taigi, kas vyksta? Techniškai, visi, mes tikrai norime, kad taip atsitiktų, GetInt tai.
Mes norime apdoroti, taip sakant, mes norime skaityti eilutę - citata-123 Unquote
ir jei atrodo, kad ten numeris yra tai, ką mes sakai sscanf tai padaryti
įdėti šį skaičių - 123 - šis kintamasis n man.
Tad kodėl tada aš iš tikrųjų turi tai, kaip gerai?
Kas yra sscanf vaidmuo, kad jūs taip pat gali gauti simbolį?
[Nesigirdi studentas atsakas] >> dešimtainis taškas iš tikrųjų galėtų dirbti.
Leiskite nuspręsti, kad akimirką pagalvojo. Ką dar?
[Studentas] Tai gali būti NULL. >> Gera mintis. Tai gali būti niekinis pobūdis.
Tai tikrai ne šiuo atveju. Taip. >> [Studentas] ASCII.
ASCII. Arba leiskite man apibendrinti dar labiau.
% C yra tik klaidų tikrinimas.
Mes nenorime būti po skaičiaus pobūdis,
bet tai leidžia man padaryti tokia.
Pasirodo, kad sscanf, be to, saugoti vertybes n ir c šiame pavyzdyje,
ką jis taip pat tai grąžina kintamųjų skaičius įdėti vertybes in
Taigi, jei turite tik įvesti 123, tada tik% d ketina suderinti,
ir tik n pasireiškia saugomi kaip 123 vertės
ir nieko bus įdėti į c.
C išlieka šiukšlių vertė, taip sakant -
šiukšlių, nes ji niekada nebuvo inicijuoti tam tikrą vertę.
Taigi, tuo atveju, sscanf grąžina 1, nes aš apgyvendintos 1 šių rodykles,
tokiu atveju puikus, turiu int, kad aš išlaisvinti liniją atlaisvinti atminties
kad GetString faktiškai skirta, ir tada aš grįžti n,
kitas, jei jūs kada nors susimąstėte, kur tas Retry pareiškimas nuskambėjo iš, ji ateina iš čia.
Taigi, jei, priešingai, aš tipo 123foo tik keletas atsitiktinai teksto seka -
sscanf vyksta pamatyti numerį, numeris, skaičius, f,
ir tai vyksta įdėti N 123; jis ketina įdėti c F ir tada grįžti 2.
Taigi, mes turime, tik naudojant pagrindinį apibrėžimą sscanf elgesį, labai paprastas būdas -
gerai, sudėtinga iš pirmo žvilgsnio, bet dienos pabaigoje gana paprastas mechanizmas -
sakyti, yra int, ir jei taip, tai, kad vienintelis dalykas, kad aš rasiu?
Ir tarpus čia yra tyčinis.
Jei jūs skaitote kad sscanf dokumentus, jis jums pasakys, kad jei yra tarpų gabalas
pradžioje arba pabaigoje, sscanf per leis vartotojui, neatsižvelgiant į priežastis,
tarpo klavišą, kad pasiektų 123 ir tai bus teisėta.
Jūs ne klykauti ne tik todėl, kad jie paspauskite tarpo klavišą vartotojo
pradžioje, arba pabaigoje, kuri yra tik šiek tiek patogesnis.
>> Kokių nors klausimų ant GetInt? Taip. >> [Studentas] Ką daryti, jei jūs tiesiog įdėti į char?
Geras klausimas.
Ką daryti, jei jūs tiesiog atspausdinti kaip f char ir paspauskite "Enter" be galimybės kada nors rašyti 123?
Ką manote elgesys šio kodo eilutę, tada būtų?
[Nesigirdi studentas atsakas]
Taip, kad sscanf gali apimti, kad per daug, nes tokiu atveju jis nesiruošia užpildyti N ar C.
Ji ketina vietoj grįžti 0, tokiu atveju aš taip pat gaudyti kad scenarijus
nes aš noriu yra laukiama vertė 1.
Aš tik noriu vieną ir tik vienas dalykas turi būti užpildyti. Geras klausimas.
>> Kiti? Gerai.
>> Tegul ne eiti per visus čia funkcijų,
bet vienas, kad atrodo, kad galbūt likusį interesų GetString
nes paaiškėja, kad GetFloat, GetInt, GetDouble, GetLongLong
kamuolio išmušimas iš rankų jų funkcionalumą GetString daug.
Todėl galime imtis, kaip jis yra įgyvendinamas išvaizdą.
Tai vienas atrodo šiek tiek sudėtinga, bet ji naudoja tuos pačius pagrindus
, kad mes pradėjome kalbėti apie praeitą savaitę.
Į GetString, kuris trunka jokio argumento, kaip už tuštumos čia
ir grąžina eilutę, aš, matyt, skelbiantis eilutę vadinamas buferis.
Aš ne tikrai žinote, kas tai bus naudojamas dar, bet mes žr.
Atrodo, kad talpa yra pagal nutylėjimą 0.
Ne visai tikras, kur tai vyksta, nežinote, kas n bus naudojamas dar,
bet dabar tai vis šiek tiek įdomesnis.
Atitinka 243, mes skelbiame Žiniasklaida, c.
Tai tarsi kvailas išsamiai.
Char yra 8 bitų, ir 8 bitai gali laikyti kiek skirtingas reikšmes? >> [Studentas] 256. >> 256.
Problema yra, jei norite turėti 256 skirtingų ASCII simbolių, kurių yra
jei manote, atgal - ir tai nėra kažkas, įsiminti.
Bet jeigu jūs manote, kad didelis ASCII diagramos mes turėjome savaites,
Tokiu atveju ten buvo 128 ar 256 ASCII simbolių.
Mes naudojome visus 0s ir 1s up modelius.
Tai problema, jei norite, kad būtų galima aptikti klaidą
nes jei jūs jau naudojate 256 simbolių reikšmes,
tu tikrai planuoti iš anksto, nes dabar jūs neturite to paties posakio,
tai nėra teisėtas simbolis, tai yra kai klaidingas pranešimas.
Taigi, ką pasaulis daro jie naudoja kitą didžiausią vertę, kažką panašaus į int,
, kad jūs turite crazy bitų, 32, 4 milijardų galimų reikšmių
kad galite tiesiog galų gale naudojant 257 iš jų iš esmės,
Iš kurių 1 turi tam tikrą ypatingą reikšmę kaip klaida.
>> Taigi pažiūrėkime, kaip tai veikia.
246 atitinka, turiu tai didelis, o kilpa, kad skambina fgetc,
f reikšmė failas, todėl getc, ir tada STDIN.
Pasirodo, tai tik tiksliau pasakyti Skaityti įvesties iš klaviatūros.
Standartinis įvesties tai klaviatūra, standartinį išvedimo ekraną,
ir standartinė paklaida, kurią mes matysite pset4, reiškia ekraną
bet specialų ekrano dalyje, kad jis manimi ne supainiojo faktinės produkcijos,
kad jums skirtas spausdinti. Tačiau daugiau apie tai ateityje.
Taigi fgetc tik perskaityti vieną simbolį iš klaviatūros ir laikyti jį ten, kur?
Laikykite jį a.
Ir tada patikrinkite, - todėl aš tiesiog naudojant kai kuriuos loginius jungtukai -
patikrinkite, ar jis nėra lygus - \ n, todėl vartotojas paspauskite Enter, kad mes norime sustoti tame taške,
kilpos pabaigos - ir mes taip pat norite patikrinti už ypatingą nuolat EOF,
jei žinote, ar atspėti, ką jis stovėti? >> [Studentas] Bylos pabaiga. >> Pabaiga failą.
Tai rūšies absurdiškas, nes jei aš rašyti į klaviatūrą,
ten tikrai ne failas, dalyvauti šiame,
bet tai tik rūšiuoti reiškia bendrinis terminas, naudojamas
kad nieko ateina iš žmogaus pirštų.
EOF - failo pabaiga.
Kaip panaikinti, jei jūs kada nors nukentėjo valdymas D savo klaviatūros, ne tai, kad jums būtų dar
jūs nukentėjo reguliatorius C - valdymas D siunčia ši speciali konstanta, vadinama EOF.
Taigi, dabar mes tiesiog turime tam tikrą dinaminį atminties paskirstymas.
>> Taigi, jei (n + 1> talpos). Dabar aš paaiškinti n.
N, kiek baitų yra buferyje,
eilutė, kad jūs šiuo metu iš vartotojo.
Jei turite daugiau simbolių savo buferio nei turite pajėgumus buferyje,
intuityviai, tai, ką mes turime padaryti, tada yra skirti daugiau pajėgumų.
Todėl aš nugriebti kai aritmetinio čia ir sutelkti dėmesį tik į šią funkciją čia.
Jūs žinote, ką malloc yra arba paprastai yra bent susipažinę.
Spėti, kas realloc daro. >> [Studentas] Prideda atmintį.
Tai ne visai pridedant atminties. Perskirsto atmintį taip.
Jei dar yra kambarys eilutės pabaigoje, kad suteiktų jums daugiau, kad atmintis
nei ji iš pradžių suteikia jums, tada jums gauti, kad papildomos atminties.
Taigi galite tiesiog pradėti styginių simbolių atgal atgal atgal atgal.
Bet jei tai ne tas atvejis, nes jūs pernelyg ilgai laukė
ir kažkas atsitiktinai gavo plopped atmintyje
bet yra papildomos atminties žemai čia, kad viskas gerai.
Realloc ketina padaryti viską, didelių svorių iškėlimą už jus,
perkelti eilutę, jūs perskaitėte, kad iki šiol čia, padėkite jį ten,
ir tada duoti jums šiek tiek daugiau taką šiuo klausimu.
>> Taigi su rankos banga, leiskite man pasakyti, kad tai, ką GetString daro
ji pradeda su nedideliu buferio, gal vieną požymį,
ir, jei vartotojas įveda į dviejų simbolių GetString baigiasi iki skambinate realloc ir sako
vienas simbolis buvo nepakankamai, duok man du simbolius.
Tada, jei jūs skaitote per kilpą logika, jis ketina pasakyti
vartotojas turi įvesti 3 simbolių; Duok man dabar ne 2, bet 4 ženklai,
tada duok man 8, tada duok man 16 ir 32.
Tai, kad aš kiekvieną kartą padvigubinti Gebėjimų
reiškia, kad buferis nesiruošia auga lėtai, ji ketina super greitai augti.
Ir kas gali būti, kad privalumas?
Kodėl aš dvigubai buferio dydis
net jei vartotojas gali tiesiog reikia vieną papildomą simbolį iš klaviatūros?
[Nesigirdi studentas atsakas] >> Kas tai? >> [Studentas] Jūs neturite auginti jį taip dažnai.
Tiksliai. Jūs neturite auginti jį taip dažnai.
Ir tai tik malonu iš jūsų esate apsidraudimo savo statymus čia,
idėja yra ta, kad jūs nenorite skambinti realloc daug, nes jis linkęs būti lėtas.
Bet kuriuo metu galite paklausti operacinė sistema atmintyje,
kaip jūs netrukus pamatyti būsimą problemą,, jis yra linkęs šiek tiek laiko.
Taip sumažinti, kad, kiek laiko, net jei jūs eikvoti šiek tiek erdvės,
linkęs būti geras dalykas.
>> Bet jei mes skaityti per baigiamoji dalis GetString čia -
ir vėl suprasti kiekvieną eilutę čia yra ne taip svarbu šiandien -
pastebėsite, kad galiausiai jis vėl ragina malloc
ir ji skiria tiek baitų, kiek tiksliai taip, kaip jai reikia eilutę
ir tada išmeta telefonu nemokamai pernelyg didelis buferis
jei ji iš tikrųjų gavo dvigubai per daug kartų.
Taigi trumpai tariant, tai, kaip GetString dirbo visą šį laiką.
Visi jame yra skaityti vieną simbolį vienu metu vėl ir vėl ir vėl,
ir kiekvieną kartą, ji reikia šiek tiek papildomos atminties, jis klausia, operacinę sistemą
paskambinus realloc.
>> Turite klausimų? Gerai.
>> Ataka.
Dabar, kai mes suprantame patarimų ar bent jau labiau susipažinę su rodyklės,
pažiūrėkime, kaip visas pasaulis pradeda žlugti
jei jūs neturite pakankamai ginti nuo rungimosi vartotojams,
žmonių, kurie bando nulaužti į jūsų sistemą,
žmonių, kurie bando pavogti jūsų registracijos kodą apeiti tam tikrą programinę įrangą
kad jie gali kitaip įvesti in
>> Paimkite pažvelgti į šį pavyzdį, kuris yra tik C kodas, kuris turi pagrindinę funkciją apačioje
kad skambučiai funkcija foo. Ir nuo ko jis artimųjų foo?
[Studentas] Vienintelis argumentas. >> [Malan] Vienintelis argumentas.
Taigi argv [1], o tai reiškia, pirmas žodis, kuris vartotojas turi įvesti į komandų eilutę
po a.out ar kas programa vadinama.
Taigi foo viršuje mano char *. Bet char * yra tai, ką? >> [Studentas] eilutė.
[Malan] eilutę, kad nieko naujo čia.
Ši eilutė yra savavališkai yra vadinamas baras.
Šioje eilutėje čia, char c [12]; tarsi pusiau techninės anglų, kas ši eilutė daro?
[Studentas] masyvas - >> masyvas? >> [Studentas] spalva. >> Charakteriai.
Duok man 12 simbolių masyvas. Taigi galėtume pavadinti tai buferis.
Techniškai vadinama c, bet programavimo buferis tiesiog reiškia vietos krūva
, kad jūs galite įdėti kai kurių dalykų in
Tada galiausiai, memcpy mes ne naudoti prieš, bet jums greičiausiai gali atspėti, ką ji daro.
Kopijuoja atmintį. Ką jis daro?
Tai, matyt, kopijuoja baras, jo indėlis į C, bet tik iki juostos ilgis.
Bet ten klaida čia. >> [Studentas] Jūs turite sizeof charakterį. >> Gerai.
Techniškai, turėtume tikrai strlen (bar) * sizeof (char)). Tai teisinga.
Bet blogiausiu atveju čia, galime manyti, kad that
Gerai. Tada ten dvi klaidas.
Taigi, sizeof (char));
Padarykime tai šiek tiek platesnis.
Taigi, dabar dar yra klaida, o tai, ką? >> [Nesigirdi studentas atsakas]
Patikrinkite už ką? >> [Studentas] Patikrinkite NULL.
Mes paprastai turėtų būti patikrinti, ar nulis, nes blogi dalykai nutinka
, kai jūsų rodyklė NULL, nes jums gali galų gale vyksta ten,
, ir jūs turite ne kada nors bus vyksta į NULL, dereferencing su žvaigždutėmis operatoriaus.
Taigi, kad gerai. Ir ką mes darome? Logiškai mąstant, trūkumas čia.
[Studentas] Patikrinkite, ar argc yra> = 2.
Taigi, patikrinkite, jei argc> = 2. Gerai, kad yra trys šios programos klaidas.
Stebima tikrinti, ar vartotojas iš tikrųjų įvestas nieko į argv [1]. Geras.
Taigi, kas yra trečiasis klaidą? Taip. >> [Studentas] C gali būti pakankamai didelis.
Geras. Mes patikrinome vienas scenarijus.
Mes netiesiogiai patikrinti, nekopijuokite daugiau atminties nei viršyti juostos ilgis.
Taigi, jei eilutė vartotojas turi įvesti 10 simbolių,
tai sako tik nukopijuoti 10 simbolių. Ir tai gerai.
Bet kas, jei vartotojas turi įvesti ne kaip 20-simbolių žodžio eilutę žodį?
Tai sakydamas kopiją 20 simbolių iš baro į tai, ką?
C, kitaip žinomas kaip mūsų buferio, kuris reiškia, kad jūs tiesiog parašė duomenis
8 baitų vietose, kad jūs neturite savo,
ir jūs neturite juos ta prasme, kad jūs niekada paskyrusios.
Taigi, tai, kas paprastai žinomas kaip buferio perpildymo atakos ar buferio ataka.
Ir tai ta prasme, ataka, kad jei vartotojas arba programa, kuri skambina savo funkciją
tai daro piktavališkai, kas iš tikrųjų vyksta šalia, iš tiesų gali būti gana neblogai.
>> Todėl galime imtis į šį vaizdą čia.
Ši nuotrauka yra jūsų atminties krūvą.
Prisiminkite, kad kiekvieną kartą, kai skambinate funkciją gauti šį mažą rėmelį kamino
ir tada kitą, ir tada dar vieną ir dar.
Ir iki šiol, mes tiesiog rūšies išgaunamo tai kaip stačiakampių
arba ant lentos arba ekrane čia.
Bet jei mes priartinti vieną iš šių stačiakampių, kai skambinate funkcijos foo,
paaiškėja, kad yra daugiau šio stačiakampio kamino viduje šio kadro
kaip tik x ir y ir a ir b punktai, kaip mes kalbame apie apsikeitimo sandorio.
Paaiškėja, kad yra keletas žemesnio lygio detales, tarp jų ir atgalinį adresą.
Taigi paaiškėja, kai pagrindinis ragina foo, pagrindinis turi informuoti foo
pagrindinis adresas yra kompiuterio atmintyje
nes kitaip, kuo greičiau foo vykdymas, kaip šiuo atveju čia
kai jūs pasieksite šį uždarą garbanotas petnešomis iš foo pabaigoje,
kaip gi Foo žinoti, kur programos kontrolė turėjo eiti?
It turns out, kad atsakymas į šį klausimą yra šitoje stačiakampio čia.
Tai rodo, kad žymeklis, ir tai laikinai laikyti prie kompiuterio
vadinamosios kamino pagrindinis adresas yra padaryta taip, kad kuo greičiau foo vykdyti
kompiuteris žino, kur ir ką linija pagrindinis grįžti į.
Išsaugotos Rėmas rodyklė panašiai.
Char * baras čia yra kas?
Dabar šis mėlynas segmentas čia Foo rėmo. Kas yra baras?
Baras yra tik foo funkcijos argumentas.
Taigi dabar mes rūšiuoti pažįstamą vaizdą.
Yra daugiau daiktų ir daugiau ramiai ekrane,
bet tai šviesiai mėlyna segmentas tiesiog yra tai, ką mes buvo piešimo lentos
apsikeitimo sandorio kažką panašaus. Kad yra rėmas foo.
Ir vienintelis dalykas, dabar yra baras, kuriame yra šis parametras.
Bet ką dar turėtų būti kamino pagal šio kodekso čia?
[Studentas] char c [12]. >> [Malan] char c [12].
Mes taip pat turėtumėte pamatyti 12 kvadratų atminties skiriama kintamasis, vadinamas C,
ir iš tikrųjų mes turime, kad ekrane.
Pačiame viršuje yra [0], tada šioje diagramoje autorius
nesivargino piešimo kvadratų, bet iš tiesų yra 12 nėra
nes jei peržvelgsite apačioje, dešinėje pusėje, c [11], jei skaičiuoti nuo 0 12 pavyzdžiui baitų.
Bet čia yra problema.
Kuria kryptimi c auga?
Rūšiuoti viršaus į apačią ", jei ji pradeda viršuje ir auga į apačią.
Ji atrodo ne taip, kaip mes palikome sau daug kilimo ir tūpimo tako, čia ne visiems.
Mes rūšies dažytos save į kampą,
ir kad c [11] yra teisus prieš bare, kuris yra prieš Išsaugoti Frame rodyklė,
kuris yra teisus prieš atgalinį adresą. Yra daugiau nebėra.
Taigi, kas yra potekstė tada, jei jūs susukti
ir bandote skaityti 20 baitų į 12-baitų buferio?
Kur šie 8 papildomi baitai ketinate eiti? >> [Studentas] Viduje -
Viduje visa kita, kai kurie iš jų yra super svarbu.
Ir svarbiausias dalykas, galbūt, yra raudonas langelis, atgalinis adresas,
, nes manome, kad Jus netyčia arba adversarially perrašyti tuos 4 baitai,
kad rodyklė adresas, ne tik su šiukšlių, bet su numeriu
tai atsitiks taip, kad atspindėtų faktinį adresą atmintyje.
Kas yra potekstė, logiškai? >> [Studentas] Funkcijų ketina grįžti į kitą vietą.
Tiksliai.
Jeigu foo grįžta ir hitai, kad garbanotas petnešomis, programa ketina tęsti
Norėdami grįžti į pagrindinį, jis ketina grįžti į kokia adresas yra to raudono lange.
>> Apeiti programinės įrangos registracijos,
ką daryti, jei adresas, grįžo į yra funkcija, kuri paprastai iškviečiamas
po to, kai sumokėta už programinę įrangą ir įvestas registracijos kodą?
Jūs galite rūšiuoti apgauti kompiuterio į nesiruošia čia, bet vietoj einame čia.
Arba jei esate tikrai protingas, priešininkas iš tikrųjų galite įvesti ne klaviatūra, pavyzdžiui,
o ne tikrasis žodis, ne 20 simbolių, bet tarkime, kad jis ar ji iš tikrųjų tipai
keletas simbolių, kurie atstovauja kodą.
Ir jis nesiruošia būti C kodas, tai tikrai bus simboliai
kurios atstovauja dvejetainius mašininį kodą, 0s ir 1s.
Tačiau tarkime, jie yra pakankamai protingas, tai padaryti,
kažkaip įklijuokite į GetString eilutę kažką, kad yra iš esmės surinkti kodą,
ir paskutinius 4 baitai perrašyti atgalinį adresą.
O koks adresas, kad įvesties daryti?
Ji iš tikrųjų saugo šitoje stačiakampio pirmojo baito adresas buferio.
Taigi, jūs turite būti tikrai protingas, ir tai yra daug bandymų ir klaidų, blogų žmonių iš ten,
bet jei galite išsiaiškinti, kaip didelis buferis yra
toks, kad per pastaruosius keletą baitų įėjimo jūs pateikiate programos
atsitikti, kad atitinka savo buferio pradžios adresą, galite tai padaryti.
Jei mes sakome paprastai hello and \ 0, tai, kas galų gale į buferį.
Bet jei mes protingas ir mes užpildome, kad buferis su tuo, ką mes bendrine skambinti atakos kodą
AAA, ataka, ataka, puolimas - tai tik kažkas, kad daro kažką blogo,
kas atsitiks, jei jūs tikrai protingas, galite tai padaryti.
, Raudoname laukelyje čia skaitmenų seka - 80, C0, 35, 08.
Atkreipkite dėmesį, kad, kuris atitinka skaičių, kuris čia.
Tai atvirkštine eilės tvarka, bet daugiau, kad kitu metu.
Atkreipkite dėmesį, kad tai atgalinis adresas buvo tyčia pakeistas
lygus adresą čia, o ne pagrindinio adreso.
Taigi, jei blogiukas yra super protingas, jis ar ji ketina įtraukti, kad ataka kodą
kažkas panašaus i ¹ trinti visus vartotojo failus ar kopijuoti slaptažodžius
arba sukurti vartotojo abonementą, kad galiu prisijungti prie - nieko.
>> Ir tai yra pavojus ir C. galia
Nes per rodykles jūs turite prieigą prie atminties
Todėl galite rašyti viską, ką nori, į kompiuterio atmintį,
jūs galite padaryti kompiuterį daryti viską, ką nori
tiesiog šokinėti per savo atminties.
Ir taip iki šių dienų tiek daug programų ir tiek daug svetainių, kyla pavojus,
skliautais žmonėms pasinaudoti šia.
Ir tai gali atrodyti super sudėtingų užpuolimo, tačiau ji ne visada pradėti, kad taip.
Realybė yra tai, ką blogi žmonės paprastai padaryti,
ar tai komandinės eilutės programa arba GUI programa ar svetainė,
jūs tiesiog pradėti teikti nesąmonė.
Jūs tipo tikrai didelis žodį į paieškos laukelyje ir paspauskite "Enter",
ir laukti, kad pamatytumėte, jei svetainė sugenda
ar laukti, kad pamatytumėte, jei programa pasireiškia kai klaidos pranešimą
nes jei jums pasisekė, nes blogiukas ir jūs nors crazy įvestį
dėl kurios stringa "programą, tai reiškia, kad programuotojas nesitikėjo savo blogą elgesį,
, o tai reiškia, jūs galite tikriausiai pakankamai pastangų, pakankamai bandymų ir klaidų,
išsiaiškinti, kaip darbo užmokesčio tiksliau ataką.
Taigi, kaip daug saugumo dalis yra ne tik išvengti šiuos išpuolius iš viso
bet ir nustatyti juos ir iš tikrųjų žiūri rąstų
ir pamatyti, ką Crazy įėjimai žmonių įvedėte į savo svetainę,
kokius paieškos terminus, kad žmonės įvedėte į savo svetainę
tikisi šiek tiek buferis perpildyta.
Ir visa tai suvesta į paprastų pagrindų ką masyvas
ir ką jis reiškia, paskirstyti ir panaudoti atmintį.
>> Susiję su, kad tada per tai.
Tegul tik iš pirmo žvilgsnio viduje kietąjį diską dar kartą.
Jūs prisimenate, kad per savaitę ar dvi prieš, kad, kai jūs vilkite failus į jūsų šiukšlinę ar šiukšliadėžės,
kas atsitiks? >> [Studentas] Nieko. >> Absoliučiai nieko, tiesa?
Galų gale, jei jūs naudojate mažai vietos diske,
"Windows" arba "Mac OS pradės jums ištrinti failus.
Bet, jei vilkite kažką ten, kad yra ne visi saugus.
Visi jūsų kambarioku ar draugas ar šeimos narys turi daryti dukart spustelėkite ir voila,
ten visi apytikrės failų, kurie bandė jį pašalinti.
Daugelis iš mūsų bent žinoti, kad jūs turite paspausti dešiniuoju pelės klavišu arba Spustelkite
Išvalyti šiukšlinę ar kažkas panašaus.
Bet net ir tada, kad nėra gana padaryti pavyko
nes tai, kas atsitinka, kai jūs turite failą kietajame diske
, kuris atstovauja kai "Word" dokumentą arba kai JPEG, ir tai yra jūsų kietajame diske,
ir tegul sako, tai rakštis čia atstovauja šį failą,
ir tai sudaro visa krūva 0s ir 1s.
Kas atsitinka, kai jūs ne tik vilkite failą į šiukšlinę gali arba šiukšlinę
bet ir ištuštinti? Rūšiuoti nieko.
Tai nėra absoliučiai nieko dabar.
Dabar jis tiesiog nieko, nes šiek tiek kažkas atsitinka šios lentelės forma.
Taigi yra kai kurie iš duomenų bazės arba stalo rūšies viduje kompiuterio atmintyje
, kad iš esmės yra vienas stulpelis rinkmenose pavadinimų ir vienas stulpelis failus buvimo vietą,
tais atvejais, kai tai gali būti vieta 123, tik atsitiktinis skaičius.
Taigi, mes galime turėti kažką panašaus x.jpeg ir Vieta 123.
Kas atsitinka po to, kai jūs iš tikrųjų išvalyti šiukšlinę?
Kad nueina.
Bet kas, neišnyksta 0s ir 1s.
>> Taigi, kas tada jungtis prie pset4?
Na, su pset4, tik todėl, kad mes netyčia ištrinti Compact Flash Card
kad visi iš šių nuotraukų, arba tiesiog, nes jis turėjo nesėkme tapo sugadintas
nereiškia, kad 0s ir 1s nėra dar ten.
Gal keli iš jų yra prarastas, nes kažkas gavo sugadintas
ta prasme, kad kai 0s tapo 1s ir 1s tapo 0s.
Blogi dalykai gali atsitikti dėl Buggy programinės įrangos ar trūkumais techninės įrangos.
Bet daugelis iš tų bitų, o gal net 100% iš jų, vis dar ten.
Tai tiesiog, kad kompiuteris ar fotoaparatas nežino, kur JPEG1 pradėjo
ir kur JPEG2 prasidėjo.
Bet jeigu jūs, programuotojas, žino, su šiek tiek išminties, kai šie JPEG
ar tai, ką jie atrodo, todėl jūs galite analizuoti 0s ir 1s ir pasakyti JPEG, JPEG,
galite parašyti programą su iš esmės tik už arba while cikle
, kuris atgauna kiekvieną šių failų.
Taigi pamoka tada pradėti saugiai ištrinti savo failus
jei norite, siekiant to išvengti visiškai. Taip.
>> [Studentas] Kaip tai ji sako apie jūsų kompiuteryje
, kad turite daugiau atminties, nei jūs veikėte anksčiau?
Turi daugiau atminties, nei jūs veikėte anksčiau - >> [studentas] daugiau laisvos atminties.
Oh. Geras klausimas.
Tad kodėl tada po ištuštinti šiukšlinę, ar jūsų kompiuteris pasakys,
, kad turite daugiau laisvos vietos nei jūs veikėte anksčiau?
Trumpai tariant, nes jis guli.
Daugiau techniškai, jūs turite daugiau vietos, nes dabar jūs sakėte
galite įdėti kitų dalykų, kur kažkada buvo, kad byla.
Bet tai nereiškia, kad bitai išvykstate,
ir tai nereiškia, kad bitai yra pakeistas į visų 0s, pavyzdžiui,
dėl jūsų saugumo.
Taigi, priešingai, jei saugiai ištrinti failus arba fiziškai sunaikinti prietaisą,
kad tikrai yra kartais vienintelis būdas aplink, kad.
>> Tad kodėl gi ne mes palikti tą pusiau baisu pastaboje, ir mes matome, pirmadienį.
[Plojimai]
>> [CS50.TV]