[Powered by Google Translate] [ĠIMGĦA 5]
[David J. Malan, Università ta 'Harvard]
[Dan huwa CS50.] [CS50.TV]
[Mara] Hu tinsab; dwar dak, I do not know.
[Man] Mela xi do we know?
[Mara] Li fil 09:15, Ray Santoya kien fil-ATM.
[Man] Għalhekk il-kwistjoni hija, dak li kien hu tagħmel fil 09:16?
[Mara] Shooting l mm 9 fuq xi ħaġa.
Forsi huwa ra l-sniper.
[Man] Jew li kien jaħdem miegħu.
[Mara] Stenna. Mur lura 1.
[Man] Liema taħseb?
[♫ ♫ mużika suspenseful]
[Mara] Ġib wiċċu up. Full screen.
[Man] nuċċalijiet tiegħu. >> Hemm riflessjoni.
[♫ ♫ mużika suspenseful]
[Man] Dik hija l-tim tal-baseball Nuevita s. Dak il-logo tagħhom.
[Mara] U hu tkellem lil min l-ilbies li ġakketta.
>> [David Malan] Għalhekk, din hija CS50 ġimgħa 5, u llum aħna rovina daqsxejn ta 'televiżjoni u movie għalik.
Allura meta inti qed jaraw juru bħal dan wieħed hawn,
u l-kobob jgħidu "Tista 'tnaddaf li sa?" jew "Tittejjeb,"
m'hemm l-ebda ttejjeb fid-dinja reali.
Fil-fatt, dak li int verament tikseb hija ftit xi ħaġa bħal din.
Stajt jinġibed jibdew waħda mill-ritratti persunal mill-paġna.
Dan huwa programm imsejjaħ Photoshop. Dan huwa 1 ta '2 Bowdens,
1 ta '3 Bowdens attwalment, illum, għaliex għandna Mrs Bowden hawnhekk ukoll, bil Rob u Paul.
Iżda hawnhekk huwa Rob fuq l-iskrin, u jekk aħna zoom fl fuq dak glint hu dejjem kellu fl-għajnejn tiegħu,
dak li inti fil-fatt tara hija li dak li tara li dak ikollok.
Dan huwa "mtejba," hekk "CSI" għandhom hija daqsxejn ħażina.
Hemm wieħed clip oħra, jekk nistgħu pick fuq "CSI" biss ftit itwal.
Dan huwa wieħed frażi sbieħ li utter minn issa jekk inti tixtieq li
sod tekniku mal-ħbieb tiegħek meta, verament, inti qed tgħid assolutament xejn.
>> [Man] Għal ġimgħat stajt ġiet tinvestiga l-qtil Killer cabby
bil fascination morbidità ċerti.
[Mara # 1] Dan huwa fil-ħin reali.
[Mara # 2] I ser toħloq interface GUI jużaw Visual Basic, ara jekk I tista 'ssegwi l-indirizz IP.
>> [Malan] Mela awdjo minn sync twarrib, ħolqien ta 'interface GUI jużaw Visual Basic
li jsegwu l-indirizz IP huwa nonsense kompluta.
Dawn il-ġranet inti ma tkunx tuża Visual Basic,
hemm l-ebda ħtieġa għal GUI, u l-indirizz IP kien terminu teknikament preċiżi.
Allura żżomm għajnejk barra għal dawn, u wieħed mill-favoriti tiegħi:
Dan wieħed ftit aktar arcane, għaliex għandek bżonn tkun taf lingwa differenti.
Hemm lingwa imsejjaħ Objettiv-C, li huwa superset ta 'C.
Li jfisser C huwa flimkien ma 'xi karatteristiċi addizzjonali, fosthom oġġett orjentati lejn programmazzjoni.
U dan huwa l-lingwa li Apple popularized għall-ipprogrammar IOS.
U hekk hawn clip minn juru differenti għal kollox, minn "Numri",
li jekk inti fil-fatt tħares mill-qrib fuq TIVO tiegħek u nieqaf fil-mument opportun,
tkun taf tara li dak li qed tfittex fil huwa pjuttost mhux dak li qed jiġi deskritt.
U let me tipprova konnettur awdjo differenti hawn u ara jekk ma nistgħux
iżommu l-awdjo fil-sinkronizzazzjoni tas f'dan il-ħin.
I jagħtuk "Numri".
>> [Man # 1] Huwa l-indirizz 32-bit IPv4.
[Man # 2] PI, dan huwa l-Internet. >> Privat netwerk. Huwa netwerk privat Anita s.
[Malan] Okay. Dan huwa Għan-C, u huwa għal programm kulur xi gidi,
kif inti tista 'forsi jiġi dedott mill-isem tal-varjabbli hemmhekk.
Allura li, imbagħad, kien "Numri". Allura llum u din il-ġimgħa aħna jintroduċu
xi ftit tad-dinja tal-forensiċi u l-kuntest il-problemi għal dan.
Illum se jkun lecture mqassra għaliex hemm avveniment speċjali fil hawn
afterward, hekk aħna ser tieħu Peek, u tease kemm studenti u ġenituri bl-istess mod llum
ma 'wħud mill-affarijiet li huma fuq l-orizzont.
Fost dawn, bħala ta 'Tnejn, ser ikollok xi klassi ftit aktar.
EDX, Harvard u mits ġdid inizjattiva onlajn għall-korsijiet miftuħa
u aktar, qed tniedi fuq il-kampus Harvard nhar it-Tnejn.
Li jfisser it-tnejn jiġu ser ikollok - bħala ta 'għadd tal-aħħar,
86000 klassi addizzjonali għandhom jiġu wara flimkien ma 'lezzjonijiet CS50 s
u sezzjonijiet u walkthroughs u settijiet problema.
U bħala parti minn dan, inti se jsiru membri tal-klassi inawgurali ta '
CS50 u issa CS50x.
>> Bħala parti minn dan, issa, tirrealizza li se jkun hemm xi upsides ukoll.
Biex tikseb lesti għal dan, għan-numru kbir ta 'studenti,
huwa biżżejjed li jingħad li anke jekk aħna għandna 108 TFS u CAs,
mhix l-aħjar istudent / għalliema proporzjon darba aħna hit 80000 studenti oħra.
Allura aħna mhux se tkun problema gradazzjoni tant settijiet manwalment.
Allura introdotta din il-ġimgħa fis-sett problema se tkun CS50 Iċċekkja,
li se tkun ta 'utilità linja tal-kmand fl-appliance
li inti ser tingħata ladarba inti jaġġornaw dan aktar tard dan il-weekend,
u tkun taf tkun kapaċi tmexxi kmand, check 50,
fuq pset tiegħek, u int ser tingħata xi feedback dwar jekk programm tiegħek hija
eżatta jew żbaljata skond l-ispeċifikazzjonijiet varji tad-disinn li għandna pprovduti.
Allura aktar fuq dak u l-ispeċifikazzjoni sett problema u
il-klassi CS50x se tuża dan ukoll.
>> Allura sett problema 4 hija dwar forensika.
U din il-biċċa kienet ispirata minn uħud għalf reali tal-ħajja,
fejn I meta kien fl-iskola gradwati, I internati għal waqt ma '
Uffiċċju tal-Kontea Middlesex tal District Avukat tagħmel xogħol forensika
mal investigatur forensika tagħhom vantaġġ dak li din kienet tammonta għal
huwa, I think semmejt passat ġimgħa ftit, l hija l-pulizija Istat Massa jew oħrajn
kieku jidħlu fi, dawn qatra off affarijiet simili hard drives u CDs u floppy disks
u simili, u allura l-għan ta 'l-uffiċċju forensika kien li tivverifika jekk
kien hemm jew ma kienx evidenza ta 'xi tip.
Dan kien l-Unità Investigazzjonijiet Speċjali, allura kien jaħdem bil-pinna kriminalità,
kien tip aktar inkwetanti ta 'reati,
xi ħaġa li jinvolvu xi tip ta 'midja diġitali; Jirriżulta li mhux li ħafna nies
tikteb email qal "I ma kien."
Allura ħafna drabi dawn it-tfittxijiet forensiċi ma dawran sa kollha li l-frott ħafna,
imma xi kultant in-nies se jikteb emails bħal dawn.
Allura xi kultant l-isforzi kienu ppremjati.
>> Iżda biex iwasslu sa dan pset forensika, aħna ser tkun introdotta fl-pset 4 daqsxejn ta 'grafika.
Allura inti probabilment tieħu dawn l-affarijiet għall mogħtija, JPEGs, GIFs u bħalhom dawn il-ġranet,
imma jekk int verament taħseb dwarha, immaġni, ferm simili wiċċ Rob s,
tista 'tiġi mmudellata bħala sekwenza ta' tikek, jew pixels.
Issa, fil-każ ta 'wiċċ Rob s, hemm kull xorta ta' kuluri,
u bdejna biex tara l-tikek individwali, otherwide magħrufa bħala pixels,
ladarba bdejna li zoom pulzieri
Imma jekk aħna simplifikata l-dinja ftit, u biss jgħidu li dan hawnhekk huwa Rob
bl-iswed u abjad, ukoll, li jirrappreżentaw iswed u abjad nistgħu biss użu binarja.
U jekk aħna qed tmur għall-użu binarju, 1 jew 0, nistgħu tesprimi din istess immaġini
ta 'wiċċ jitbissem Rob ma' dan il-mudell ta 'bits: 11000011 jirrappreżenta
abjad, abjad, iswed, iswed, iswed, iswed, abjad abjad.
U għalhekk mhuwiex qabża kbira, imbagħad, li jibda jitkellem dwar ritratti ikkuluriti.
Affarijiet li inti tara fuq Facebook jew jieħdu bil-kamera diġitali,
iżda, ċertament, meta niġu għall-kuluri, inti għandek bżonn bits aktar.
U pjuttost komuni fid-dinja ta 'ritratti huwa l-użu mhux 1-bit kulur,
kif dan jissuġġerixxi, iżda 24-bit kulur, fejn inti fil-fatt tikseb miljuni ta 'kuluri.
Hekk kif fil-każ meta aħna żżomjati fl fuq għajnejn Rob s,
li kien kull numru ta 'miljuni ta' possibbiltajiet ikkuluriti differenti.
>> Allura aħna ser jintroduċu din fil-sett il-problema 4 kif ukoll fil-walkthrough,
li se tkun llum fil 03:30 minflok il-soltu 2:30 minħabba lecture nhar il-Ġimgħa hawn.
Iżda l-video se jkun online, bħas-soltu, għada.
Aħna ser wkoll jintroduċu inti ieħor format tal-fajl.
Allura dan huwa deliberatament maħsub biex tħares intimidanti fl-ewwel,
iżda din hija biss xi dokumentazzjoni għal Struct C.
Jirriżulta li Microsoft, snin ilu, għenet popularize dan il-format,
imsejjaħ il-format tal-fajl Bitmap, BMP, u dan kien super-sempliċi,
colorful grafika fajl format li kien użat għal żmien pjuttost twil
u xi kultant xorta għal wallpapers fuq desktops.
Jekk taħseb lura għall-Windows XP u l-rolling għoljiet u sema ikħal,
li kien tipikament BMP, jew immaġni Bitmap, u bitmaps
huma divertenti għalina għaliex għandhom kumplessità daqsxejn aktar.
Mhuwiex daqshekk sempliċi bħal dan grilja ta '0 u 1 ta;
minflok, għandek affarijiet simili header fil-bidu ta 'fajl.
Allura fi kliem ieħor, ġewwa fajl BMP. Huwa mazz sħiħ ta 'l-0 u 1, il-
imma hemm xi addizzjonali 0 u 1 fil hemmhekk.
U jirriżulta li dak li aħna ħadthom probabbilment meħuda għall mogħtija għas-snin,
formati tal-fajl bħal. dok jew. xls jew. mp3 jew. mp4,
tkun xi tkun l-formati tal-fajl li int familjari magħhom.
Ukoll, dak ma jfissirx anki biex tkun format tal-fajl?
Minħabba fl-aħħar tal-ġurnata, kollha ta 'dawn il-fajls li nużaw għadek 0 u l-1
u forsi dawk 0 u għal 1 jirrappreżentaw, b, c, permezz ASCII jew bħalhom,
iżda permezz tal-aħħar tal-ġurnata, huwa biss l-0 u 1 ta.
>> Allura bnedmin biss okkażjonalment tiddeċiedi li jivvintaw format tal-fajl ġdid
fejn jistandardizzaw liema mudelli ta 'bits fil-fatt se jfisser.
U f'dan il-każ hawnhekk, il-folks li ddisinjati l-format tal-fajl Bitmap
qal li fl-ewwel byte fil-fajl Bitmap, kif hemm miktub offset 0, hemm,
hemm għaddej li jkun hemm xi cryptically imsejjaħ bfType varjabbli imsejħa,
li biss stands għal tip ta 'fajl Bitmap; liema tip tal-fajl Bitmap dan huwa.
Tista 'tiddeduċi, forsi, mit-tieni ringiela li jikkumpensaw 2, in-numru byte 2,
għandha mudell ta '0 u għal 1 li tirrappreżenta dak li?
Id-daqs ta 'xi ħaġa, u din tmur fuq minn hemm.
Allura fil-sett problema 4, inti ser tkun mixi permezz xi wħud minn dawn l-affarijiet.
>> Aħna mhux se jispiċċaw jieħdu ħsieb dwar kull wieħed minnhom, iżda tinnota li jibda biex tikseb interessanti
madwar linja jew byte 54, rgbtBlue, Green u Red.
Jekk inti stajt qatt semgħu l-akronimu RGB, aħmar aħdar blu, din hija referenza għal dik.
Minħabba jirriżulta li inti tista 'żebgħa l-kuluri tal-qawsalla
ma 'xi kombinazzjoni ta' aħmar u blu u ħodor.
U, fil-fatt, il-ġenituri fil-kamra tista 'lura uħud mill-proġekters kmieni.
Dawn il-ġranet, inti biss tara 1 dawl qawwi li joħorġu ta 'lenti.
Iżda lura fil-ġurnata, kellek il-lenti aħmar, il-lenti blu, u l-lenti aħdar
u flimkien huma mmirati lejn l-iskrin u ffurmaw stampa ikkuluriti.
U spiss iskejjel tan-nofs u l-iskejjel għolja jkollhom dawk il-lentijiet
dejjem hekk ftit askew, sabiex inti kienu it-tip ta 'tara immaġini doppja jew trippla,
iżda li kien l-idea. Kellek dawl aħmar u aħdar u blu pittura stampa.
U li l-istess prinċipju huwa użat fil-kompjuters.
>> Allura fost l-isfidi, allura, għalik fl-problema stabbiliti 4
ser ikunu ftit affarijiet; wieħed huwa li attwalment resize 'immaġni.
Biex jittieħed fil-mudell ta '0 u 1, il-
figura li biċċiet ta 'l-0 u l-1 jirrappreżentaw dak fi struttura bħal din,
u mbagħad figura kif tiġi replikata l-pixels: l-ħomor, blu, l-il-ħodor
ġewwa b'tali mod li meta stampa tidher bħal dan fil-bidu, jista 'dehra dan minflok wara dik.
Fost l-isfidi l-oħra, ukoll, se tkun li inti ser tingħata
dehra forensika ta 'fajl attwali minn kamera diġitali
u fuq dik il camera, ladarba fuq żmien, kienu mazz sħiħ ta 'ritratti.
Il-problema hija, aħna aċċidentalment mħassra jew kellha l-immaġini korrotta b'xi.
Affarijiet ħżiena jiġri bil-kameras diġitali, u hekk aħna malajr kkupjati kollha ta 'l tal-0 u l-1
off ta 'dik il-karta għalik, iffrankat lilhom kollha fil-1 fajl kbir, u mbagħad aħna ser jgħadduhom lilek
fil-problema stabbiliti 4 sabiex inti tista 'tikteb programm C li biex jirkupraw
kollha ta 'dawk JPEGs, idealment.
U jirriżulta li JPEGs, anki jekk dawn qed kemmxejn ta 'format tal-fajl kumpless,
dawn qed ħafna aktar kumplessi minn dan il-wiċċ jitbissem hawn.
Jirriżulta li kull JPEG jibda bil-mudelli istess '0 u 1 ta.
Allura bl-użu ta loop waqt jew għall loop jew simili,
inti tista 'ttenni fuq kollha tal-0 u 1 f'dan ir-immaġini forensika
u kull darba li inti tara l-mudell speċjali li l-iddefinit fl-ispeċifikazzjoni-sett problema, l-
inti tista 'tassumi, "Oh, hawnhekk hija, bi probabbiltà għolja ħafna,
l-bidu ta 'JPEG, "u hekk kif inti ssib l-istess mudell,
xi numru ta 'bytes jew kilobytes jew megabytes aktar tard,
inti tista 'tassumi, "Ooh! Hawnhekk huwa JPEG 2, ir-ritratt I ħa wara l-ewwel waħda.
Let me tieqaf qari dan il-fajl ewwel, tibda bil-miktub dan wieħed ġdid. "
U l-output tal-programm tiegħek għall pset 4 se tkun daqs 50 JPEGs.
U jekk mhuwiex 50 JPEGs, ikollok daqsxejn ta 'linja.
Jekk għandek numru infinit ta 'JPEGs, għandek loop infinita.
Allura li, ukoll, se jkun pjuttost każ komuni.
Dan huwa x'hemm fuq l-orizzont.
>> Quiz 0, warajna. Realizzata, kull email tiegħi, li kostantement hemm folks
li huma t-tnejn kuntenti, tip ta 'newtrali, u diqa madwar kwizz 0 iż-żmien.
U jekk jogħġbok jilħqu lili, l-TFS ras, Zamyla, TF tiegħek
jew wieħed mill-CAs li inti tkun taf jekk inti tixtieq tiddiskuti kif l-affarijiet marru.
>> Allura biex jimpressjonaw lill-ġenituri hawn fil-kamra,
x'inhi l-librerija CS50? Tajba tax-xogħol.
X'hemm-librerija CS50? Yeah? [Tweġibiet Student, mhux intelliġibbli]
>> Okay, tajba. Allura huwa sett prewritten tal-kodiċi li aħna, l-istaff, kiteb,
nipprovdu lilek, sabiex jipprovdu xi funzjonalitajiet komuni.
Jittieħed simili nikseb me string; tikseb me int, kollha tal-funzjonijiet li huma elenkati hawn.
Bidu issa, nibdew biex verament jieħdu dawn ir-roti ta 'taħriġ off.
Allura aħna qed tmur biex tibda tieħu bogħod "string" minn int,
li, irtirar, kien biss sinonimu għal liema tip ta 'data attwali? char *.
Allura għall-ġenituri, li kien probabbilment - li tajjeb, hekk * char aħna ser tibda tara
fuq l-iskrin l-aktar kif aħna tneħħi "string" minn vokabularju tagħna,
mill-inqas meta niġu biex effettivament tikteb kodiċi.
Bl-istess mod, aħna ser tieqaf tuża xi wħud minn dawn il-funzjonijiet kemm,
għaliex programmi tagħna huma se tikseb aktar sofistikati
aktar milli biss jiktbu programmi li tiltaqa hemm ma 'Teptip fil-pront,
stennija għall-utent tat-tip xi ħaġa pulzieri
Int ser tingħata inputs tiegħek minn x'imkien ieħor.
Per eżempju, inti ser tingħata lilhom minn serje ta 'bits fuq il-hard drive lokali.
Int ser minflok tikseb minnhom fil-futur minn konnessjoni tan-netwerk, xi websajt x'imkien.
Mela ejja qoxra lura dan is-saff għall-ewwel darba, u iġbed il-appliance CS50
u dan il-fajl imsejħa CS50.h, li inti kont qed jaqtgħu inkluż għal ġimgħat.
>> Imma ejja attwalment tara x'hemm ġewwa ta 'dan.
Allura l-quċċata tal-fajl fil-blu huwa biss mazz sħiħ ta 'kummenti,
informazzjoni garanzija u l-liċenzjar. Din hija tip ta 'paradigma komuni
fis-software, minħabba ħafna ta 'softwer dawn il-jiem huwa dak li sejjaħ "sors miftuħ,"
li jfisser li xi ħadd kiteb il-kodiċi
u għamilha liberament disponibbli, mhux biss biex imexxu u għall-użu,
iżda fil-fatt taqra u tbiddel u jintegraw fil-ħidma tiegħek.
Allura dak hu li inti kont qed tuża, softwer open source,
għalkemm f'forma żgħir ħafna.
Jekk I iscroll passat l-kummenti, għalkemm, aħna ser tibda tara xi affarijiet aktar familjari.
Allura avviż fil-quċċata hawnhekk, li l-fajl CS50.h jinkludi mazz sħiħ ta 'fajls header.
Issa, ħafna minn dawn ma rajniex qabel, iżda wieħed huwa
familjari; liema minn dawn ma rajna, għalkemm fil-qosor, s'issa?
Yeah, libreriji standard. Stdlib.h għandha malloc,
hekk darba bdejna nitkellmu dwar l-allokazzjoni memorja dinamika,
li aħna ser terga 'lura għal ġimgħa d-dieħla kif ukoll, bdejna inkluż dan il-fajl.
Jirriżulta li bool u vera u falza fil-verità ma jeżistux fis-C, fih innifsu,
sakemm inti jinkludu dan il-fajl hawn.
Allura aħna għandna, għal ġimgħat, ġew inklużi standard bool.h
sabiex inti tista 'tuża l-kunċett ta'. bool, vera jew falza
Mingħajr dan, inti għandek sort ta foloz u l-użu ta 'int
u biss arbitrarju wieħed jassumi li hija falza 0 u 1 huwa veru.
>> Issa, jekk aħna iscroll aktar, hawnhekk hija definizzjoni tagħna ta 'sekwenza.
Jirriżulta, kif aħna stajt qal qabel, li fejn dan ikun * ma verament kwistjoni.
Tista 'anki jkollha spazju kollha madwar.
Aħna, dan is-semestru, ġew promozzjoni tagħha kif dan jiġi ċċarat li l-* għandha tagħmel mat-tip.
Iżda realizzata, daqstant komuni, jekk mhux ftit aktar komuni, hu li tqiegħed lilha hemmhekk
iżda funzjonalment huwa l-istess ħaġa.
Imma issa, jekk naqraw tinżel aktar, ejja tagħti ħarsa lejn say, GetInt,
għaliex aħna użati li, forsi, qabel kull ħaġ'oħra dan is-semestru.
U hawn huwa GetInt. Dan huwa dak?
Dan huwa l-prototip. Allura ta 'spiss, aħna poġġew prototipi fuq l-uċuħ ta' tagħna. Fajls c,
imma int tista 'wkoll tpoġġi prototipi fil-fajls header,. fajls h,
bħal dan wieħed hawn, b'tali mod li meta tikteb xi funzjonijiet
li inti tixtieq nies oħra li tkun tista 'tuża, li huwa eżattament il-każ ma' l-librerija CS50,
inti mhux biss jimplimentaw il-funzjonijiet tiegħek fil xi ħaġa simili CS50.c,
inti wkoll tpoġġi l-prototipi mhux fil-quċċata ta 'dan il-fajl, iżda fil-quċċata ta' fajl header,
allura dan il-fajl header huwa dak ħbieb u kollegi jinkludu,
ma jaqtgħu jinkludu fil-kodiċi tagħhom stess.
Allura dan il-ħin li inti ħadthom ġiet inkluża kollha ta 'dawn prototipi
effettivament fil-quċċata tal-fajl tiegħek, imma permezz ta 'dan jaqta' jinkludi mekkaniżmu
li essenzjalment kopji u pejsts din fajl fis tiegħek.
Issa, hawnhekk hija xi dokumentazzjoni pjuttost dettaljata.
>> Imxejna pjuttost ħafna meqjusa illi GetInt gets int,
iżda jirriżulta hemm xi każijiet kantuniera, id-dritt?
X'jiġri jekk l-utent tipi f'numru li l-mod wisq kbar?
A quintillion, li għadha ma jistgħux jitwaħħlu ġewwa ta 'int?
X'inhu l-imġieba mistennija? Ukoll, idealment, huwa prevedibbli.
Allura f'dan il-każ, jekk inti fil-fatt taqra l-istampar multa,
tkun taf tara li jekk il-linja ma tistax tinqara, dan INT_MAX prospetti.
Imxejna qatt tkellem dwar dan, iżda bbażata fuq kapitalizzazzjoni tagħha,
dak li huwa dan, probabbilment?
Huwa kostanti, dan huwa xi kostanti speċjali li probabbilment iddikjarat
f'wieħed minn dawn il-fajls header thats sa ogħla fil-fajl,
u INT_MAX huwa probabbilment xi ħaġa simili, bejn wieħed u ieħor, 2 biljun.
L-idea hija li għaliex għandna bżonn li b'xi mod turi li xi ħaġa marret ħażin,
aħna, iva, għandna 4000000000 numri għad-dispożizzjoni tagħna,
negattiv 2 biljun fuq sa 2 biljun, jagħtu jew jieħu.
Ukoll, dak li huwa komuni fl-ipprogrammar huwa inti steal biss wieħed minn dawk in-numri.
Forsi 0, forsi 2 biljun, forsi negattiv 2 biljun.
Allura inti tqatta wieħed mill-valuri possibbli tiegħek sabiex inti tista jimpenjaw ruħhom li d-dinja
li jekk xi ħaġa tmur ħażin, I se terġa 'lura dan il-valur super-kbar.
Imma inti ma tridx l-utent ittajpjar xi ħaġa cryptic bħal "2, 3, 4 ..."
numru verament kbir, fejn inti tiġġeneralizza minflok bħala kostanti.
Allura verament, jekk inti kienu qed anali-aħħar ftit ġimgħat,
ghaċ inti sejħa GetInt, inti għandek ġew iċċekkjar ma 'kundizzjoni jekk.
Did-tip utent fil INT_MAX, jew b'mod iktar speċifiku,
ma INT_MAX ritorn GetInt? Għaliex jekk hija għamlet,
li effettivament tfisser li huma ma tip li; xi ħaġa li marret ħażin f'dan il-każ.
Allura dan huwa dak li ġeneralment magħrufa bħala "sentinella" valur, li sempliċiment ifisser speċjali.
>> Ukoll, ejja issa għandha ddur b'mod li l-fajls c..
Il-fajl C ilha teżisti fl-appliance għal xi żmien,
u, fil-fatt, l-apparat għandu dan kkompilat minn qabel għalik
f'dak ħaġa aħna imsejjaħ "kodiċi ta 'oġġett,"
iżda hija biss ma jimpurtax li inti fejn huwa għaliex is-sistema jaf,
f'dan il-każ, fejn ikun, l-appliance.
Imma ejja iscroll issa biex GetInt, u tara kif GetInt ilha taħdem dan il-ħin.
Allura hawnhekk għandna kummenti simili minn qabel.
Let me zoom fl fuq biss il-porzjon kodiċi,
u dak li għandna għall GetInt hija din li ġejja.
Huwa jieħu l-ebda input u dan jirritorna int, filwaqt li (veru), hekk aħna loop infinita intenzjonat
iżda, preżumibbilment, aħna ser break out ta 'dan b'xi, jew ir-ritorn minn ġewwa dan.
Mela ejja ara kif taħdem din. Well, we jidhru li qiegħdin jużawh GetString
f'dan il-linja 1 ġewwa l-linja, 166.
Dan issa huwa prattika tajba għaliex taħt liema ċirkostanzi
jista GetString jirritorna din speċjali keyword, NULL?
Jekk xi ħaġa tmur ħażin. Liema jista 'tmur ħażin meta inti sejħa xi ħaġa bħal GetString?
Yeah? [Tweġiba Student, mhux intelliġibbli] >> Yeah. Allura jonqos malloc forsi.
X'imkien minn taħt il-barnuża GetString qed issejjaħ malloc,
li jalloka memorja, li tikri l-maħżen tal-kompjuter
kollha tal-karattri li l-utent tipi fil-keyboard.
U jissoponi l-utent kellhom lott kollu ta 'ħin liberu
u ittajpjat aktar, per eżempju, minn 2 biljun karattri.
Karattri aktar mis-kompjuter anki għandha RAM.
Ukoll, GetString għandha tkun tista 'turi li lilek,
anke jekk din hija, super każ super kantuniera komuni.
Għandu b'xi mod ikunu jistgħu jimmaniġġjaw dan, u hekk GetString,
jekk immorru lura u aqra d-dokumentazzjoni tagħha, ma, fil-fatt, ir-ritorn NULL.
Issa jekk GetString jonqos billi jirritorna NULL, GetInt se jonqsu
billi jirritorna INT_MAX, biss bħala sentinella.
Dawn huma biss konvenzjonijiet tal-bniedem. L-uniku mod inti taf li dan huwa l-każ
huwa billi taqra l-dokumentazzjoni.
Mela ejja iscroll isfel sa fejn l-int fil-fatt GotInt.
>> Mela jekk jien iscroll down a bit aktar, f'konformità 170 għandna kumment fuq dawn il-linji.
Allura aħna tiddikjara, fi 172, ta 'n int u ċ char, u mbagħad din il-funzjoni l-ġdida
li xi wħud minnkom stumbled madwar qabel, iżda sscanf.
Dan stands għall f sekwenza scan.
Fi kliem ieħor, tagħti me a string u jien se scan għall-biċċiet ta 'informazzjoni ta' interess.
Allura dak ma jfisser? Ukoll, ejja ngħidu li jien tip, litteralment, 1 2 3 fuq il-keyboard,
u mbagħad hit jidħol. X'inhu t-tip tad-data tat 1 2 3 meta rritorna minn GetString?
Huwa ovvjament string, id-dritt? Sibt string, hekk 1 2 3 huwa verament "1 2 3"
bil-0 \ fl-aħħar ta 'dan. Dan mhuwiex int.
Li mhux numru. Jidher qisu numru iżda mhux attwalment.
Allura dak li ma GetInt għandek tagħmel? Għandu scan li string xellug għal-lemin,
1 2 3 \ 0, u b'xi mod jaqilbu għall integer attwali.
Issa, inti tista 'figura kif jagħmlu dan.
Jekk taħseb lura għal pset 2, inti preżumibbilment ltqajna ftit komda
ma Caesar jew vigenere sabiex inti tista 'jtenni fuq string,
inti tista 'tikkonverti Chars li ints ma pick. Li l-lott kollu ta 'xogħol.
Għaliex ma sejħa funzjoni bħal sscanf li ma li għalik?
Allura sscanf jistenna argument, f'dan il-każ imsejħa linja, li hija sekwenza.
Inti mbagħad jispeċifikaw, kwotazzjonijiet, simili ħafna għall printf,
dak li tistenna biex tara f'dan string?
Dak li jien qal hawnhekk hija, I jistennew li jaraw numru deċimali u forsi karattru.
U aħna ser tara għaliex dan huwa l-każ fi ftit mument.
Jirriżulta li dan notazzjoni issa huwa reminixxenti ta 'għalf
bdejna nitkellmu dwar ftit aktar minn ġimgħa ilu.
>> X'inhu & nu & c tagħmel għalina hawn? [Tweġibiet Student, mhux intelliġibbli]
>> Yeah. Huwa jagħti me l-indirizz ta 'n u l-indirizz ta' c.
Issa, għaliex huwa importanti li? Ukoll, inti taf li ma 'funzjonijiet fis-C
inti tista 'dejjem terġa' lura għal valur jew l-ebda valur fil-livelli kollha.
Tista 'ritorn ta' int, string, float, a char, tkun xi tkun.
Jew inti tista 'ritorn null, imma int tista' biss jirritorna 1 ħaġa maximally.
Imma hawn irridu sscanf jirritornaw lili forsi int, numru deċimali,
u wkoll. char, u jien ser jispjegaw għaliex il-karatteristiċi fil-mument
Allura inti tixtieq effettivament f jirritornaw 2 affarijiet; li jinsab biss mhux possibbli fid C.
Allura inti tista 'taħdem madwar li billi tgħaddi fi 2-indirizzi,
għaliex malli inti idejn funzjoni 2 indirizzi, dak li jista 'dik il-funzjoni tagħmel magħhom?
Hija tista 'tikteb lill dawk l-indirizzi. Tista 'tuża l-operazzjoni * u "jmorru hemm" għal kull wieħed minn dawk l-indirizzi.
Huwa tip ta 'dan il-mekkaniżmu backdoor, iżda komuni ħafna għat-tibdil tal-valuri tal-varjabbli
f'aktar minn biss 1 post, f'dan il-każ 2.
Issa, l-avviż jien iċċekkjar għall == to1, u mbagħad jirritornaw n jekk dan ma, fil-fatt, tevalwa l-vera.
Allura x'inhu għaddej? Ukoll, teknikament, kollox aħna verament irridu li jiġri GetInt hija din.
Aħna rridu li parse, biex ngħidu hekk, irridu taqra l-sekwenza
"1 2 3" u jekk jidher qisu hemm numru hemmhekk,
dak li aħna qed javżak sscanf tagħmel hu li tpoġġi dan in-numru, 1 2 3, f'din n varjabbli għalija.
Għaliex, mela, ma għandi dan ukoll?
X'inhu r-rwol tal wkoll qal, sscanf, inti tista 'wkoll tikseb karattru hawnhekk.
[Speaking Student, mhux intelliġibbli] >> Mhux - punt deċimali jistgħu jaħdmu.
Ejja istiva li ħasbu għal mument. X'aktar?
[Student, mhux intelliġibbli] >> Allura, ħsibt tajba, jista 'jkun il-karattru NULL.
Huwa fil-fatt mhux, f'dan il-każ. Yeah? [Student, mhux intelliġibbli]
>> >> ASCII. Or, let me tiġġeneralizza anke aktar.
Il c% hemm biss għal żball ta 'verifika.
Aħna ma rridux li jkun hemm karattru wara n-numru,
imma dak li din tippermetti lili biex tagħmel huwa dan li ġej:
Jirriżulta li sscanf, minbarra ħażna valuri nu c, f'dan l-eżempju hawn,
dak li wkoll ma huwa jirritorna l-għadd ta 'varjabbli li tpoġġi valuri pulzieri
Mela jekk inti biss tip fil 1 2 3, allura biss il-% d huwa se jaqblu
u biss n gets maħżuna b'valur bħal 1 2 3 u xejn gets jitqiegħdu c;
c tibqa 'valur żibel, biex ngħidu hekk.
Żibel għaliex dan huwa qatt ma kien initialized bħala xi valur.
Allura f'dak il-każ, sscanf prospetti 1, minħabba I popolati waħda minn dawk pointers,
f'liema każ, kbir. I jkollhom int, so I tilliberalizza l-linja biex tillibera l-memorja
li GetString attwalment allokati, u mbagħad I lura n.
Inkella, jekk inti qatt staqsiet fejn dik id-dikjarazzjoni retry ġej minn, ġej minn dritt hawn.
Jekk, għall-kuntrarju, I tip 1 2 3 foo,
biss ftit sekwenza każwali ta 'test, sscanf se tara,
ooh, numru, ooh, numru, ooh, numru, ooh - f.
U li għaddej biex tpoġġi l-1 2 3 fl n.
Huwa ser tpoġġi l-f fl-ċ, u mbagħad jirritornaw 2.
Allura aħna għandna, biss bl-użu tad-definizzjoni bażika ta 'l-imġiba scanf s,
mod sempliċi ħafna - ukoll, kumpless ewwel daqqa t'għajn, iżda fl-aħħar tal-ġurnata,
mekkaniżmu pjuttost sempliċi ta 'tgħid, hemm xi int, u jekk iva, huwa li l-unika ħaġa li sibt?
U l-ispazju abjad hawnhekk huwa intenzjonat. Jekk taqra d-dokumentazzjoni għall-sscanf,
hija jgħidlek li jekk inti jinkludu biċċa ta 'spazju abjad fil-bidu jew fl-aħħar,
sscanf wisq se jippermettu lill-utent, għal kwalunkwe raġuni, li tolqot spacebar 1 2 3, u li se jkun leġittimu.
Dan mhux se Yell fil-utent sempliċiment għax laqat il-spacebar fil-bidu jew fl-aħħar,
li huwa biss ftit aktar faċli għall-utent.
>> Kwalunkwe mistoqsijiet, imbagħad, fuq GetInts? Yeah?
[Kwistjoni Student, mhux intelliġibbli]
>> Tajba kwistjoni. X'jiġri jekk inti biss ittajpjat fil-char, bħal, f u hit jidħol
mingħajr ma qatt ittajpjar 1 2 3; x'taħseb l-imġiba ta 'din il-linja tal-kodiċi mbagħad ikunu?
Allura sscanf tista 'tkopri li wisq, minħabba li f'dak il-każ,
mhuwiex ser timla n jew c, li għaddej biex minflok jirritornaw 0.
F'liema każ, jien ukoll qbid li x-xenarju, minħabba li l-valur mistenni nixtieq huwa 1.
I jridux biss 1, u biss 1 ħaġa li għandha timtela. Good kwistjoni. Oħrajn?
>> Kull dritt, so let mhuwiex jgħaddu kollha tal-funzjonijiet hawn,
iżda l-waħda li jidher li jkun, forsi, ta 'interess baqa
huwa GetString minħabba li jirriżulta li GetFloat, GetInt,
GetDouble, GetLongLong kollha Punt ħafna ta 'funzjonalità tagħhom li GetString.
Mela ejja tagħti ħarsa lejn kif huwa implementat hawnhekk.
Dan wieħed jistenna kumpless ftit imma dan juża l-elementi fundamentali istess
li bdejna nitkellmu ġimgħa li għaddiet. Għalhekk fl GetString,
li tieħu l-ebda argument bħala kull l-vojt up hawn,
u dan jirritorna string; so I am tiddikjara string imsejjaħ buffer.
I ma verament jafu dak li għaddej biex jintużaw għal għada, iżda Ser naraw.
Jistenna bħall-kapaċità hija, fil-kontumaċja, 0; ma pjuttost ċert fejn dan ikun għaddej.
Mhux ċert liema n għaddej biex jintużaw għall s'issa.
Imma issa huwa jkollna ftit aktar interessanti, hekk f'konformità 243,
aħna tiddikjara ċ int, dan huwa tip ta 'dettall stupid.
A char huwa 8 bits, u 8 bits jista 'jaħżen kemm valuri differenti?
256. Il-problema hija, jekk inti tixtieq li jkollok 256 karattri ASCII differenti,
li hemm, jekk taħseb lura, u dan mhux xi ħaġa li memorize.
Imma jekk inti taħseb lura għal dak chart ASCII big kellna ġimgħat ilu,
kien hemm, f'dak il-każ, 128 jew 256 karattri ASCII.
Aħna użati l-mudelli ta 'l-0 u 1 tal-up.
Li l-problema jekk inti tixtieq li tkun kapaċi jikxef żball.
Għaliex jekk int diġà tuża 256 Valuri għall-karattri tiegħek,
inti ma verament tippjana għal quddiem, għaliex issa ikollok ebda mod ta 'tgħid,
"Din mhix karattru leġittimu; din hija xi messaġġ żbaljat."
Allura dak id-dinja ma huwa, huma jużaw il-valur li jmiss akbar,
xi ħaġa bħal int hekk li għandek numru ta 'bits crazy,
32 għal 4000000000 valuri possibbli, sabiex inti tista 'sempliċement tispiċċa bl-użu,
essenzjalment, 257 minnhom, 1 li għandha xi tifsira speċjali bħala żball.
>> Mela ejja ara kif taħdem din. F'konformità 246, għandi din loop filwaqt big
li qed issejjaħ fgetc; tifsira f fajl, getc, u mbagħad stdin.
Jinstabx li dan huwa biss il-mod aktar preċiż ta 'tgħid "aqra input mill-keyboard."
Standard keyboard mezz input, output standard ifisser iskrin,
u żball standard, li aħna ser tara fil pset 4, tfisser l-iskrin,
iżda parti speċjali tal-iskrin sabiex li mhuwiex conflated
bi produzzjoni attwali li inti maħsuba biex jistampaw; iżda aktar fuq li fil-futur.
Allura fgetc ifisser biss aqra karattru wieħed mill-keyboard, u jaħżnu fejn?
Aħżen fil ċ, u mbagħad tiċċekkja, hekk jien biss jużaw xi konġunzjonijiet Boolean hawn,
jivverifikaw li dan ma jkunx ugwali \ n, sabiex l-utent ikun hit jidħol.
Aħna tixtieq li twaqqaf f'dak il-punt, tmiem tal-linja, u aħna wkoll jridu jiċċekkjaw
għall-kostanti speċjali, EOF, li jekk taf jew raden - dak ma toqgħod għal?
Tmiem tal-fajl. Allura dan huwa tip ta 'jagħmel ebda sens, minħabba li jekk jien ittajpjar fuq it-tastiera,
hemm verament ebda fajl involuti f'dan,
iżda dan huwa biss tip tat-terminu ġeneriku użat biex ifisser
li xejn ikun ġej minn swaba tal-bniedem tal-. EOF. Tmiem tal-fajl.
Bħala twarrib, jekk inti stajt qatt hit kontroll d fil-tastiera tiegħek,
mhux li inti għadhom, inti ħadthom hit kontroll c.
Iżda l-kontroll d jibgħat din speċjali EOF kostanti imsejħa.
>> Allura issa aħna biss għandhom xi allokazzjoni memorja dinamika.
Mela jekk n + 1> kapaċità, issa jien ser jispjegaw n.
n huwa kemm ħafna bytes bħalissa qegħdin fil-buffer,
l-sekwenza li int bħalissa bini mill-utent.
Jekk għandek karattri aktar fil buffer tiegħek milli għandek kapaċità fil-buffer,
intuwittivament, dak li rridu nagħmlu allura hu jalloka aktar kapaċità.
Jien ser skim fuq xi wħud mill-aritmetika hawn
u jiffoka biss fuq din il-funzjoni hawn.
Inti taf huwa malloc dak, jew għall-inqas b'mod ġenerali familjari.
Ħu raden ma realloc dak. [Tweġiba Student, mhux intelliġibbli]
>> Yeah. U huwa pjuttost mhux żżid memorja, hi reallocates memorja kif ġej:
Jekk ikun hemm għadu kamra fl-aħħar tas-sekwenza biex jagħtuk aktar ta 'dak memorja
milli oriġinarjament tagħtik, allura inti ser tingħata li l-memorja addizzjonali.
Allura inti tista 'sempliċement tqegħid l-karattri kordi lura lura lura lura.
Imma jekk dan mhux il-każ, għaliex inti stenniet twil wisq
u xi ħaġa każwali ltqajna plopped fil-memorja hemmhekk, iżda hemm żejjed
memorja stabbiliti hawn, li okay. Realloc se jagħmlu l-irfigħ għalik,
jċaqalqu l-sekwenza li inti stajt taqra fil s'issa minn hawn,
poġġih stabbiliti hemmhekk, u mbagħad jagħtuk runway ftit aktar f'dak il-punt.
Allura bil-mewġa ta 'l-idejn, ħalluni ngħid li dak li qed tagħmel GetString
huwa huwa li tibda bi buffer żgħir, forsi 1 karattru wieħed,
u jekk l-utent tipi fi 2 karattri, GetString jispiċċa
sejħa realloc u jgħid, "Ooh, 1-karattru ma kienx biżżejjed.
Agħti me 2 karattri. " Imbagħad jekk inti taqra permezz tal-loġika tal-linja,
li għaddej biex jgħidu, "Ooh, l-utent ittajpjat fi 3 karattri.
Agħti me issa mhux 2 iżda 4 karattri, allura agħti lili 8, allura agħti lili 16 u 32. "
Il-fatt li jien irduppjar tal-kapaċità kull darba
ifisser li l-buffer mhux se jikbru bil-mod.
Huwa ser jikbru super fast, u dak li jista 'jkun il-vantaġġ ta' dan?
Why am I irduppjar-daqs tal-buffer, anki jekk l-utent
jista 'biss bżonn 1 karattru żejda mill-keyboard?
[Student tweġiba, mhux intelliġibbli]. >> X'hemm li?
Eżattament. Inti ma għandekx biex jikbru bħala spiss.
U dan huwa biss tip ta '- you're hedging imħatri tiegħek hawn.
L-idea hija li inti ma tridx li sejħa realloc ħafna, minħabba li hemm tendenza li jkun bil-mod.
Kwalunkwe ħin li inti titlob lill-sistema operattiva għall-memorja, kif tkun taf hekk ara
f'sett problema fil-futur, li għandha tendenza li tieħu ftit ħin.
Allura timminimizza dak l-ammont ta 'żmien, anki jekk int wasting xi spazju, tendenza li tkun ħaġa tajba.
>> Imma jekk aħna tinqara minn ġol-parti finali ta 'GetString hawn,
u għal darb'oħra, fehim kull linja waħda hawn mhix daqshekk importanti llum.
Iżda avviż li eventwalment tappella malloc mill-ġdid, u dan jalloka
eżattament kif bytes ħafna kif jeħtieġ l-sekwenza
u mbagħad throws bogħod billi ċċempel b'xejn, il-buffer eċċessivament kbar,
jekk tabilħaqq ltqajna rdoppja wisq drabi.
Fil-qosor, li kif GetString ilha taħdem dan il-ħin.
Kull ma jinqara karattru wieħed fi żmien ġdid u għal darb'oħra u għal darb'oħra
u kull darba li jeħtieġ xi memorja addizzjonali, huwa jitlob lill-sistema operattiva għal dan billi ċċempel realloc.
Kwalunkwe mistoqsijiet? Kull dritt.
>> Attakk. Issa li aħna nifhmu pointers, jew għall-inqas
huma dejjem aktar familjari ma 'pointers,
ejja tikkunsidra kif id-dinja kollha jibda kollass
jekk inti ma pjuttost jiddefendu kontra l-utenti kontradittorji,
nies li qed jippruvaw Hack fis-sistema tiegħek.
Nies li qed jippruvaw steal software tiegħek billi tevita xi kodiċi ta 'reġistrazzjoni
li kieku kienu għandek tip pulzieri
Agħti ħarsa lejn dan l-eżempju hawn, li huwa biss il-kodiċi C
li għandu funzjoni ewlenija fil-qiegħ, li s-sejħiet funzjoni foo,
u għalxiex tgħaddi lill foo? [Student] Argument wieħed.
>> Uniku argument. Allura ARGV [1], li jfisser l-ewwel kelma l-utent ittajpjat
fil-linja tal-kmand wara a.out jew ikun x'ikun l-programm huwa msejjaħ.
Allura foo, fil-quċċata, jieħu fil-* char, iżda * char huwa biss dak?
String. M'hemm xejn ġdid hawn, u li string qed arbitrarjament qed jissejjaħ bar.
F'dan il-linja hawn, char ċ [12], fil-tip ta 'semi-teknika Ingliż, dak li huwa din il-linja tagħmel?
Array ta '-? Karattri. Agħti me firxa ta '12-il karattru.
Allura nistgħu sejħa dan buffer. Huwa teknikament jissejjaħ c, ​​iżda buffer fil-programmazzjoni
ifisser biss mazz ta 'spazju li inti tista' tpoġġi xi Jittieħed pulzieri
>> Imbagħad fl-aħħar, memcpy, konna mhux użat qabel.
Iżda int tista 'probabbilment raden dak li tagħmel. Hija kopji memorja.
X'tikkontrolla do? Ukoll, huwa apparentement kopji bar, input tagħha, fis c,
iżda biss sa l-tul ta 'bar.
Iżda hemm bug hawn.
Okay, hekk teknikament għandna verament strlen (bar) x sizeof (char), li l-korretta.
Iżda fl-agħar każ hawnhekk, ejja nassumu li that's - hekk, okay.
Imbagħad hemm 2 bugs. Allura sizeof (char), id-dritt, ejja jagħmlu dan ftit aktar wiesa '.
Allura issa hemm għadu bug, li huwa dak?
[Tweġiba Student, mhux intelliġibbli] Iċċekkja >> għal liema? Okay, hekk aħna għandu jiġi verifikat
għall NULL, minħabba affarijiet ħżiena jiġri meta pointer tiegħek huwa NULL,
Għaliex inti tista 'tispiċċa tmur hemmhekk, u inti ma għandu qatt ikun ser null
billi dereferencing ma 'l-operatur *.
Allura dak tajba, u x'iktar li qed nagħmlu? Loġikament hemm difett hawnhekk ukoll.
[Tweġiba Student, mhux intelliġibbli]
>> Sabiex jiċċekkjaw jekk argc ≥ 2?
Okay, hekk hemm 3 bugs f'dan il-programm hawn.
Aħna ma iċċekkjar jekk l-utent fil-fatt ittajpjat fil xejn fil ARGV [1], tajba.
Allura x'inhu l-bug terz? Yeah?
[Tweġiba Student, mhux intelliġibbli] >> Tajba.
Allura aħna ċċekkjati xenarju wieħed. We impliċitament ċċekkjati ma kopja memorja aktar
milli kieku jaqbeż it-tul ta 'bar.
Allura jekk il-sekwenza l-utent ittajpjat fil hija 10 karattri fit-tul,
dan huwa qal, "Huwa biss kopja 10 karattri."
U li okay, imma dak jekk l-utent ittajpjat fil-kelma fil-pront
bħal kelma karattru 20; dan huwa, qal kopja 20 karattru mill-bar fil dak?
c, magħrufa wkoll bħala buffer tagħna, li jfisser li inti biss kiteb data
sa 8 postijiet byte li inti ma stess,
u inti ma proprji minnhom fis-sens li int qatt ma allokat lilhom.
Allura dan huwa dak li ġeneralment magħrufa bħala l-attakk overflow buffer,
jew buffer attakk overrun, u attakk huwa fis-sens li jekk l-utent
jew il-programm li l-sejħa funzjoni tiegħek qed tagħmel dan b'mod malizzjuż,
x'inhu dak li attwalment jiġri li jmiss jista 'jkun pjuttost ħażina.
>> Ejja tagħti ħarsa lejn din l-istampa hawn.
Din l-istampa jirrappreżenta munzell tiegħek ta 'memorja.
U ifakkar li kull darba li inti sejħa funzjoni,
ikollok dan il-qafas ftit fuq il-munzell u mbagħad ieħor u mbagħad ieħor u mbagħad ieħor.
U s'issa konna biss tip ta 'estratt dawn bogħod kif rettangoli
jew hemm fuq il-bord jew fuq l-iskrin hawn.
Imma jekk aħna zoom fl fuq waħda minn dawk rettangoli,
meta inti sejħa funzjoni foo, jirriżulta li hemm aktar fuq il-munzell
ġewwa ta 'dak il-qafas u dak ir-rettangolu
minn sempliċiment xuy u aub, bħal aħna ma jitkellem dwar swap.
Jirriżulta li hemm xi dettalji aktar baxxi ta 'livell,
fosthom ritorn indirizz.
Allura jirriżulta meta jitlob prinċipali foo, prinċipali għandu jinforma foo
dak l-indirizz prinċipali huwa fil-memorja tal-kompjuter.
Minħabba xort'oħra, hekk kif foo isir eżekuzzjoni, bħal f'dan il-każ hawnhekk,
ladarba inti tilħaq dan Brace kaboċċi qrib fl-aħħar ta 'foo,
kif l-Heck ma foo taf fejn kontroll tal-programm suppost imorru?
Jirriżulta li r-risposta għal din id-domanda hija fl-dak ir-rettangolu aħmar hawn.
Dan jirrappreżenta pointer, u huwa f'idejn l-kompjuter biex jaħżnu, temporanjament,
fuq il-munzell hekk imsejħa l-indirizz ta 'mejn sabiex l malli foo isir eżekuzzjoni,
il-kompjuter jaf fejn u liema linja ewlenija li jmorru lura għall.
Pointer qafas Ssejvjata tirrigwarda b'mod simili għal dan.
* Char bar hawn jirrappreżenta dak?
Well, issa dan is-segment blu hawnhekk huwa qafas foo, dak li hu bar?
Okay, hekk bar huwa biss l-argument li l-funzjoni foo.
>> Allura issa aħna qed lura lejn l-istampa familjari.
Hemm Jittieħed aktar u distrazzjonijiet aktar fuq l-iskrin
iżda dan is-segment blu dawl huwa dak li aħna kont qed tpinġija fuq il-chalkboard għal xi ħaġa bħal tpartit.
Dan huwa l-qafas għall foo u l-unika ħaġa fil dan id-dritt issa huwa bar,
li huwa dan il-parametru.
Imma dak li inkella għandhom ikunu fil-munzell, skond dan il-kodiċi hawn?
Char ċ [12]. Allura għandna wkoll tara 12 kwadri ta 'memorja,
allokata lil varjabbli imsejjaħ c.
U fil-fatt aħna jkollhom li fuq l-iskrin.
Il-quċċata hemm ć [0], u allura l-awtur ta 'dan dijagramma
ma jolqot tfassil kollha tal-kwadrati iżda hemm tabilħaqq 12 hemm
għaliex jekk inti tħares lejn il-lemin tal-qiegħ, c [11], jekk inti għadd minn 0, huwa l-bytes 12 bħal dawn.
Iżda hawn l-problema: F'liema direzzjoni qed c jikber?
Sort ta 'top down, id-dritt? Jekk jibda fil-quċċata u tikber sal-qiegħ,
ma look like we xellug nfusna runway ħafna hawn fil-livelli kollha.
Imxejna tip ta 'miżbugħa lilna nfusna fis-kantuniera,
u li ċ [11] huwa dritt up kontra bar, li huwa dritt up kontra pointer qafas munzell,
li huwa dritt up kontra l-indirizz ta 'ritorn; hemm lok mhux aktar.
Allura x'inhu l-implikazzjoni, allura, jekk inti screw up,
u inti tipprova qari 20 bytes ġo buffer 12-byte?
Fejn huma dawk bytes 8 addizzjonali se jmorru?
Ġewwa kull ħaġa oħra, li wħud minnhom huwa super importanti.
U l-aktar ħaġa importanti, potenzjalment, huwa l-kaxxa aħmar hemmhekk, l-indirizz tar-ritorn.
Minħabba jissoponi li inti jew aċċidentalment jew kontradittorju
jissostitwixxu dawk bytes 4, li jindirizzaw pointer,
mhux biss ma żibel, iżda b'numru li jiġri li jirrappreżentaw indirizz attwali fil-memorja?
X'hemm-implicaiton, loġikament?
[Tweġibiet Student, mhux intelliġibbli] >> Eżattament. Meta foo prospetti
u hits li Brace kaboċċi, il-programm se tipproċedi ma tirritornax prinċipali,
li għaddej biex jirritornaw għall xi indirizz f'dik il-kaxxa aħmar.
>> Issa, fil-każ ta 'reġistrazzjoni ta' softwer jevita,
dak li huwa l-indirizz li l-jiġu ritornati lill ikun il-funzjoni
li normalment gets imsejħa wara li tkun ħadthom imħallas għall-software u inputted kodiċi ta 'reġistrazzjoni tiegħek?
Inti tista sort ta trick-kompjuter fis jkunux sejrin hawnhekk, imma minflok, tmur up here.
Jew, jekk int verament għaqlija, avversarju jistgħu attwalment tip fl fuq il-keyboard,
per eżempju, ma kelma attwali, mhux 20 karattri, iżda jissoponi hu jew hi
tipi f'xi karattri li jirrappreżentaw kodiċi?
U huwa mhux ser ikun kodiċi C, li għaddej biex tkun il-karattri
li jirrappreżenta magna kodiċi binarju, taċ 0 u 1 ta.
Imma ejja ngħidu li qed għaqlija biżżejjed biex tagħmel dan, li b'xi mod paste fil-pront GetString
xi ħaġa li hija essenzjalment miġbura kodiċi,
u l-aħħar 4 bytes jissostitwixxu dak l-indirizz tar-ritorn, u dak l-indirizz ma li input tagħmel?
Taħżen f'dan rettangolu aħmar l-indirizz ta 'l-ewwel byte tal-buffer.
Allura inti għandek tkun verament għaqlija, u dan huwa ħafna ta 'prova u żball
għal nies ħżiena hemmhekk, imma jekk inti tista figura kif big dan buffer hija,
tali li l-bytes aħħar ftit fl-input li inti tipprovdi għall-programm
jiġri li jkun ekwivalenti għall-indirizz tal-bidu tal-buffer tiegħek,
inti tista 'tagħmel dan. Jekk aħna ngħidu, normalment, bonjour, u \ 0, dan huwa dak jispiċċa fil-buffer.
Imma jekk aħna qed aktar għaqlija, u aħna imla l buffer ma 'dak li aħna ser ġenerikament sejħa kodiċi attakk,
A, A, A, A: Attakk,, attakk attakk, attakk, fejn din hija biss xi ħaġa li ma xi ħaġa ħażina.
Ukoll, dak li jiġri jekk int verament għaqlija, inti tista 'tagħmel dan:
Fil-kaxxa aħmar hawnhekk hija sekwenza ta 'numri: 80, CO, 35, 08.
Avviż li dan jaqbel man-numru li l-up here.
Huwa fl-ordni invers, iżda aktar fuq li xi żmien ieħor.
Avviż li dan l-indirizz tar-ritorn ġie deliberatament mibdula
li hija daqs l-indirizz up hawn, mhux l-indirizz ta 'prinċipali.
Allura jekk il-Guy ħażina hija super intelliġenti, hu jew hi se jinkludu f'dak il-kodiċi attakk
xi ħaġa simili, "Ħassar kollha tal-fajls l-utent."
Jew "Ikkopja l-passwords," jew "Oħloq kont ta 'utent li nista' log fis."
Xejn fil-livelli kollha, u dan huwa kemm il-periklu u l-qawwa ta 'C.
Minħabba ikollok aċċess għall-memorja permezz pointers
u inti tista 'għalhekk tikteb xi ħaġa li trid fil-memorja tal-kompjuter.
Inti tista 'tagħmel il-kompjuter do xi ħaġa li trid sempliċiment billi
wara li dan jaqbżu madwar ġewwa l-ispazju tiegħu memorja stess.
U hekk, din il-ġurnata, sabiex ħafna programmi u websajts tant li huma kompromessi
jsarrafx biss fl-nies jieħdu vantaġġ ta 'dan.
U dan jista 'jidher bħala attakk super-sofistikati,
iżda dan mhux dejjem tibda il-mod.
>> Ir-realtà hi li dak in-nies ħżiena se tipikament do hija,
jekk huwa programm fuq linja ta 'kmand jew programm GUI jew websajt,
huwa inti biss jibda jipprovdi nonsense.
Inti tip fil-kelma verament kbir fil-qasam tat-tiftix u hit jidħol,
u inti tistenna biex tara jekk il-crashes websajt.
Jew inti tistenna biex tara jekk il-programm timmanifesta xi messaġġ ta 'żball.
Għaliex jekk ikollok xortik tajba, bħala l-ħżiena Guy,
u inti tipprovdi xi kontribut crazy li ġġarrfu-programm,
li tfisser l-programmer ma tantiċipa imġieba ħażina tiegħek
li jfisser li inti tista 'probabbilment, bi sforz biżżejjed,
prova biżżejjed u żball, figura kif pagi attakk aktar preċiż.
Allura kemm parti ta 'sigurtà mhux biss tevita dawn l-attakki kollox, iżda iskoperta minnhom
u fil-fatt tħares lejn zkuk u tara liema inputs crazy nies ittajpjat fil-website tiegħek.
Liema termini ta 'tiftix li nies ittajpjat fil-website tiegħek fil-tamiet ta' overflowing xi buffer?
U dan kollu jeħodna għall-punti bażiċi sempliċi ta 'x'hemm firxa,
u dak ma jfisser li talloka u l-użu tal-memorja?
U marbuta ma 'dan, wisq, hija din.
>> Mela ejja biss t'għajn ġewwa ta 'hard drive għal darb'oħra.
Allura inti recall minn ġimgħa jew tnejn ilu li meta inti drag fajls
għall tiegħek riċiklu bin jew Trash jistgħu, x'jiġri?
[Student] Xejn. >> Yeah, assolutament xejn. Eventwalment, jekk inti tmexxi baxx
fuq l-ispazju disk, Windows jew Mac OS se jibda tħassar files għalik.
Imma jekk inti drag xi ħaġa fil hemm, allura huwa mhux fil-livelli kollha siguri.
Kollha, roomate ħabib jew membru tal-familja tiegħek ma tagħmel hu li ikklikkja darbtejn, u voila.
Hemm il-fajls kollha vaga li inti ppruvaw li jitħassar.
Allura ħafna minna inqas jafu li inti għandek dritt ikklikkja jew jikkontrollaw ikklikkja
u vojta-Trash, jew xi ħaġa bħal dik.
Iżda anke allura, li ma pjuttost tagħmel l-trick.
Minħabba dak li jiġri meta inti jkollhom fajl fuq hard drive tiegħek
li tirrappreżenta xi dokument kelma jew xi JPEG?
U dan jirrappreżenta hard drive tiegħek, u ejja ngħidu dan sliver hawn jirrappreżenta dan il-fajl,
u huwa kompost minn mazz sħiħ ta 'l-0 u 1 ta.
X'jiġri meta inti mhux biss drag dan il-fajl għall-trashcan jew riċiklu bin,
iżda wkoll vojta?
Sort ta 'xejn. Mhuwiex assolutament xejn issa.
Issa huwa biss xejn, għaliex ftit xi ħaġa jiġri fil-forma ta 'din it-tabella.
Allura hemm xi tip ta 'database jew tabella ġewwa tal-memorja tal-kompjuter
li essenzjalment tkun 1 kolonna għall-ismijiet fajls,
u 1 kolonna għall-lokazzjoni fajl, fejn dan jista 'jkun post 123, biss numru bl-addoċċ.
Allura aħna jista 'jkollha xi ħaġa simili x.jpg, u l-post 123.
U x'jiġri mbagħad, meta inti vojta Trash tiegħek?
Li tmur bogħod. Imma dak ma jmurx lil hinn hija l-'0 u 1 ta.
>> Allura x'inhu, imbagħad, il-konnessjoni ma pset 4?
Ukoll, ma pset 4, sempliċiment għax konna aċċidentalment mħassra
il-karta flash kompatti li kienu kollha ta 'dawn ir-ritratti,
jew sempliċiment minħabba li mill xortih ħażina saret korrotta,
ma jfissirx li l-0 u l-1 mhumiex għadhom hemm.
Forsi ftit minnhom huma mitlufa minħabba xi ħaġa ltqajna korrotta
fis-sens li xi s 0 sar 1 u 1 beda 0 s.
Affarijiet ħżiena jista 'jiġri minħabba l-software Buggy jew difettużi hardware.
Iżda ħafna minn dawk bits, forsi anki 100% minnhom għadhom hemm,
huwa biss li l-kompjuter jew l-kamera ma tkunx taf fejn JPEG 1 beda
u fejn JPEG 2 beda, imma jekk inti, il-programmer,
jafu, bi ftit ta 'sofistikati, fejn dawk JPEGs huma jew dak li look like,
inti tista 'tanalizza l-' 0 u s-1 u jgħidu, "Ooh. JPEG. Ooh, JPEG. "
Tista 'tikteb programm essenzjalment biss għal jew waqt loop
li jirkupra kull wieħed u waħda ta 'dawn il-fajls.
Allura l-lezzjoni allura, huwa li tibda "sikur" tħassir fajls tiegħek
jekk inti tixtieq li tevita dan għal kollox. Iva?
[Kwistjoni Student, mhux intelliġibbli]
>> Jkollhom memorja aktar milli għamilt qabel -
Oh! Good kwistjoni. Allura għaliex, imbagħad, wara jitbattal il-Trash,
ma kompjuter tiegħek jgħidlek li inti għandek aktar spazju ħieles minn għamilt qabel?
Fil-qosor, għaliex dan huwa mimdud. Aktar teknikament, inti do jkollhom aktar spazju.
Minħabba li issa għandek qal, inti tista 'tpoġġi Jittieħed oħra fejn dan il-fajl kienet darba,
iżda dan ma jfissirx l-bits huma tmur lil hinn,
u dan ma jfissirx l-bits qed jinbidlu kollha 0 s, per eżempju, għall-protezzjoni tiegħek.
B'kuntrast, jekk inti "sikur" fajls tħassar, jew fiżikament jeqirdu l-apparat,
li verament huwa l-uniku mod, xi kultant, madwar dik.
Allura għaliex ma we leave fuq din in-nota semi-scary, u aħna se tara int nhar it-Tnejn.
CS50.TV