[Powered by Google Translate] [VIKA 5]
[David J. Malan, Harvard University]
[Þetta er CS50.] [CS50.TV]
[Kona] hann er að ljúga, um það, ég veit ekki.
[Karl] Svo hvað vitum við?
[Kona] Það á 9:15, Ray Santoya var í hraðbanka.
[Karl] Svo spurningin er, hvað var hann að gera á 9:16?
[Kona] skjóta 9 mm á eitthvað.
Kannski sá hann leyniskytta.
[Karl] Eða hann var að vinna með honum.
[Kona] Bíddu. Fara aftur um eitt.
[Karl] Hvað sérðu?
[♫ spennandi tónlist ♫]
[Kona] Koma andlit hans upp. Full skjár.
[Karl] Gleraugun hans. >> Að það er spegilmynd.
[♫ spennandi tónlist ♫]
[Karl] Það er baseball lið í Nuevita er. Það er merki þeirra.
[Kona] Og hann er að tala við hver er þreytandi að jakka.
>> [David Malan] Svo er þetta CS50 viku 5, og í dag við eyðileggja smá sjónvarp og bíómynd fyrir þig.
Svo þegar þú ert að horfa á sýningu eins og þessa hér,
og lögguna segja "Getur þú þrífa það upp?" eða "Auka"
það er engin auka í hinum raunverulega heimi.
Í raun, það sem þú færð í raun er svolítið eitthvað eins og this.
Ég hef dregið upp einn starfsmanna myndir af síðunni.
Þetta er forrit sem heitir Photoshop. Þetta er 1 af 2 Bowdens,
1 af 3 Bowdens raun, í dag, vegna þess að við höfum Frú Bowden hér eins og heilbrigður, með Rob og Paul.
En hér er Rob á skjánum, og ef við zoom í á þeirri glint hann alltaf verið í augum hans,
það sem þú sérð í raun er að það sem þú sérð er það sem þú færð.
Þetta er "auka", svo "CSI" hafa það svolítið rangt.
Það er eitt annað myndband, ef við getum tekið á "CSI" bara svolítið lengur.
Þessi er ágætur setning að kveða héðan ef þú vilt
trausta tækni með vinum þínum þegar í raun, þú ert að segja nákvæmlega ekkert.
>> [Karl] Fyrir vikur Ég hef verið að rannsaka Cabby morð Killer
með ákveðnum þjást hrifningu.
[Kona # 1] Þetta er í rauntíma.
[Kona # 2] Ég mun búa til GUI viðmótið að nota Visual Basic, sjá hvort ég get rakið IP-tölu.
>> [Malan] Svo hljóð út af sync hliðar, búa til GUI tengi með Visual Basic
til að fylgjast með IP-tölu er lokið bull.
Þessa dagana þú vilt ekki nota Visual Basic,
það er engin þörf fyrir GUI, og IP tölu var tæknilega rétt orð.
Svo að hafa auga út fyrir þetta, og einn af mínum uppáhalds:
Þessi 'a lítill fleiri Bogagöng, þar sem þú þarft að vita með annað tungumál.
Það er tungumál sem kallast Objective-C, sem er superset C.
Sem þýðir að c það er auk sumir viðbótar-lögun, þar á meðal hlutbundin forritun.
Og þetta er mál sem Apple hefur útbreiðslu um IOS forritun.
Og svo hér er myndband frá mismunandi sýna að öllu leyti, frá "Numbers"
að ef þú lítur í raun náið TiVo og gera hlé á réttum tíma,
þú munt sjá að það sem þeir eru að leita að er ekki alveg það sem verið er að lýsa.
Og láta mig reyna mismunandi hljóð tengi hér og sjá hvort við getum ekki
halda hljóð í sync í þetta sinn.
Ég gefa þér "Numbers".
>> [Man # 1] Það er 32-bita IPv4 vistfang.
[Man # 2] IP, það er á netinu. >> Persónulegur net. Það er persónulegur net Anita er.
[Malan] lagi. Þetta er Objective-C, og það er fyrir áætlun litarefni sumir krakki,
eins og þú getur kannski álykta af nafni breytu þar.
Þannig að þá var "Numbers". Svo í dag og í þessari viku við að kynna
smá heim réttar og samhengi í vandamál þess vegna.
Í dag verður stytt fyrirlestur því að það er sérstakur atburður hér
síðar, þannig að við munum taka gægjast, og stríða bæði nemendur og foreldra jafnt dag
með sumir af þeim hlutum sem eru á sjóndeildarhringnum.
Meðal þeirra, sem í mánudagur, verður þú að hafa nokkra bekkjarfélaga.
EDX, Harvard og MITs nýr online frumkvæði að opna courseware
og fleiri, er stokkunum á háskólasvæðinu Harvard er á mánudaginn.
Sem þýðir að koma Mánudagur þú þarft - eins og á síðasta telja,
86.000 fleiri bekkjarfélagar verða eftir með fyrirlestrum CS50 er
og köflum og walkthroughs og vandamál setur.
Og sem hluti af þessu, verður þú að verða aðilar að vígslu flokki
CS50 og nú CS50x.
>> Sem hluti af þessu, nú, átta sig á að það verði sumir upsides eins og heilbrigður.
Til að fá tilbúinn fyrir það, að miklum fjölda nemenda,
nægja að segja að jafnvel þó að við höfum 108 TFS og CAS,
ekki alveg besta nemandi / kennara hlutfall þegar við högg 80.000 aðra nemendur.
Þannig að við erum ekki að fara að flokka svo mörg vandamál setur handvirkt.
Þannig kynnt í þessari viku í vandamál setja verður CS50 Athuga,
sem er að fara til vera a stjórn lína gagnsemi innan tækið
sem þú munt fá þegar þú uppfærir hann seinna um helgina,
og þú munt vera fær til að keyra skipun, stöðva 50,
eigin pset þinn, og þú munt fá sumir endurgjöf um hvort forrit er
rétt eða rangt í samræmi við ýmsar upplýsingar hönnun sem við höfum veitt.
Svo meira um það og setja vandamálið forskrift og
á CS50x bekkjarfélagar verður að nota þetta eins og heilbrigður.
>> Svo er vandamálið sett 4 allt um réttar.
Og þetta verk var innblásið af einhverjum alvöru efni,
þar þegar ég var í framhaldsnámi skólanum interned ég um stund með
Embætti Middlesex County héraðsdómi gera réttar vinna
með leiða réttar rannsakandi þeirra, og hvað þetta var
er, ég held að ég nefndi fortíð fáir viku, er massi lögreglu ríki eða öðrum
myndi koma, myndu þeir falla burt hluti eins og harða diska og geisladiska og disklingadrifið
og þess háttar, og svo markmið réttar skrifstofu var að kanna hvort
það var eða var ekki merki um einhvers konar.
Þetta var sérstök Rannsóknir Unit, þannig að það var hvít-kraga glæpastarfsemi,
það var meiri áhyggjur konar glæpi,
eitthvað sem felur í sér einhvers konar stafræna miðla, kemur í ljós að ekki margir
skrifa tölvupóst segja "ég gerði það."
Svo oft þessar réttar leit ekki snúa upp allt sem mikinn ávöxt,
en stundum fólk myndi skrifa slík bréf.
Svo stundum var viðleitni verðlaun.
>> En til þess að leiða allt til þessa réttar pset, munum við kynna í pset 4 smá grafík.
Svo þú taka sennilega þetta sem sjálfsagðan hlut, JPEG, GIF og eins þessa dagana,
en ef þér finnst virkilega um það, mynd, líkt andlit Rob er,
gæti verið fyrirmynd sem röð af punktum, eða punktar.
Nú, í að ræða andlit Rob er, það er alls konar litum,
og við byrjuðum að sjá einstaka punkta, annan hátt þekktur sem punkta,
þegar við byrjuðum að þysja inn
En ef við einfalda heiminn aðeins, og bara segja að þetta hér er Rob
í svörtu og hvítu, vel, til að tákna svart og hvítt að við getum bara notað tvöfaldur.
Og ef við ætlum að nota tvöfaldur, 1 eða 0, getum við tjáð þessa sömu mynd
af brosandi andliti Rob er með þessu mynstri bita: 11000011 táknar
hvítt, hvítt, svart, svart, svart, svart, hvítt hvítt.
Og svo er það ekki mikið stökk, þá að byrja að tala um litríka ljósmyndum.
Hlutir sem þú vilt sjá á Facebook eða fara með stafræna myndavél,
En vissulega, þegar það kemur að litum, þú þarft fleiri bita.
Og mjög algengt í heimi ljósmynda er að nota 1-bita lit,
eins og þetta bendir til, en 24-bita lit, þar sem þú færð í raun milljónir litum.
Svo eins og í tilfelli þegar við aðdregna í á auga Rob er,
það var einhver fjöldi af milljón mismunandi litríka möguleika.
>> Þannig að við munum kynna þetta í setja vandamál 4 eins og í walkthrough,
sem verður í dag kl 03:30 í stað venjulega 2:30 vegna fyrirlestur Föstudagur er hér.
En vídeó vilja vera á netinu, eins og venjulega, á morgun.
Við munum einnig kynna þér annað skráarsnið.
Þannig að þetta er vísvitandi ætlað að líta ógnvekjandi í fyrstu,
en þetta er bara einhver skjöl fyrir C strúktúr.
Það kemur í ljós að Microsoft, árum, hjálpaði vinsælan þetta snið,
kallað punktamynd skrá snið, BMP, og þetta var frábær-einfalt,
litríka grafísku skráarsnið sem var notað fyrir alveg sumir tími
og stundum enn fyrir veggfóður á skjáborð.
Ef þú heldur aftur til Windows XP og Rolling Hills og blár himinn,
það var yfirleitt BMP eða punktamynd ímynd og bitmaps
er gaman fyrir okkur vegna þess að þeir hafa a hluti fleiri flókið.
Það er ekki alveg eins einfalt og þetta net af er 0 og 1 er;
staðinn, þú hluti eins og haus í upphafi skrá.
Svo í öðrum orðum, inni. BMP skrá er a heild búnt af er 0 og 1 er,
en það er einhver viðbótar 0 og 1 er þarna.
Og það kemur í ljós að það sem við höfum líklega tekið sem sjálfsögðum hlut í mörg ár,
skrá snið eins. læknir eða. XLS eða. mp3 eða. mp4,
hvað skrá snið sem þú ert kunnug.
Jæja, hvað þýðir það jafnvel að vera skráarsnið?
Þar í lok dags, hafa allar þessar skrár sem við notum bara 0 og er 1
og kannski þeir 0 og er 1 tákna a, b, c, í ASCII eða þess háttar,
en í lok dagsins, það er bara er 0 og 1 er.
>> Svo menn bara stundum ákveðið að búa til nýtt skráarsnið
þar sem þeir staðla hvaða mynstur bita mun í raun þýða.
Og í þessu tilfelli hér, fólkinu sem hannaði punktamynd skrá snið
sagði að við fyrstu bæti í punktamynd skrá, sem táknuð með Offset 0, þar
það er að fara til vera sumir cryptically heitir breytilegum heitir bfType,
sem stendur bara fyrir punktamynd skrá tegund, hvaða tegund af punktamynd skrá þetta.
Þú getur ætlað, kannski frá annarri röð sem vega upp á móti 2, bæti númer 2,
hefur mynstur er 0 og er 1 sem sýnir hvað?
Stærð eitthvað, og það fer þaðan.
Svo setja vandamál 4, verður þú að vera gengið í gegnum sumir af þessum hlutum.
>> Við munum ekki enda umhyggju um þau öll, en eftir það fer að áhugavert
um línu eða bæti 54, rgbtBlue, grænn og rauður.
Ef þú hefur einhvern tíma heyrt skammstöfun RGB, rauður grænn blár, þetta er tilvísun í það.
Vegna þess að það kemur í ljós að þú getur mála alla liti regnbogans
við sumir samsetning af rauðu og bláu og grænu.
Og í raun, foreldrar í herberginu gæti muna sumir af elstu sýningarvél.
Þessa dagana, þú sérð bara 1 skær ljós koma út linsu.
En í dag, hafði þú rauða linsu, bláa linsu, og græna linsu
og saman þeir miðar á skjánum og myndaði litríka mynd.
Og oft grunnskóla og framhaldsskólum yrði þeim linsur
alltaf-svo-lítið Askew, svo þú varst konar sjá tvöfaldur eða þrefaldur myndir,
en það var hugmyndin. Þú hafði rautt og grænt og blátt ljós málverk mynd.
Og að sama lögmál er notað í tölvum.
>> Svo meðal áskoranir, þá fyrir þig í vandamál setja 4
ætlum að vera nokkur atriði, eitt er í raun að breyta stærð myndar.
Til að taka á mynstur er 0 og 1 er,
reikna út hver klumpur af er 0 og er 1 tákna það í uppbyggingu eins og þetta,
og þá reikna út hvernig á að endurtaka punktar: Liverpool, Chelsea, The Greens
inni þannig að þegar mynd lítur svona út í upphafi, getur litið svona stað eftir það.
Meðal annarra áskoranir líka, er að fara að vera að þú munt vera afhent
réttar mynd af raunverulegur skrá frá stafræna myndavél
og á þeim myndavél, einu sinni voru allt fullt af myndum.
Vandamálið er, eytt við tilviljun eða var myndin skemmd á einhvern hátt.
Slæmir hlutir gerast með stafræna myndavél, og svo að við afrita fljótt allt af er 0 og er 1
burt af því kort fyrir þig, spara þá allt í 1 stór skrá, og þá munum við afhenda þeim til þín
í vanda sett 4 þannig að þú getur skrifað forrit í C sem á að batna
allar þessar JPEG, helst.
Og það kemur í ljós að JPEG, jafnvel þótt þeir séu nokkuð flókið skrá snið,
þeir eru miklu flóknari en þetta brosandi andlit hér.
Það kemur í ljós að hvert JPEG byrjar með sömu mynstur er 0 og 1 er.
Svo nota while lykkju eða í lykkju eða svipuð,
þú getur iterate yfir allar 0 og 1 er í réttar mynd
og í hvert skipti sem þú sérð sérstaka mynstur sem er skilgreint í lýsingu Vandamálið SET er,
þú getur tekið, "Ó, hér er með mjög miklar líkur,
byrjun á JPEG, "og um leið og þú finnur sömu mynstur,
sumir tala um bæti eða kílóbæti eða megabæti síðar,
þú getur tekið, "Ooh! Hér er annað JPEG, er mynd sem ég tók eftir í fyrsta.
Leyfðu mér að hætta að lesa það fyrst skrá, byrja að skrifa þetta nýja. "
Og framleiðsla program fyrir pset 4 er að fara að vera eins og margir eins og 50 JPEG.
Og ef það er ekki 50 JPEG, þú hafa a hluti af lykkju.
Ef þú ert með óendanlega fjölda JPEG, hefur þú óendanlega lykkju.
Svo líka, verður alveg sameiginlegt mál.
Það er það sem er á sjóndeildarhringnum.
>> Spurningakeppni 0, á bak við okkur. Átta sig á, á netfangið mitt, sem ávallt er það gott fólk
sem eru bæði ánægð, svona hlutlaust, og sorglegt um próf 0 skipti.
Og þá skaltu ekki ná mér, höfuðið TFS, Zamyla, eigin TF þinn
eða einn af CAS að þú veist ef þú vildi eins og til að ræða hvernig hlutirnir fóru.
>> Svo til að heilla foreldra hér í herberginu,
hvað er CS50 bókasafn? Gott starf.
Hvað er CS50 bókasafn? Já? [Námsmaður svarar óskiljanlegur]
>> Jæja, gott. Svo er það prewritten setja af kóða sem við, starfsfólk, skrifaði
við bjóðum þér, að veita nokkrar algengar virkni.
Efni eins og fá mér band, fá mér int, allar aðgerðir sem eru taldar upp hér.
Byrjar nú byrjum við að virkilega taka þessa þjálfun hjól burt.
Þannig að við erum að fara að byrja að taka burt a "band" frá þér,
sem muna, var bara samheiti fyrir það raunverulegur gögn tegund? char *.
Svo fyrir foreldra, það var líklega - það er gott, svo char * við munum byrja að sjá
á skjánum því meir sem við fjarlægjum "band" úr orðaforða okkar,
að minnsta kosti þegar það kemur að því að í raun og veru að skrifa kóðann.
Á sama hátt munum við hætta að nota einhverja af þessum aðgerðum eins mikið,
því áætlanir okkar eru að fara að fá flóknari
frekar en bara að skrifa forrit sem sitja þar með hvetja blikka,
bíða fyrir the notandi til að slá eitthvað inn
Þú munt fá inntak þinn annars staðar frá.
Til dæmis, munt þú fá þá frá röð af bitum á heimamaður harður ökuferð.
Þú munt í staðinn fá þau í framtíðinni frá a net tengsl, sumir website einhvers staðar.
Svo skulum afhýða aftur þetta lag í fyrsta skipti, og draga upp CS50 tæki
og þessi skrá heitir CS50.h, sem þú hefur verið mikil þar í margar vikur.
>> En við skulum raunverulega sjá hvað er inni í þessu.
Svo er the toppur af the skrá í bláu bara allt fullt af athugasemdum,
ábyrgð upplýsingar og leyfisveitingar. Þetta er tegund af sameiginlegri fyrirmynd
í hugbúnaði, því að mikið af hugbúnaði þessa dagana er það sem er kallað "opinn uppspretta"
sem þýðir að einhver hefur skrifað kóðann
og gerði það í boði ókeypis, ekki bara að keyra og nota,
en í raun og veru að lesa og breyta og fella inn í eigin vinnu þína.
Svo það er það sem þú hefur verið að nota, opinn hugbúnaður,
að vísu í mjög litlu formi.
Ef ég skruna niður framhjá athugasemdum, þó munum við byrja að sjá nokkrar fleiri kunnugleg hluti.
Svo taka efst hér, að CS50.h skrá inniheldur a heild búnt af skrá haus.
Nú, flestir þessir sem við höfum ekki séð áður, en þar er
þekki, sem af þessu höfum við séð, að vísu stutta stund, svona langt?
Já, staðall bókasöfn. Stdlib.h hefur malloc,
svo þegar við byrjuðum að tala um dynamic minni úthlutun,
sem við munum koma aftur í næstu viku og höfum við ma að skrá.
Það kemur í ljós að bool og satt og ósatt í raun ekki til í C, í sjálfu sér,
nema þú látir þessa skrá hérna.
Þannig að við höfum, í margar vikur, verið meðal staðall bool.h
þannig að hægt er að nota hugmyndina um a bool, satt eða ósatt.
Án þetta, myndir þú verða að tegund af falsa það og nota int
og bara geðþótta ráð fyrir að 0 er ósatt og 1 er satt.
>> Nú, ef við skruna niður frekar, hér er skilgreining okkar á band.
Það kemur í ljós, eins og við höfum áður sagt, að þar sem * er skiptir ekki máli.
Þú getur meira að segja hafa pláss allt í kring.
Við, þessi önn hefur verið að stuðla að því eins og þetta til að gera ljóst að * hefur að gera með tegund.
En átta sig á, eins og algengt, ef ekki aðeins meira sameiginlegt, er að setja það þar
en virkni er það sama.
En ef við lesum niður frekar, láta 'taka a líta á að segja, GetInt,
því við notuðum það, ef til vill, áður en nokkuð annað á þessu misseri.
Og hér er GetInt. Þetta er það?
Þetta er frumgerð. Svo oft, höfum við sett frumútgáfur á boli af okkar. C skrár,
en þú getur líka sett frumgerð á skrá haus,. h skrá,
eins og þessi hér, svo að þegar þú skrifar nokkrar aðgerðir
sem þú vilt aðra til að vera fær um að nota, sem er einmitt raunin með CS50 bókasafn,
þú ekki bara framkvæma aðgerðir þínar í eitthvað eins CS50.c,
þú setur einnig frumútgáfur ekki efst á þessi skrá, en efst í haus skrá,
þá er haus skrá hvað vinir og samstarfsmenn eru,
með verulega fela í eigin númer þeirra.
Svo allan þennan tíma sem þú hefur verið þar öllum þessum frumgerðum
raun efst á skránni, en með því að þetta mikil eru vélbúnaður
að mestu afrit og deig Þessi skrá inn eigin.
Nú, hér er sumir nokkuð ítarlegar skjöl.
>> Við höfum nokkurn veginn sjálfgefið að GetInt fær int,
en það kemur í ljós að það er nokkur horn tilvikum, ekki satt?
Hvað ef notandinn slær í fjölda sem er alltof stór?
A quintillion, það bara getur ekki passa inni heiltala?
Hvað er gert ráð fyrir hegðun? Jæja, helst er það fyrirsjáanlegt.
Svo í þessu tilfelli, ef þú lest í raun smáletur,
þú munt sjá að ef línan er ekki hægt að lesa, þetta skilar INT_MAX.
Við höfum aldrei talað um þetta, en byggt á hástöfum hennar,
hvað er það, sennilega?
Það er stöðug, þannig að það er einhver sérstakur fasti sem er líklega lýst
í einni af þessum haus skrár Það er allt hærra í skránni,
og INT_MAX er líklega eitthvað eins og um það bil, 2 milljarðar króna.
Hugmyndin er sú að vegna þess að við þurfum einhvern veginn að þar með að eitthvað fór úrskeiðis,
Við, já, hafa 4 milljarða tölur ráða okkar,
neikvæð 2 milljarðar á allt að 2 milljarða króna, gefa eða taka.
Jæja, það er algengt í forritun er að stela bara einn af þessum tölum.
Kannski 0, kannski 2 milljarðar, kannski neikvæð 2 milljarðar.
Svo þú eyðir einn af hugsanlegum gildum þínum svo að þú getur skuldbinda sig til heimsins
að ef eitthvað fer úrskeiðis, mun ég aftur þetta frábær-stór gildi.
En þú vilt ekki að notandinn að skrifa eitthvað dulinn eins og "2, 3, 4 ..."
á mjög stór tala, þar sem þú alhæfa stað sem fasti.
Svo í raun, ef þú varst að vera anal á undanförnum vikum,
hvenær sem þú kalla GetInt, ættir þú að hafa verið að athuga með ef ástand.
Did the notandi tegund á INT_MAX, eða nánar tiltekið,
gerði GetInt RETURN INT_MAX? Vegna þess að ef það gerði það,
sem þýðir í raun að þeir vildu ekki slá það, eitthvað fór úrskeiðis í þessu tilfelli.
Svo er þetta það sem er almennt þekktur sem "Sentinel" gildi, sem þýðir bara sérstakt.
>> Jæja, við skulum nú snúa á við. C skrár.
The C skrá hefur verið í vélinni í einhvern tíma,
og, í raun, tækið hefur það precompiled fyrir þig
í þann sem við kallað "mótmæla kóða,"
en það bara skiptir ekki máli fyrir þig þar sem það er vegna þess að kerfið veit,
í þessu tilfelli, þar sem það er, að tæki.
En við skulum fletta niður núna til GetInt, og sjá hvernig GetInt hefur verið að vinna allan þennan tíma.
Svo hér við hafa svipaðar athugasemdir frá áður.
Leyfðu mér að stækka bara kóðann hluti,
og það sem við höfum fyrir GetInt er eftirfarandi.
Það tekur enga inntak og skilar int, meðan (satt), þannig að við höfum vísvitandi óendanlega lykkju
en væntanlega munum við brjótast út úr þessu á einhvern hátt, eða fara úr þessum.
Svo skulum sjá hvernig þetta virkar. Jæja, virðast við að vera með GetString
í þessari fyrstu línu inni í lykkju, 166.
Þetta er nú gott starf því undir hvaða kringumstæðum
gæti GetString aftur þetta sérstaka leitarorð, NULL?
Ef eitthvað fer úrskeiðis. Hvað gæti farið úrskeiðis þegar þú hringir eitthvað eins GetString?
Já? [Námsmaður svar, óskiljanlegur] >> Já. Svo kannski ekki malloc.
Einhvers staðar undir hetta GetString er starf malloc,
sem úthlutar minni, sem gerir tölva birgðir
allir stafir sem notandinn slær inn á lyklaborðinu.
Og býst við að notandi hafði allt fullt af frítíma
og slegið meira, til dæmis, en 2 milljarða stafi.
Fleiri stafir en tölva er jafnvel vinnsluminni.
Jæja, GetString að vera fær um að þar með að þér,
jafnvel ef þetta er frábær, frábær sjaldgæfar horn tilfelli.
Það hefur einhvern veginn að geta séð þetta, og svo GetString,
Ef við förum til baka og lesa skjöl hennar, er í raun aftur null.
Nú ef GetString ekki með því að fara NULL, GetInt er að fara til að mistakast
með því að fara INT_MAX, bara sem Sentinel.
Þetta eru bara mannleg samninga. The eini vegur þú vildi vita að þetta er raunin
er með því að lesa gögn.
Svo skulum við fletta niður þar sem int er í raun GotInt.
>> Svo ef ég skruna niður aðeins lengra, í línu 170 höfum við athugasemd yfir þessum línum.
Þannig að við lýsa, í 172, int n og char c, og þá er þetta nýtt hlutverk
sem sum ykkar hafa rakst áður en sscanf.
Þetta stendur fyrir band skanna f.
Með öðrum orðum, gefa mér band og ég mun skanna það fyrir stykki af upplýsingar um áhuga.
Svo hvað þýðir það? Jæja, býst við að ég slá í, bókstaflega, 1 2 3 á lyklaborðinu,
og högg koma inn í. Hvað er gögn tegund 1 2 3 þegar aftur með GetString?
Það er augljóslega band, ekki satt? Ég fékk band, svo 1 2 3 virkilega "1 2 3"
með \ 0 í lok þess. Það er ekki int.
Það er ekki tala. Það lítur út eins og númer en það er í raun ekki.
Svo hvaða hjartarskinn GetInt að gera? Það þarf að skanna þessi band vinstri til hægri,
1 2 3 \ 0, og einhvern veginn umbreyta það til raunveruleg heiltölu.
Nú, getur þú reikna út hvernig á að gera þetta.
Ef þú heldur aftur til pset 2, fékk væntanlega smá þægilegt
með keisaranum skatt eða vigenere svo þú getur iterate á streng,
þú geta umbreyta chars til ints með velja. Það er a heild einhver fjöldi af vinna.
Hvers vegna ekki að kalla virka eins sscanf sem gerir það fyrir þig?
Svo ráð sscanf rifrildi, í þessu tilfelli heitir lína, sem er band.
Þú tilgreinir þá, innan gæsalappa, mjög svipað printf,
hvað þú átt von á að sjá í þessum streng?
Það sem ég er að segja hér er, búast ég að sjá heiltala og kannski staf.
Og við munum sjá hvers vegna þetta er raunin í bara smá stund.
Það kemur í ljós að þetta tákn er nú minnir á efni
við byrjuðum að tala um rúmlega viku síðan.
>> Hvað er & n og & C að gera fyrir okkur hér? [Námsmaður svarar óskiljanlegur]
>> Já. Það er að gefa mér heimilisfang n og heimilisfang c.
Nú, hvers vegna er það mikilvægt? Jæja, þú veist að með aðgerðum í C
þú getur alltaf farið á gildi eða ekkert gildi á öllum.
Þú getur skila int, a band, a fljóta, á char, hvað sem er.
Eða þú getur aftur tóm, en þú getur aðeins skila 1 hlutur hámarks.
En hér viljum sscanf aftur mig kannski int heiltala,
og einnig bleikju, og ég ætla að útskýra hvers vegna bleikju í smástund.
Svo þú vilt í raun f að skila 2 hluti, það er bara ekki hægt í C.
Svo er hægt að vinna í kringum það með því að láta í 2 tölur,
því um leið og þú hönd aðgerð 2 tölur, hvað getur þessi aðgerð að gera við þá?
Það getur skrifað þær tölur. Þú getur notað * aðgerð og "fara þangað" til hvers þeirra heimilisföng.
Það er tegund af þessu afturvirkt kerfi, en mjög algengt að breyta gildi breytur
í meira en bara 1 stað, í þessu tilviki 2.
Nú, eftir að ég er að leita að == to1, og síðan aftur N ef það er, í raun, meta til satt.
Svo hvað er í gangi? Jæja, tæknilega, allt sem við viljum í raun að gerast í GetInt er þetta.
Við viljum að flokka, svo að segja, við viljum lesa strenginn
"1 2 3" og ef það lítur út eins og það er númer þarna,
hvað við erum að segja sscanf að gera er að setja þessi tala, 1 2 3, í þessari breytu n fyrir mig.
Hvers vegna þá, gerði ég þetta eins og heilbrigður?
Hvað er hlutverk líka segja sscanf, þú gætir líka fengið þér staf hér.
[Námsmaður séð óskiljanlegur] >> Ekki - kommu gæti unnið.
Við skulum halda að hugsun um stund. Hvað annað?
[Námsmaður, óskiljanlegur] >> Svo góður hugsun, gæti það verið NULL staf.
Það er reyndar ekki í þessu tilviki. Já? [Námsmaður, óskiljanlegur]
>> >> ASCII. Eða leyfðu mér að alhæfa enn frekar.
% C er bara til villa-stöðva.
Við viljum ekki að það að vera persóna eftir fjölda,
en hvað þetta gerir mig að gera er eftirfarandi:
Það kemur í ljós að sscanf, auk geyma gildi í N og C, í þessu dæmi hér,
hvað einnig er er það skilar fjölda af breytum það að setja gildi inn
Svo ef þú slærð aðeins í 1 2 3 og svo aðeins% d er að fara að passa
og aðeins N fær geymd með gildi eins og 1 2 3 og ekkert fær setja í c;
C enn sorp gildi, svo að segja.
Sorp því það er aldrei verið forsniðin sem sumir gildi.
Svo í því tilfelli, sscanf skilar 1, því ég byggja einn af þeim ábendingum,
í því tilviki, frábært. Ég er með int, svo ég losa línuna til að losa minni
að GetString úthlutað í raun, og þá skal ég aftur n.
Annars, ef þú alltaf furða þar sem reyna yfirlýsing kemur, kemur hérna.
Ef, hins vegar af gerð I í 1 2 3 foo,
bara nokkrar af handahófi röð af texta, sscanf er að fara að sjá,
ooh, tala, ú, tala, ú, tala, ú - f.
Og það er að fara að setja 1 2 3 í n.
Það er að fara að setja f í C, og síðan aftur 2.
Þannig að við höfum bara með einföldu skilgreiningu á hegðun scanf er,
mjög einföld leið - og, flókið við fyrstu sýn, en í lok dagsins,
frekar einfalt kerfi að segja, er það að int, og ef svo er, er að það eina sem ég fann?
Og hvítt rúm er hér vísvitandi. Ef þú lest skjölin fyrir sscanf,
það segir þér að ef þú setur stykki af hvítu plássi í upphafi eða í lok,
sscanf of vilja leyfa notandi, hver sem ástæðan er, að lemja rúm 1 2 3, og það mun vera lögmætur.
Það mun ekki æpa á notanda bara vegna þess að þeir högg the rúm í upphafi eða í lok,
sem er bara svolítið meira notendavænt.
>> Einhverjar spurningar, þá á GetInts? Já?
[Námsmaður spurning, óskiljanlegur]
>> Góð spurning. Hvað ef þú gafst bara í bleikju, eins og f, og högg koma inn í
án þess að slá 1 2 3, hvað telur þú að hegðun þessa línu af kóða myndi þá vera?
Svo sscanf geta snert það líka, vegna þess að í því tilviki,
það er ekki að fara að fylla N eða C, það er að fara að stað aftur 0.
Í því tilviki, ég er einnig að veiða þá atburðarás, vegna þess að vænt gildi sem ég vil er 1.
Ég vil bara 1, og einungis 1 hlutur til að fylla. Góð spurning. Aðrir?
>> Allt í lagi, þannig að við skulum ekki fara í gegnum allar aðgerðir hér,
en sá sem virðist vera, kannski, að eftir er áhugi
er GetString því það kemur í ljós að GetFloat, GetInt,
GetDouble, GetLongLong ALL Punt mikið af virkni þeirra til GetString.
Svo skulum taka a líta á hvernig hann er útfærður hér.
Þetta eitt lítur svolítið flókið en það notar sömu grundvallaratriði
að við byrjuðum að tala um í síðustu viku. Svo í GetString,
sem tekur ekki rök sem á tómið upp hér,
og það skilar streng, þannig að ég er að lýsa a band heitir biðminni.
Ég í raun ekki vita hvað það er að fara til vera notaður fyrir enn, en við munum sjá.
Útlit eins og getu er sjálfgefið, 0, ekki alveg viss hvar þetta er að fara.
Ekki viss hvað N er að fara til vera notaður fyrir enn.
En nú er að fá aðeins meira áhugavert, svo í línu 243,
við að lýsa int c, Þetta er tegund af heimskulegt smáatriði.
A bleikju er 8 bitar, og 8 bitar geta geymt hversu margar mismunandi gildi?
256.. Vandamálið er, ef þú vilt hafa 256 mismunandi ASCII stafi,
sem það eru, ef þú hugsa til baka, og þetta er ekki eitthvað til að leggja á minnið.
En ef þú heldur aftur að stór ASCII töfluna við höfðum vikum,
voru, í því tilviki, 128 eða 256 ASCII stafi.
Við notuðum öll mynstur er 0 og 1 er upp.
Það er vandamál ef þú vilt vera fær um að uppgötva villu.
Vegna þess að ef þú ert þegar að nota 256 gildi fyrir stafi,
þú ekki í raun að skipuleggja fram í tímann, því nú þú hefur enga leið til að segja,
"Þetta er ekki legit persóna, þetta er einhver röng skilaboð."
Svo er það sem heimurinn er, þeir nota næsta stærsta gildi,
eitthvað eins og int svo þú hafa a brjálaður fjölda bita,
32 fyrir 4 milljarða möguleg gildi, þannig að þú getur einfaldlega endað með,
meginatriðum, 257 af þeim, 1 sem hefur einhverja sérstaka merkingu og villu.
>> Svo skulum sjá hvernig þetta virkar. Í línu 246, hef ég þetta stóra meðan lykkja
sem kallar fgetc, f merkingu skrá, getc, og þá stdin.
Skrúfjárn út það er bara nákvæmari leið til að segja "lesa inntak frá lyklaborðinu."
Standard inntak þýðir hljómborð, staðall framleiðsla þýðir skjár,
og staðalskekkja, sem við munum sjá í pset 4, þýðir skjáinn
en sérstaka hluta skjásins þannig að það er ekki conflated
með raunverulegum framleiðsla sem þú ætlaðir að prenta, en meira um það í framtíðinni.
Svo þýðir fgetc bara lesa einn staf frá lyklaborðinu, og geyma hann þar?
Geyma það í c, og þá stöðva, þannig að ég er bara með einhverja Boolean conjunctions hér,
athuga að það er ekki jafn \ n, þannig að notandi hefur högg inn.
Við viljum að hætta á þeim tímapunkti, enda hliðar, og við viljum líka að athuga
fyrir sérstaka stöðug EOF, sem ef þú veist eða giska - hvað þýðir það standa fyrir?
Lok skrá. Svo er af þessu tagi nonsensical, því ef ég er að skrifa á lyklaborðinu,
Það er í raun engin skrá sem taka þátt í þessu,
en þetta er bara svona almenna hugtakið notað til að þýða
að ekkert annað er að koma frá fingrum mannsins er. EOF. Lok skrá.
Sem innskot, ef þú hefur einhvern tíma högg stjórna d á lyklaborðinu,
ekki það að þú þyrftir enn, þú hefur högg stjórna c.
En stjórn D sendir sérstakan fastann EOF.
>> Svo nú höfum við bara sumir dynamic minni úthlutun.
Svo ef n + 1> getu, nú ég útskýra n.
N er bara hversu mörg bæti eru í biðminni,
strengurinn sem þú ert að byggja upp frá notanda.
Ef þú ert með fleiri stafi í biðminni en þú hefur getu í biðminni,
innsæi, hvað við þurfum að gera þá er að úthluta meiri getu.
Ég ætla að Lögð gegnum sumir af the tölur hér
og einblína á þessari aðgerð hér.
Þú veist hvað malloc er, eða að minnsta kosti almennt þekki.
Taktu giska hvað realloc gerir. [Námsmaður svar, óskiljanlegur]
>> Já. Og það er ekki alveg að bæta minni, það reallocates minni sem hér segir:
Ef það er enn pláss í lok band til að gefa þér meira af því minni
en það gefur upphaflega þig, þá munt þú fá þessi auka minni.
Svo getur þú bara að setja strengi stafi aftur til baka til baka til baka.
En ef það er ekki raunin, því þú beðið of lengi
og eitthvað af handahófi fékk plopped í minni þar, en það er auka
minni hérna, það er allt í lagi. Realloc er að fara að gera allt þungt að lyfta fyrir þig,
færa strenginn sem þú hefur lesið í svona langt áfram,
setja hana niður þar, og þá gefa þér nokkrar fleiri flugbraut á þeim tímapunkti.
Svo með bylgju af hendi, láta mig segja að það GetString er að gera
það er að byrja með litlum buffer, kannski 1 staf,
og ef notandinn slær í 2 stafi, GetString endar
starf realloc og segir, "Ooh, 1 eðli var ekki nóg.
Gefðu mér 2 stafi. ' Síðan ef þú lest í gegnum rökfræði lykkju,
það er að fara að segja "Ooh, notandi slegið í 3 stöfum.
Gefðu mér nú ekki 2 en 4 stafir, þá gefa mér 8, þá gefa mér 16 og 32.
Sú staðreynd að ég er tvöföldun getu í hvert sinn
þýðir að biðminni er ekki að fara að vaxa hægt.
Það er að fara að vaxa frábær fljótur, og það gæti verið kostur á því?
Hvers vegna fæ ég tvöfalda stærð biðminni, jafnvel þótt notandinn
gæti bara þurft 1 auka staf úr lyklaborðinu?
[Námsmaður svar, óskiljanlegur]. >> Hvað er það?
Einmitt. Þú þarft ekki að vaxa það eins oft.
Og þetta er bara eins konar - þú verja veðmál þín hér.
Hugmyndin er að þú vilt ekki að hringja realloc mikið, vegna þess að það hefur tilhneigingu til að vera hægur.
Í hvert sinn sem þú biður um stýrikerfi fyrir minni, eins og þú munt fljótlega sjá
í framtíðinni vandamál setja, gæta þess að taka nokkurn tíma.
Svo lágmarkað tíma, jafnvel ef þú ert að sóa pláss, tilhneigingu til að vera gott.
>> En ef við lesum í gegnum það sem kemur síðas hluti af GetString hér,
og aftur, að skilja hvert einasta lína hér er ekki svo mikilvægt í dag.
En eftir að það kallar á endanum malloc aftur, og það úthlutar
nákvæmlega eins og margir bæti sem það þarf á að halda band
og þá kastar burt með því að hringja ókeypis, er of stór biðminni,
ef það örugglega fékk tvöfaldast of mörgum sinnum.
Í stuttu máli, það er hvernig GetString hefur verið að vinna allan þennan tíma.
Allt það gerir er að lesa einn staf í einu aftur og aftur og aftur
og í hvert skipti sem það þarf nokkrar auka minni, biður það stýrikerfi fyrir það með því að kalla realloc.
Einhverjar spurningar? Allt í lagi.
>> An árás. Nú þegar við skiljum ábendingum, eða að minnsta kosti
eru sífellt þekkja ábendingum,
skulum íhuga hvernig allur heimurinn byrjar að hrynja
ef þú ert ekki alveg verjast andstæðinga notendur,
fólk sem eru að reyna að reiðhestur inn í kerfið.
Fólk sem eru að reyna að stela hugbúnað með því að sniðganga sumir skráning merkjamál
að þeir gætu annars hafa að slá inn
Taka a líta á þetta dæmi hér, sem er bara C kóða
sem hefur fall helstu neðst, sem kallar fall foo,
og hvað er það sem liggur að foo? [Nemandi] Ein rök.
>> Single rök. Svo argv [1], sem þýðir fyrsta orðið sem notandinn slegið
á stjórn lína eftir a.out eða hvað forritið heitir.
Svo foo, efst, tekur í char *, en char * er bara hvað?
String. Það er ekkert nýtt hér, og það band er geðþótta vera kölluð Bar.
Í þessari línu hér, bleikju C [12], í konar hálf-tækni ensku, hvað er þetta lína að gera?
Array af -? Litur. Gefðu mér fjölda af 12 stöfum.
Svo við gætum kalla þetta biðminni. Það er tæknilega kallast C, en biðminni í forritun
þýðir bara fullt af plássi sem hægt er að setja smá dót tommur
>> Þá loks, memcpy, höfum við ekki notað áður.
En þú getur sennilega giska á hvað það gerir. Það afritar minni.
Hvað þýðir það að gera? Jæja, afrit það virðist bar, inntak þess, í C,
en aðeins upp að lengd bar.
En það er padda hér.
Jæja, svo tæknilega við ættum í raun að gera strlen (bar) x sizeof (char), það er rétt.
En í versta tilfelli hér, við skulum gera ráð fyrir að that's - svo allt í lagi.
Þá er það 2 bugs. Svo sizeof (char), allt í lagi, við skulum gera þetta aðeins stærra.
Svo nú er það enn a padda sem er hvað?
[Námsmaður svar, óskiljanlegur] >> Athuga fyrir hvað? Jæja, svo við ættum að vera að skoða
for null vegna slæmur hlutir gerast þegar bendillinn er NULL,
Þar sem þú might endir upp að fara þangað, og þú ættir aldrei að fara að NÚLL
með dereferencing það með * rekstraraðila.
Svo það er gott, og hvað annað eigum við að gera? Rökrétt er það galli hér líka.
[Námsmaður svar, óskiljanlegur]
>> Svo athuga hvort argc ≥ 2?
Jæja, þannig að það er 3 bugs í þessu verkefni hér.
Við erum ekki að athuga hvort notandinn í raun slegið á allt í argv [1], gott.
Svo er það þriðji galla? Já?
[Námsmaður svar, óskiljanlegur] >> Good.
Svo við athugum eitt dæmi. Við skoðuðum óbeint gera afrit ekki meira minni
en myndi fara yfir lengd bar.
Svo ef band notandinn slegið inn er 10 stafir að lengd,
þetta er að segja, aðeins afrita 10 stafi. "
Og það er allt í lagi, en hvað ef notandinn slegið inn orð á the hvetja
eins og 20 stafa orð, þetta er, segja copy 20 stafi af bar í það?
c, annars þekkt sem biðminni okkar, sem þýðir að þú skrifaði bara gögn
til 8 bæti stöðum sem þú átt ekki,
og þú átt ekki þá í þeim skilningi að þú aldrei úthlutað þeim.
Svo er þetta það sem er almennt þekktur sem gnægð biðminni árás,
eða biðminni umframmagn árás og árás það er í þeim skilningi að ef notandi
eða forrit sem kallar á virka er að gera þetta af illgirni,
hvað gerist í raun næst mætti ​​alveg slæmt.
>> Við skulum taka a líta á þessari mynd hér.
Þessi mynd sýnir stafla þinn af minni.
Og muna að í hvert skipti sem þú hringja í aðgerð,
þú færð þetta litla ramma á mánudaginn og þá annað og þá annað og þá annað.
Og svona langt við höfum bara svona abstracted þetta burt eins og rétthyrninga
annaðhvort þar á borðinu eða á skjánum hér.
En ef við rennum inn á eina af þessum ferhyrninga,
Þegar hringt er virka foo, snýr það út að það er meira á stafla
innan þess ramma og að rétthyrningur
en bara x og y og a og b, eins og við var að tala um skipti.
Það kemur í ljós að það eru sumir lægra stigi upplýsingar,
meðal þeirra aftur heimilisfang.
Svo kemur í ljós þegar helstu kallar foo, helstu að upplýsa foo
hvaða tölu helstu er í minni tölvu.
Því annars, eins fljótt og foo er gert að framkvæma, eins og í þessu tilfelli hér,
Þegar þú nærð þessari loka hrokkið Brace í lok foo,
hvernig Heck er foo veit hvar stjórn áætlunarinnar er ætlað að fara?
Það kemur í ljós að svarið við þeirri spurningu er að Red rétthyrningur hér.
Þetta bendi, og það er allt í tölvunni til að geyma, tímabundið,
á svokölluðu stafla heimilisfang helstu svo að um leið og foo er gert framkvæmd,
tölva veit hvar og hvaða línu í haf til að fara til baka.
Vistað ramma bendi tengist álíka þessu.
Char * Bar hér stendur hvað?
Jæja, nú er þetta bláa hluti hér er ramma Foo er, hvað er barinn?
Jæja, svo bar er bara rök á foo virka.
>> Svo nú erum við aftur á kunnuglega mynd.
Það er meira efni og fleiri truflanir á skjánum
en þetta ljósblátt hluti er það sem við höfum verið að teikna á chalkboard fyrir eitthvað eins skipti.
Það er rammi fyrir foo og eina í það núna er barinn,
sem er þessa breytu.
En hvað ætti að vera í mánudaginn, samkvæmt þessum kóða hér?
Bleikju C [12]. Þannig ættum við einnig að sjá 12 veldi minni,
úthlutað til breytu sem heitir c.
Og reyndar við höfum það á skjánum.
The mjög toppur það er C [0], og svo höfundur þessarar myndinni
ekki nennir að teikna alla ferninga en það eru örugglega 12 þarna
því ef þú lítur neðst til hægri, C [11], ef þú telja frá 0, er 12 svo bæti.
En hér er vandamálið: Í hvaða átt er C vaxa?
Raða af toppi og niður, ekki satt? Ef það byrjar efst og vex til botns,
ekki líta út eins og við fórum okkur mikið flugbraut hér yfirleitt.
Við höfum konar mála okkur út í horn,
og C [11] er rétt upp gegn bar, sem er rétt upp við stafla ramma músina,
sem er rétt upp gegn aftur heimilisfang, það er ekki meira pláss.
Svo er það óbeint, þá, ef þú skrúfa upp,
og þú ert að reyna að lesa 20 bæti í 12-bæti biðminni?
Hvar eru þeir 8 til viðbótar bæti að fara?
Inni allt annað, sum hver er frábær mikilvægt.
Og mikilvægast, hugsanlega er rauði kassi þar, aftur heimilisfang.
Þar geri ráð fyrir að þú ert annaðhvort af tilviljun eða adversarially
skrifa þá 4 bæti, sem bendillinn heimilisfang,
ekki bara við sorp, en með númer sem gerist að tákna raunverulegt heimilisfang í minni?
Hvað er implicaiton, rökrétt?
[Námsmaður svarar óskiljanlegur] >> Einmitt. Þegar foo skilar
og smellir sem hrokkið borsveif, forritið er að fara að halda áfram að snúa ekki aftur til Main,
það er að fara að fara aftur til hvað heimilisfang í því rauða reitnum.
>> Nú, í að ræða kringum hugbúnaður skráningu,
hvað er heimilisfangið sem er að koma aftur til að virka
sem venjulega fær kallað eftir að þú hefur greitt fyrir hugbúnaðinn og inputted skráning merkjamál þinn?
Þú getur konar bragð tölvuna í ekki að fara hér, en í staðinn, að fara upp hér.
Eða, ef þú ert virkilega snjall, að andstæðingurinn getur í raun slá á lyklaborð,
til dæmis, ekki raunveruleg orð, ekki 20 stafir, en geri ráð fyrir að hann eða hún
tegundir í sumum stöfum sem tákna kóða?
Og það er ekki að fara að vera C kóða, það er að fara að vera stafir
sem tákna tvöfaldur vél númer, er 0 og 1 er.
En geri ráð fyrir að þeir eru sniðug nóg til að gera það, að einhvern veginn líma inn í GetString hvetja
eitthvað sem er í raun saman kóða,
og síðustu 4 bytes skrifa það aftur heimilisfang og hvaða heimilisfang er að inntak að gera?
Það geymir í þessum rauða rétthyrningur heimilisfang fyrsta bæti í biðminni.
Svo þú verður að vera mjög sniðug og það er mikið af réttarhald og villa
fyrir slæmt fólk þarna úti, en ef þú getur fundið út hversu stórt þetta biðminni er,
þannig að síðustu bæti í inntak sem þú gefur að áætluninni
verður að vera jafngild á heimilisfang upphafi þýðingaminni,
þú getur gert þetta. Ef við segjum venjulega, halló, og \ 0, það er það sem endar í biðminni.
En ef við erum meira snjall, og við að fylla þessi buffer með það sem við munum generically kalla árás númer,
A, A, A, A: Attack, árás, árás, árás, þar sem þetta er bara eitthvað sem gerir eitthvað slæmt.
Jæja, hvað gerist ef þú ert virkilega snjall, þú might gera þetta:
Í rauða reitnum hér er röð af tölum: 80, CO, 35, 08.
Takið eftir því að það passar við fjölda sem er hérna.
Það er í öfugri röð, en meira um það seinna.
Takið eftir að þessi aftur veffang vísvitandi breytt
til að jafna tölu upp hér, ekki heimilisfang Main.
Svo ef slæmur strákur er frábær sviði, hann eða hún er að fara að setja í þeim árás númer
eitthvað eins og, "Eyða öllum skrám notandans."
Eða 'Afrita the lykilorð, eða "Búa til notanda sem ég get skráð þig inn.'
Nokkuð á öllum, og þetta er bæði hætta og kraftur C.
Þar sem þú hefur aðgang að minni með ábendingum
og þú getur því að skrifa eitthvað sem þú vilt inn í minni í tölvu.
Þú geta gera a tölva gera neitt sem þú vilt með því einfaldlega
hafa það hoppa um innan eigin minni hennar.
Og svo í dag, svo mörg forrit og svo margir vefsíður sem eru í hættu
sjóða niður til fólks að taka sér þetta.
Og þetta kann að virðast eins og a frábær-háþróuð árás,
en það þýðir ekki alltaf að byrja svona.
>> Staðreyndin er sú að það sem vont fólk yfirleitt gera er
hvort sem það er forrit á stjórn lína eða GUI forrit eða vefsíðu,
er þú byrjar bara að veita bull.
Þú slærð inn í mjög stórt orð í leitarreitinn og ýttu á Enter,
og að bíða til að sjá hvort vefsvæðið hrun.
Eða þú að bíða til að sjá hvort forritið birtist sumir villuboð.
Vegna þess að ef þú færð heppinn, eins og slæmur strákur,
og þú gefur nokkrar brjálaður inntak sem hrynur forritið,
sem þýðir að forritarinn gerði ekki ráð fyrir slæma hegðun
sem þýðir að þú getur sennilega með nóg áreynsla,
nóg prufa og villa, reikna út hvernig á að heyja nákvæmari árás.
Svo eins og mikill hluti af öryggi er ekki bara að forðast þessar árásir að öllu leyti, en finna þeim
og í raun og veru að horfa á annálum og sjá hvað brjálaður aðföng hafa fólk slegið inn vefsíðuna þína.
Hvaða leitarorð hafa fólk slegið inn vefsíðuna þína í von um að barmafullur sumir biðminni?
Og þetta snýst allt um að einföld grunnatriði hvað er fylki,
og hvað þýðir það að úthluta og nota minni?
Og fyrir það, líka er þetta.
>> Svo við skulum bara litið inni í disknum enn og aftur.
Svo þú manst úr viku eða tvær fyrir að þegar þú draga skrár
að endurvinna kassi eða ruslakarfa, hvað gerist?
[Nemandi] Ekkert. >> Já, nákvæmlega ekkert. Að lokum ef þú keyrir lítið
á rúm diskur, Windows eða Mac OS mun byrja að eyða skrám fyrir þig.
En ef þú dregur eitthvað í það, þá er það alls ekki öruggur.
Allt roomate, vinur eða fjölskyldumeðlimur þinn þarf að gera er tvöfaldur smellur, og voila.
Það er allt sketchy skrár sem þú reyndir að eyða.
Svo mest af okkur að minnsta kosti vita að þú þarft að hægri smella eða stjórna smella
og tæma rusl, eða eitthvað svoleiðis.
En jafnvel þá, sem er ekki alveg að gera the bragð.
Því hvað gerist þegar þú ert með skrá á harða disknum þínum
sem felur í sér nokkra Word skjal eða einhver JPEG?
Og þetta táknar harða diskinum, og við skulum segja að þetta Sliver hér táknar að skrá,
og það samanstendur af heild búnt af er 0 og 1 er.
Hvað gerist þegar þú ekki aðeins draga að skrá í ruslatunnuna eða endurvinna kassi,
en einnig tæma það?
Raða af engu. Það er ekki nákvæmlega ekkert núna.
Nú er það bara ekkert, því smá eitthvað gerist í formi þessa töflu.
Svo er það einhvers konar gagnagrunni eða borð inni minni í tölvu
sem hefur í raun 1 dálkur að skrá nöfn,
og 1 dálkur fyrir staðsetningu skrárinnar, þar sem þetta gæti verið staðsetning 123, bara af handahófi númer.
Þannig að við gætum haft eitthvað eins x.jpg og staðsetningu 123.
Og hvað gerist svo, þegar þú tæma ruslið?
Það fer í burtu. En það þýðir ekki að fara í burtu er 0 og 1 er.
>> Svo er það, þá er tengingin pset 4?
Jæja, með pset 4, bara vegna þess að við höfum óvart eytt
The samningur glampi nafnspjald sem hafði allar þessar myndir,
eða bara vegna varð það með óheppni skemmd,
þýðir ekki að 0 og er 1 eru ekki enn.
Kannski nokkrar þeirra hafa tapast vegna þess að eitthvað fékk skemmd
í þeim skilningi að sumir er 0 varð 1 og 1 varð 0 er.
Slæmur hlutur getur gerst vegna buggy hugbúnaði eða gölluð vélbúnaði.
En margir af þeim bita, jafnvel 100% af þeim eru enn þarna,
það er bara að tölvan eða myndavélin veit ekki hvar JPEG 1 byrjaði
og þar JPEG 2 byrjaði, en ef þú, forritari,
vita, með smá kunnátta, ef þessir JPEG eru eða hvað þeir líta út,
þú getur greina 0 og er 1 og segja "Ooh. JPEG. Ooh, JPEG.
Þú getur skrifað forrit með þannig bara fyrir eða á meðan lykkja
að batna hvert og eitt af þessum skrám.
Lexían þá er að byrja að "öruggur" eyða skrám
Ef þú vilt koma í veg fyrir þetta með öllu. Já?
[Námsmaður spurning, óskiljanlegur]
>> Hafa meira minni en þú gerðir áður -
Oh! Góð spurning. Svo hvers vegna þá, eftir að tæma ruslið,
Hefur tölvan þín að segja þér að þú ert með fleiri pláss en þú gerðir áður?
Í hnotskurn, því það er að ljúga. Meira tæknilega, þú þarft meira pláss.
Því nú er sagt, er hægt að setja annað efni sem að skrá einu sinni var,
en það þýðir ekki að bita eru að fara í burtu,
og það þýðir ekki að bita eru breytt allt 0 er, til dæmis, til verndar.
Á hinn bóginn, ef þú "Öruggur" eyða skrá, eða líkamlega eyðileggja tækið,
sem er í raun eina leiðin, stundum, í kringum það.
Svo hvers vegna eigum við ekki að fara á þessi hálf-ógnvekjandi huga, og við munum sjá þig á mánudaginn.
CS50.TV