[Powered by Google Translate] [Wiki 5]
[David J. Malan - Chuo Kikuu cha Harvard]
[Hii ni CS50. - CS50.TV]
>> Hii ni CS50, Wiki 5.
Leo na wiki hii, sisi kuanzisha kidogo ya dunia ya forensics
katika muktadha wa Matatizo Kuweka 4.
Leo itakuwa hotuba abbreviated kwa sababu kuna tukio maalum katika hapa baadaye.
Hivyo tutaweza kuchukua peek na tease wanafunzi wote na wazazi sawa leo
na baadhi ya mambo ambayo ni juu ya upeo wa macho.
>> Kati yao, kama ya Jumatatu, utakuwa chache wanafunzi zaidi.
edX, Harvard na mit mpya online mpango kwa OpenCourseWare na zaidi,
ni uzinduzi juu ya chuo cha Harvard juu ya Jumatatu, ambayo ina maana ya kuja Jumatatu
utakuwa kama wa hesabu ya mwisho, 86,000 classmates ziada
ambao watakuwa kufuatia pamoja na mihadhara CS50 na sehemu
na walkthroughs na seti tatizo.
Na kama sehemu ya hii, utakuwa kuwa wanachama wa darasa uzinduzi wa CS50 na sasa CS50x.
Kama sehemu ya hili sasa, kutambua kwamba kutakuwa na baadhi upsides pia.
Ili kupata tayari kwa ajili ya hii, kwa idadi kubwa ya wanafunzi,
inatosha kusema kwamba hata kama tuna TFS 108 na CAS,
si bora kabisa mwanafunzi-mwalimu uwiano mara moja sisi hit 80,000 ya wanafunzi.
Sisi siyo kwenda kuwa grading wengi tatizo seti manually,
hivyo ilianzisha wiki hii katika kuweka tatizo itakuwa CS50 Check,
ambayo ni kwenda kuwa shirika amri-line ndani ya appliance
kwamba utapata mara moja update baadaye wiki hii.
Wewe utakuwa na uwezo wa kukimbia amri, check50, juu ya pset yako mwenyewe,
na utasikia kupata maoni ya papo ya kama mpango wako ni sahihi au si sahihi
kulingana na design mbalimbali specifikationer kwamba tuna zinazotolewa.
Zaidi juu ya kwamba katika vipimo kuweka tatizo.
Classmates CS50x itakuwa kutumia hii kama vile.
>> Tatizo Set 4 ni wote kuhusu forensics,
na pset hii ilikuwa kweli aliongoza kwa baadhi ya mambo halisi ya maisha
ambapo nilipokuwa katika shule ya kuhitimu mimi interned kwa wakati
na ofisi ya Middlesex Jina la Wilaya ya Mwanasheria kufanya kazi ya kuchunguza mauaji
na mpelelezi wao risasi kuchunguza mauaji.
Nini hii yalifikia, kama nilivyoeleza nadhani wiki chache zilizopita,
ni Jimbo Misa Polisi au wengine atakuja katika,
wangeweza kuacha mbali mambo kama anatoa ngumu na CD na disks floppy na kama,
na kisha lengo la ofisi forensics ilikuwa kuhakikisha
kama kuna au hakuwa na ushahidi wa aina fulani.
Hii ilikuwa Maalum Uchunguzi Unit, hivyo ilikuwa nyeupe-collar uhalifu.
Ilikuwa zaidi kumsumbua aina ya uhalifu, kitu chochote kuwashirikisha baadhi ya aina ya vyombo vya habari digital.
Ni zinageuka kuwa siyo kwamba watu wengi kuandika barua pepe akisema, "Mimi alifanya hivyo."
Hivyo mara nyingi kabisa, upekuzi kuchunguza mauaji hawakufika matunda yote sana,
lakini wakati mwingine watu bila kuandika barua pepe kama hizo.
Hivyo wakati mwingine, jitihada walipewa zawadi.
>> Lakini kuwaongoza hadi pset hii ya kuchunguza mauaji, tutaweza kuwa kuanzisha katika pset4 kidogo ya graphics.
Wewe pengine kuchukua mambo haya kwa alimjalia - JPEGs GIFs,, na kama - siku hizi.
Lakini kama kweli kufikiri juu yake, sanamu, kiasi kama uso wa Rob,
inaweza kuwa inatokana kama mlolongo wa dots au Ukubwa.
Katika kesi ya uso wa Rob, kuna kila aina ya rangi,
na sisi kuanza kuona dots mtu binafsi, inayojulikana kama, saizi ya
mara moja tulianza zoom in
Lakini kama sisi kurahisisha dunia tu kidogo kusema kwamba hii hapa ni Rob katika nyeusi na nyeupe,
kuwakilisha nyeusi na nyeupe, tunaweza tu kutumia binary.
Na kama sisi ni kwenda kutumia binary, 1 au 0, tunaweza kueleza picha hii sawa
ya uso wa Rob smiling na muundo huu wa bits.
11000011 inawakilisha nyeupe, nyeupe, nyeusi, nyeusi, nyeusi, nyeusi, nyeupe, nyeupe.
Na hivyo si leap kubwa kisha kuanza kuzungumza juu ya picha ya rangi,
mambo kwamba Ningependa kuona kwenye Facebook au kuchukua na kamera digital.
Lakini bila ya shaka linapokuja rangi, unahitaji bits zaidi.
Na kawaida kabisa katika ulimwengu wa picha ni kutumia si 1-bit Michezo,
kama hii unaonyesha, lakini 24-bit Michezo, ambapo kwa kweli kupata mamilioni ya rangi.
Hivyo kama katika kesi wakati sisi zoomed katika juu ya jicho Rob wa,
kwamba ilikuwa na idadi yoyote ya mamilioni ya uwezekano tofauti colorful.
Hivyo tutaweza kuanzisha hii katika Tatizo Set 4 kama vile katika walkthrough,
ambayo itakuwa leo saa 3:30 badala ya 2:30 kawaida kwa sababu ya hotuba ya Ijumaa hapa.
Lakini video itakuwa online kama kesho kawaida.
>> Tutaweza pia kuanzisha wewe format faili nyingine.
Hii ni makusudi maana ya kuangalia vitisho mara ya kwanza,
lakini hii ni baadhi tu nyaraka kwa ajili ya struct C.
Ni zinageuka kuwa Microsoft miaka iliyopita kusaidiwa wanatangaza hii format
kuitwa bitmap faili format, bmp, na hii ilikuwa super rahisi, colourful graphical faili format
kwamba ilitumika kwa muda kabisa na wakati mwingine bado kwa wallpapers kwenye kopyuta.
Kama unafikiri nyuma kwa Windows XP na milima rolling na anga ya bluu,
kwamba ilikuwa kawaida picha bmp au bitmap.
Bitmaps ni furaha kwa ajili yetu kwa sababu wana kidogo zaidi utata.
Ni kabisa kama rahisi kama hii gridi ya sekunde 0 na 1s.
Badala yake, una vitu kama header mwanzoni ya faili.
Hivyo kwa maneno mengine, ndani ya faili bmp. Ni rundo zima la sekunde 0 na 1s,
lakini kuna baadhi ya ziada na sekunde 0 1s huko.
Na zinageuka kuwa kile ambacho tumekuwa pengine kuchukuliwa kwa nafasi kwa miaka -
file format kama. doc xls au. au. mp3, mp4., chochote format faili
kwamba wewe ni ukoo na - ni nini hata maana ya kuwa format ya SVG,
kwa sababu mwisho wa siku wote wa files haya sisi kutumia tu kuwa na sekunde 0 na 1s.
Na labda wale sekunde 0 na 1s kuwakilisha ABC kupitia ASCII au kama,
lakini mwisho wa siku, bado tu sekunde 0 na 1s.
Hivyo binadamu tu mara kwa mara ya kuamua mzulia faili mpya format
ambapo wao standardize nini mwelekeo wa bits kwa kweli maana.
Na katika kesi hii hapa, folks ambao iliyoundwa bitmap faili format
alisema kuwa katika Byte sana kwanza katika faili bitmap, kama ulionyehsa kwa 0 kukabiliana huko,
huko ni kwenda kuwa baadhi isiyoeleweka kirahisi aitwaye variable kuitwa bfType,
ambayo tu anasimama kwa ajili ya aina bitmap faili, ni aina gani ya faili bitmap ni hii.
Unaweza infer labda kutoka safu ya pili kwamba kukabiliana 2, Byte idadi 2,
ina mfano wa sekunde 0 na 1s kwamba inawakilisha nini? ukubwa wa kitu fulani.
Na unaendelea kutoka huko.
Hivyo katika Tatizo Set 4, wewe utakuwa kutembea kwa njia ya baadhi ya mambo haya.
Sisi si kuishia kujali juu yao wote.
Lakini taarifa hiyo kuanza kupata kuvutia karibu Byte 54: rgbtBlue, Green, na Red.
Kama ve milele habari kifupi RGB - nyekundu, kijani, bluu - hii ni kumbukumbu ya kwamba
kwa sababu ni zamu nje unaweza rangi rangi zote za upinde wa mvua
na baadhi ya macho ya nyekundu na bluu na kijani.
Na kwa kweli, wazazi katika chumba wapate kukumbuka baadhi ya madomo mwanzo.
Siku hizi, wewe tu kuona moja mwanga mkali kuja nje ya Lens,
lakini nyuma katika siku alikuwa na Lens nyekundu, Lens bluu, na Lens ya kijani,
na pamoja nao kwa lengo la screen na sumu picha colourful.
Na mara nyingi kabisa, katikati ya shule na shule za sekondari ingekuwa lenses wale
milele hivyo kidogo potovu, hivyo walikuwa aina ya kuona picha mara mbili au tatu.
Lakini hiyo ilikuwa wazo. You alikuwa nyekundu na kijani na bluu mwanga uchoraji picha.
Na kanuni hiyo ni kutumika katika kompyuta.
>> Hivyo basi miongoni mwa changamoto kwa ajili yenu katika Tatizo Set 4 ni kwenda kuwa mambo kadhaa.
Moja ni kweli resize picha, kuchukua katika muundo wa sekunde 0 na 1s,
kufikiri ambayo chunks ya sekunde 0 na 1s kuwakilisha nini katika muundo kama hii,
na kisha kufikiri ni jinsi gani ya kuiga saizi - boundin, blues, wiki -
ndani ili wakati picha inaonekana kama hii ya awali,
inaweza kuangalia kama hii badala baada ya hapo.
Miongoni mwa changamoto nyingine pia ni kwenda kuwa kuwa wewe utakuwa mitupu picha ya kuchunguza mauaji
ya faili halisi kutoka kamera ya digital.
Na juu ya kamera kwamba, mara moja juu ya muda, walikuwa rundo zima la photos.
Tatizo ni sisi ajali erased au alikuwa image kupotoshwa kwa namna fulani.
Mambo mabaya kutokea na kamera digital.
Na hivyo sisi haraka kunakiliwa wote wa mbali na sekunde 0 1s ya kadi ya kwamba kwa ajili yenu,
akawaokoa wote katika faili moja kubwa, na kisha tutaweza mkono wao na wewe katika Tatizo Set 4
hivyo kwamba unaweza kuandika mpango katika C na ambayo kuokoa wote wa JPEGs hizo, walau.
Na zinageuka JPEGs kwamba, ingawa wao ni kiasi fulani ya muundo tata faili -
wao uko magumu zaidi kuliko uso hii smiling hapa -
zinageuka kuwa kila JPEG kuanza na mwelekeo huo wa sekunde 0 na 1s.
Hivyo kutumia, hatimaye, kitanzi wakati au kwa kitanzi au sawa,
unaweza iterate juu ya yote na sekunde 0 1s katika picha hii ya kuchunguza mauaji,
na kila wakati unaweza kuona mfano maalum ambacho defined katika vipimo kuweka tatizo,
unaweza kudhani hapa ni pamoja na uwezekano juu sana, mwanzo wa JPEG.
Na haraka kama wewe kupata mfano huo baadhi idadi ya ka
au kilobytes au megabaiti baadaye, unaweza kudhani hapa ni JPEG pili,
picha mimi alichukua baada ya moja ya kwanza.
Hebu kuacha kusoma kwamba faili kwanza, kuanza kuandika hii moja mpya,
na pato la mpango wako kwa pset4 ni kwenda kuwa kama wengi kama 50 JPEGs.
Na kama siyo 50 JPEGs, una kidogo ya kitanzi.
Kama una idadi ya usio wa JPEGs, una kitanzi usio.
Hivyo kwamba pia tutakuwa kabisa kesi ya kawaida.
Basi hiyo ni nini juu ya upeo wa macho.
>> Maswali 0 nyuma yetu, kwa kutambua email yangu kwamba invariably kuna folks ambao ni wawili na furaha,
aina ya wakati upande wowote, na kusikitisha kuzunguka Jaribio 0.
Na tafadhali kufikia nje kwangu, kichwa TF Zamyla, TF yako mwenyewe,
au moja ya CAS kwa kuwa wewe kujua kama ungependa kujadili jinsi mambo akaenda.
>> Hivyo kumvutia wazazi hapa katika chumba, ni nini maktaba CS50?
[Kicheko] Kazi nzuri.
Nini maktaba CS50? Yeah. >> [Mwanafunzi] Ni kuweka kabla ya kuandikwa ya maadili [inaudible]
Okay, nzuri.
Ni kuweka kabla ya kuandikwa ya kificho kwamba sisi wafanyakazi aliandika, sisi kutoa na wewe,
ambayo hutoa baadhi funktionalitet ya kawaida,
stuff kama kupata yangu kamba, kupata yangu int - yote ya kazi ambayo ni waliotajwa hapa.
>> Kuanzia sasa, sisi kuanza kwa kweli kuchukua magurudumu haya mafunzo mbali.
Sisi ni kwenda kuanza kuchukua string kutoka kwenu,
ambayo wanakumbuka mara tu kisawe kwa ajili ya aina yale halisi data? >> [Nyingi wanafunzi] Char *.
Char *. Kwa wazazi, kwamba pengine alikuwa [hufanya whooshing sauti]. Hiyo ni nzuri.
Char * tutaweza kuanza kuona kwenye screen wote zaidi kama sisi kuondoa string kutoka msamiati wetu,
angalau linapokuja kweli kuandika code.
Vile vile, tutaweza kuacha kutumia baadhi ya kazi hizi kama kiasi
kwa sababu mipango yetu ni kwenda kupata kisasa zaidi.
Badala tu ya kuandika mipango kwamba kukaa pale na blinking haraka,
kusubiri kwa mtumiaji na aina kitu katika, utapata pembejeo yako kutoka mahali pengine.
Kwa mfano, utapata yao kutoka katika mfululizo wa bits kwenye gari mitaa ngumu.
Wewe utakuwa badala kupata yao katika siku zijazo kutoka uhusiano wa mtandao,
baadhi tovuti mahali fulani.
>> Basi hebu peel nyuma safu hii kwa mara ya kwanza na kuvuta Appliance CS50
na faili hii inaitwa cs50.h, ambayo tumekuwa # ikiwa ni pamoja na kwa wiki,
lakini hebu kweli kuona nini ndani ya hii.
juu ya faili katika bluu ni tu rundo zima la comments:
udhamini habari na leseni.
Hii ni aina ya dhana ya kawaida katika programu
kwa sababu mengi ya programu siku hizi ni nini wito chanzo wazi,
ambayo ina maana kwamba mtu ameandika code na alifanya hivyo kwa uhuru zaidi
si tu kukimbia na kutumia lakini kwa kweli kusoma na kubadilisha na kuunganisha katika kazi yako mwenyewe.
Hivyo kwamba ni nini tumekuwa kutumia, wazi chanzo programu, angalau katika fomu ndogo sana.
Kama mimi kitabu chini cha maoni, ingawa, tutaweza kuanza kuona baadhi ya mambo zaidi ya ukoo.
Ilani ya juu hapa kwamba faili cs50.h ni pamoja na rundo zima la files header.
Wengi wa haya, sisi hawajaona mbele, lakini moja ni familiar.
Kati ya hao kuwa sisi kuonekana, angalau kwa ufupi, hivi sasa? >> [Mwanafunzi] darasa la maktaba.
Yeah, kiwango maktaba. stdlib.h ina malloc.
Mara sisi kuanza kuzungumza juu ya mgao wa nguvu ya kumbukumbu,
ambayo tutaweza kurudi wiki ijayo kama vizuri, sisi ilianza ikiwa ni pamoja na faili hilo.
Ni zinageuka kuwa bool na kweli na uongo si kweli zipo katika C per se
isipokuwa wewe ni pamoja na faili hii hapa.
Sisi kwa wiki wamekuwa pamoja stdbool.h
hivyo kwamba unaweza kutumia dhana ya bool, kweli au uongo.
Bila hili, ungependa kuwa na aina ya bandia na kutumia int
na tu kiholela kudhani kwamba 0 ni uongo na 1 ni kweli.
Kama sisi kitabu chini zaidi, hapa ni ufafanuzi yetu ya kamba.
Ni zinageuka, kama tumekuwa alisema kabla, kwamba ambapo nyota hii ni kweli haina jambo.
Unaweza hata kuwa na nafasi pande zote.
Sisi huu muhula wamekuwa kukuza kama hii kufanya wazi
kwamba nyota ina nini na aina,
lakini kutambua tu kama kawaida, kama siyo kidogo zaidi ya kawaida,
ni kuweka huko, lakini functionally ni kitu kimoja.
Lakini sasa kama sisi kusoma chini zaidi, hebu tuangalie GetInt
kwa sababu sisi kutumika kwamba labda kwanza kabla ya kitu kingine chochote hii muhula.
Hapa ni GetInt. Hii ni nini? >> [Mwanafunzi] mfano. >> Hii ni mfano.
Mara nyingi, sisi kuweka prototypes katika vilele vya wetu c files.,
lakini unaweza pia kuweka prototypes katika files header,. h files, kama hii moja hapa
hivyo kwamba wakati wewe kuandika baadhi ya majukumu ya kwamba unataka watu wengine kuwa na uwezo wa kutumia,
ambayo ni hasa kesi na maktaba CS50,
wewe si tu kutekeleza majukumu yako katika kitu kama cs50.c,
wewe pia kuweka prototypes si wakati juu ya faili kwamba lakini wakati juu ya faili header.
Kisha kwamba faili header ni nini marafiki na wafanyakazi wenzake ni pamoja na
na # pamoja katika kanuni zao wenyewe.
Hivyo muda wote huu, tumekuwa pamoja wote prototypes hizi,
ufanisi katika juu ya faili yako lakini kwa njia ya hii ni pamoja na utaratibu #,
ambayo kimsingi nakala na pastes faili hii katika yako mwenyewe.
Hapa ni baadhi ya nyaraka uungwana kina.
Tumekuwa pretty much kuchukuliwa kwa nafasi ya kuwa GetInt anapata int,
lakini zinageuka kuna kesi kona fulani.
Nini kama mtumiaji aina katika idadi hiyo ni njia kubwa mno, quintillion,
kwamba tu hawezi fit ndani ya int? Je, ni tabia yanayotarajiwa?
Kimsingi, ni kutabirika.
Hivyo katika kesi hii, kama kweli kusoma magazeti faini,
utasikia kweli kuona kwamba kama mstari hauwezi kusoma, hii INT_MAX atakaporudi.
Sisi sijawahi kuongelea kuhusu hili, lakini kwa kuzingatia mtaji wake, ni nini pengine?
[Mwanafunzi] mara kwa mara. >> Ni mara kwa mara.
Ni baadhi ya mara kwa mara maalum kwamba pengine alitangaza katika moja ya files wale header
kwamba ni juu ya juu katika faili, na INT_MAX pengine ni kitu kama takribani bilioni 2,
wazo kuwa kuwa sababu tunahitaji namna fulani yanamaanisha kwamba kitu potoka,
sisi, ndiyo, na idadi bilioni 4 katika ovyo yetu: -2 bilioni hadi bilioni 2, kutoa au kuchukua.
Naam, ni ya kawaida katika programu hii ni wewe kuiba moja tu ya wale idadi,
labda 0, labda bilioni 2, labda -2000000000,
hivyo unaweza kutumia moja ya maadili yako iwezekanavyo ili uweze kufanya kwa dunia
kwamba kama kitu fulani kitaenda vibaya, nitarudi hii super kubwa thamani.
Lakini hutaki mtumiaji kuandika kitu kama cryptic 234 ..., idadi kubwa kweli kweli.
Wewe generalize badala kama mara kwa mara.
Hivyo kweli, kama wewe walikuwa kuwa anal majuma machache yaliyopita, wakati wowote wewe kuitwa GetInt,
unapaswa kuangalia kwa kuwa kama hali alifanya aina user katika INT_MAX,
au, hasa zaidi, alifanya GetInt kurudi INT_MAX, kwa sababu kama ni hivyo,
kwamba kwa kweli ina maana hawakuwa aina yake. Kitu potoka katika kesi hii.
Hivyo hii ni nini ujumla inayojulikana kama thamani sentinel, ambayo tu ina maana maalum.
>> Hebu sasa kurejea katika faili c..
Faili C limekuwepo katika appliance kwa muda fulani.
Na kwa kweli, appliance ina kabla ya compiled kwa wewe ndani ya kwamba kitu sisi kuitwa kitu kificho,
lakini ni tu Haijalishi wewe ambapo ni kwa sababu mfumo anajua
katika kesi hii ambapo ni: appliance.
Hebu kitabu chini sasa kwa GetInt na kuona jinsi GetInt imekuwa ikifanya kazi muda wote huu.
Hapa tuna sawa maoni kutoka kabla.
Hebu kuvuta tu sehemu code.
Na nini sisi kwa GetInt ni zifuatazo.
Inachukua hakuna pembejeo.
Kuirudisha int, wakati (wa kweli), hivyo tuna makusudi usio kitanzi,
lakini labda tutaweza kuvunja nje ya hii kwa namna fulani au kurudi kutoka ndani ya hii.
>> Hebu angalia jinsi hii matendo.
Tunaonekana kutumia GetString katika mstari huu wa kwanza ndani ya kitanzi, 166.
Hii sasa ni mazoezi mazuri kwa sababu chini ya mazingira gani inaweza GetString kurudi
maalum Keyword null? >> [Mwanafunzi] Kama kitu fulani kitaenda vibaya.
Kama kitu fulani kitaenda vibaya. Na nini inaweza kwenda vibaya wakati wewe piga kitu kama GetString?
Yeah. >> [Mwanafunzi] Malloc inashindwa kuwapa ints.
Yeah. Labda malloc inashindwa.
Mahali fulani chini ya Hood, GetString wito malloc, ambao unagawa kumbukumbu,
ambayo inakuwezesha kuhifadhi kompyuta zote za wahusika
kwamba mtumiaji aina katika keyboard.
Na kudhani mtumiaji alikuwa na mengi nzima ya muda bure na typed zaidi, kwa mfano,
kuliko bilioni 2 wahusika katika, wahusika zaidi ya kompyuta hata ina RAM.
GetString ina kuwa na uwezo kwa ishara ya kwamba na wewe.
Hata kama hii ni super, super kawaida kona kesi,
ina namna fulani kuwa na uwezo wa kushughulikia suala hili,
na hivyo GetString, kama sisi akaenda nyuma na kusoma nyaraka zake, anafanya katika ukweli null kurudi.
Hivyo sasa ikiwa GetString inashindwa na kurudi null, GetInt ataenda kushindwa na kurudi INT_MAX
tu kama sentinel. Hizi ni baadhi tu ya binadamu makongamano.
njia pekee ya kujua hii ni kesi ni kwa kusoma nyaraka.
>> Hebu kitabu chini ambapo int ni kweli waliopata.
Kama mimi kitabu chini kidogo zaidi, katika mstari 170, tuna maoni juu ya mistari haya.
Tunatangaza katika 172 int, n, na Char, c, na kisha kazi hii mpya,
ambayo baadhi yenu mashaka hela kabla, sscanf.
Hii anasimama kwa scanf kamba.
Kwa maneno mengine, nipe string nami Scan kwa vipande vya habari ya riba.
Hiyo ina maana gani?
Tuseme kwamba ninapoandika katika, literally, 123 katika keyboard na kisha hit kuingia.
Je, ni aina ya data ya 123 wakati akarudi na GetString? >> [Mwanafunzi] Kamba.
Ni wazi kamba, sawa? I got kamba.
Hivyo 123 ni kweli, quote-unquote, 123 na 0 \ katika mwisho wake.
Hiyo siyo int. Hiyo si idadi. Inaonekana kama idadi lakini si kweli.
Hiyo ni nini GetInt kufanya?
Ina Scan kwamba string kushoto kwenda kulia - 123 \ 0 - na kwa namna fulani kubadilisha na integer halisi.
Unaweza kufikiri jinsi ya kufanya hili.
Kama unafikiri nyuma pset2, wewe labda got kidogo starehe na Kaisari
au Vigenere, hivyo unaweza iterate juu ya kamba, unaweza kubadilisha chars kwa ints.
Lakini heck, ni mengi yote ya kazi.
Mbona si wito kazi kama sscanf kwamba gani kwa ajili yenu?
Hivyo sscanf anatarajia hoja - katika kesi hii inaitwa mstari, ambayo ni kamba.
Wewe basi bayana katika quotes, ni sawa na printf, unatarajia nini kuona katika kamba hii.
Na nini mimi kusema hapa ni mimi kutarajia kuona idadi decimal na labda tabia.
Na tutaweza kuona nini hii ni kesi katika muda tu.
Na zinageuka kuwa nukuu hii sasa ni kukumbusha ya stuff tulipoanza kuzungumza kuhusu
tu zaidi ya wiki iliyopita.
Nini ni & n na & c kufanya kwa sisi hapa? >> [Mwanafunzi] mitaani ya n na anuani ya c.
Yeah. Ni kunipa anuani ya n na anuani ya c. Kwa nini ni kwamba ni muhimu?
Unajua kwamba pamoja na utendaji katika C, unaweza daima kurudi thamani au hakuna thamani wakati wote.
Unaweza kurudi int, kamba, kuelea, char, chochote, au unaweza kurudi batili,
lakini unaweza tu kurudi jambo moja Upeo.
Lakini hapa tunataka sscanf kurudi kwangu labda int, idadi decimal,
na pia Char, na mimi itabidi kueleza kwa nini Char katika wakati huu.
Wewe unataka ufanisi sscanf kurudi mambo mawili, lakini kwamba si tu inawezekana katika C.
Unaweza kufanya kazi ya kuzunguka kwamba kwa kupita katika anwani mbili
kwa sababu kwa haraka kama wewe mkono kazi anwani mbili,
nini wanaweza kufanya kazi hiyo pamoja nao? >> [Mwanafunzi] Andika anwani hizo.
Ni unaweza kuandika kwa anwani hizo.
Unaweza kutumia operesheni nyota na kwenda huko, kwa kila moja ya anwani hizo.
Ni aina ya mfumo huu nyuma-mlango lakini kawaida sana kwa ajili ya kubadilisha maadili ya vigezo
zaidi ya moja tu mahali - katika kesi hii, mbili.
Sasa mimi nina taarifa ya kuangalia kwa == 1 na kisha kurudi n kama hana, kwa kweli, kutathmini kwa kweli.
Basi nini kinaendelea? Kitaalam, wote kweli tunataka kutokea katika GetInt ni hii.
Tunataka kuchanganua, ili kuzungumza, tunataka kusoma string - quote-unquote 123 -
na kama inaonekana kama kuna idadi huko, nini tuko kuwaambia sscanf kufanya
ni kuweka kwamba idadi - 123 - katika hili variable n kwa ajili yangu.
Hivyo kwa nini basi, mimi kwa kweli kuwa na hili pia?
Ni nini nafasi ya sscanf akisema unaweza pia kupata tabia hapa?
[Inaudible mwanafunzi majibu] >> uhakika decimal kweli anaweza kufanya kazi.
Hebu kushikilia kwamba walidhani kwa muda. Gani kingine?
[Mwanafunzi] Ni inaweza kuwa null. >> Bora mawazo. Ni inaweza kuwa tabia null.
Ni kweli si katika kesi hii. Yeah. >> [Mwanafunzi] ASCII.
ASCII. Au ngoja generalize hata zaidi.
C% kuna tu kwa ajili ya kuangalia makosa.
Hatutaki kuwa kuna tabia baada ya idadi,
lakini nini hii inaruhusu mimi kufanya ni yafuatayo.
Ni zinageuka kuwa sscanf, badala ya kuhifadhi maadili katika n na c katika mfano huu hapa,
nini pia haina ni kuirudisha idadi ya vigezo ni kuweka maadili in
Hivyo kama wewe tu aina katika 123, basi tu d% ni kwenda mechi,
na tu n anapata kuhifadhiwa kwa thamani kama 123,
na hakuna kitu anapata kuweka katika c.
C bado thamani ya takataka, hivyo kusema -
takataka kwa sababu ni haijawahi initialized kwa thamani fulani.
Hivyo katika kesi hiyo, sscanf anarudi 1 kwa sababu mimi wakazi 1 ya kuyatumia hizo,
katika kesi ambayo kubwa, nina int hivyo mimi huru line ya bure juu ya kumbukumbu
GetString kwamba kweli zilizotengwa, na kisha mimi kurudi n,
mwingine kama wewe umewahi kujiuliza ambapo kwamba Jaribu tena kauli huja kutoka, inakuja kutoka kulia hapa.
Hivyo kama, kwa kulinganisha, ninapoandika katika 123foo - baadhi tu mlolongo random ya asilia -
sscanf ni kwenda kuona idadi, hesabu, idadi, f,
na ni kwenda kuweka 123 katika n; ni kwenda kuweka f katika c na kisha kurudi 2.
Hivyo tuna, tu kutumia ufafanuzi wa msingi wa tabia ya sscanf, njia rahisi sana -
vizuri, tata katika mtazamo wa kwanza lakini mwisho wa siku haki rahisi utaratibu -
ya kusema ni kuna int na kama ni hivyo, ni kwamba kitu pekee mimi kupatikana?
Na hapa ni whitespace makusudi.
Kama unaweza kusoma nyaraka kwa ajili ya sscanf, ni anakwambia kwamba kama wewe ni pamoja na kipande ya whitespace
mwanzoni au mwishoni, sscanf pia itaruhusu mtumiaji, kwa sababu yoyote,
hit nafasi bar 123 na kwamba itakuwa ya halali.
Huwezi yell katika user tu kwa sababu wao hit nafasi bar
mwanzoni au mwishoni, ambayo ni kidogo tu zaidi user-kirafiki.
>> Maswali yoyote juu ya basi GetInt? Yeah. >> [Mwanafunzi] Je, iwapo tu ya kuweka katika Char?
Nzuri swali.
Je, iwapo tu typed katika Char kama f na hit Enter bila hata kuandika 123?
Unafikiri hii tabia ya mstari wa kanuni basi ingekuwa?
[Inaudible mwanafunzi majibu]
Yeah, hivyo sscanf unaweza cover kwamba pia kwa sababu katika kesi hiyo, siyo kwenda kujaza n au c.
Ni kwenda badala kurudi 0, katika kesi ambayo mimi nina pia kuambukizwa kwamba tukio
kwa sababu thamani inatarajiwa nataka ni 1.
Mimi nataka tu moja na jambo moja tu ya kujazwa. Nzuri swali.
>> Wengine? Wote haki.
>> Hebu si kwenda kwa yote ya kazi katika hapa,
lakini moja ambayo inaonekana kuwa labda ya riba iliyobaki ni GetString
kwa sababu ni zinageuka kuwa GetFloat, GetInt, GetDouble, GetLongLong
wote punt mengi ya utendaji wao wa GetString.
Basi hebu tuangalie jinsi yeye ni kutekelezwa hapa.
Hii moja inaonekana tata kidogo, lakini hutumia misingi sawa
kwamba sisi kuanza kuzungumza kuhusu wiki iliyopita.
Katika GetString, ambayo inachukua hakuna hoja kama kwa utupu juu hapa
na kuirudisha kamba, mimi inaonekana ni kutangaza string kuitwa buffer.
Mimi kwa kweli sijui ni nini ambayo inaenda kutumika kwa ajili bado, lakini tutaweza kuona.
Inaonekana kama uwezo ni kwa default 0.
Uhakika kabisa ambapo hii ni kwenda, uhakika nini n inaenda kutumika kwa ajili bado,
lakini sasa ni kupata zaidi kidogo ya kuvutia.
Katika mstari 243, sisi kutangaza int, c.
Hii ni aina ya kina ya kijinga.
Char ni 8 bits, na 8 bits unaweza kuhifadhi wangapi maadili tofauti? >> [Mwanafunzi] 256. >> 256.
Tatizo ni kama unataka kuwa na 256 tofauti wahusika ASCII, ambayo kuna
kama unafikiri nyuma - na hii si kitu kwa kukariri.
Lakini kama unadhani nyuma chati kwamba kubwa ASCII tulikuwa wiki iliyopita,
kulikuwa katika kesi hiyo 128 au 256 wahusika ASCII.
Sisi kutumika mifumo yote ya hadi sekunde 0 na 1s.
Hiyo ni tatizo kama unataka kuwa na uwezo wa kuchunguza makosa
kwa sababu kama uko tayari kutumia maadili 256 kwa wahusika wako,
wewe si kweli mpango wa mbele kwa sababu sasa una hakuna njia ya kusema,
hii si tabia ya legit, hii ni baadhi ya ujumbe makosa.
Basi nini dunia gani ni wao kutumia ijayo kubwa thamani, kitu kama int,
ili kuwa na idadi ya mambo bits, 32, kwa ajili ya maadili bilioni 4 iwezekanavyo
hivyo kwamba unaweza tu kuishia kutumia kimsingi 257 kati yao,
1 ya ambayo ina baadhi maana maalum kama makosa.
>> Basi hebu angalia jinsi hii matendo.
Katika mstari 246, nina hii kubwa wakati kitanzi kwamba ni wito fgetc,
f maana ya SVG, hivyo getc, na kisha stdin.
Ni zinageuka hii ni njia tu sahihi zaidi ya kusema kusoma pembejeo kutoka keyboard.
Darasa la pembejeo njia keyboard, pato kiwango ina maana screen,
na kiwango makosa, ambayo tutaweza kuona katika pset4, ina maana screen
lakini sehemu maalum ya screen ili siyo alikataa na pato halisi
kwamba lengo na magazeti. Lakini zaidi juu ya kwamba katika siku zijazo.
Hivyo fgetc njia tu kusoma moja tabia kutoka keyboard na kuhifadhi wapi?
Kuhifadhi katika c.
Na kisha kuangalia - hivyo mimi nina kutumia tu kuhusianisha baadhi Boolean hapa -
kuangalia kwamba hana sawa - \ n, hivyo user ina hit Enter, tunataka kukomesha katika hatua hiyo,
mwisho wa kitanzi - na sisi pia wanataka kuangalia kwa EOF maalum ya mara kwa mara,
ambayo kama unajua au nadhani, ni nini kusimama kwa? >> [Mwanafunzi] Mwisho wa faili. >> Mwisho wa faili.
Hii ni aina ya kiupuzi kwa sababu kama mimi nina kuandika katika keyboard,
kuna kweli hakuna faili kushiriki katika hili,
lakini hii tu ya aina ya muda generic kutumika kwa maana ya
kwamba kitu kingine ni kuja kutoka kwa vidole binadamu.
EOF - mwisho wa faili.
Kama kando, kama wameweza milele hit Document D saa keyboard yako, si kwamba ungependa kuwa bado -
ve hit Document C - Document D zituma hii mara kwa mara maalum iitwayo EOF.
Hivyo sasa sisi tu baadhi ya nguvu ya kumbukumbu mgao.
>> Hivyo kama (n + 1> uwezo). Sasa mimi itabidi kueleza n.
N ni jinsi tu wengi ka ni sasa katika buffer,
kamba kwamba wewe sasa kujenga kutoka kwa mtumiaji.
Kama una zaidi ya wahusika katika buffer yako kuliko wewe kuwa na uwezo katika buffer,
intuitively nini tunahitaji kufanya basi ni kutenga zaidi ya uwezo.
Hivyo nina kwenda kwa skim juu ya baadhi ya hesabu hapa na lengo tu juu ya kazi hii hapa.
Unajua nini malloc ni au ni angalau ujumla ukoo.
Kuchukua nadhani nini realloc gani. >> [Mwanafunzi] Anaongeza kumbukumbu.
Siyo kabisa kuongeza kumbukumbu. Ni reallocates kumbukumbu kama ifuatavyo.
Kama bado kuna chumba katika mwisho wa kamba kukupa zaidi ya kumbukumbu ya kwamba
kuliko awali inakupa, kisha utapata kwamba kumbukumbu ya ziada.
Hivyo unaweza tu kuendelea kuweka wahusika string wa nyuma kwa nyuma kwa nyuma kwa nyuma.
Lakini kama si kwamba kesi kwa sababu wewe walisubiri muda mrefu sana
na kitu random got plopped katika kumbukumbu kuna
lakini kuna kumbukumbu ya ziada hapa chini, hiyo ni sawa.
Realloc anaenda kufanya kuinua nzito kwa ajili yenu,
hoja string umeisoma katika hivi sasa kutoka hapa, akaiweka chini huko,
na kisha kukupa baadhi zaidi Runway katika hatua hiyo.
>> Hivyo, pamoja na wimbi la mkono, basi mimi kusema kwamba kile GetString ni kufanya
ni ni kwa kuanzia na buffer ndogo, labda moja tabia,
na kama mtumiaji aina katika herufi mbili, GetString kuishia wito realloc na anasema
moja tabia hiyo haitoshi; nipe herufi mbili.
Kisha kama kusoma kwa njia ya mantiki ya kitanzi, ni kwenda kusema
user typed katika herufi 3; nipe sasa si 2 lakini 4 wahusika,
kisha nipe 8, basi nipe 16 na 32.
ukweli kwamba mimi nina uwezo mara dufu kila wakati
ina maana kwamba buffer si kwenda kukua polepole, ni kwenda kukua super kufunga.
Na nini inaweza kuwa faida ya kwamba?
Kwa nini mimi mara mbili ya ukubwa wa buffer
hata kama mtumiaji ili tu haja moja ya ziada tabia kutoka keyboard?
[Inaudible mwanafunzi majibu] >> gani hiyo? >> [Mwanafunzi] Huna kukua ni kama mara nyingi.
Hasa. Huna kukua ni kama mara nyingi.
Na hii ni aina tu ya wewe ni Hedging bets yako hapa,
wazo kuwa kuwa hutaki kuwaita realloc mengi kwa sababu huelekea kuwa polepole.
Wakati wowote kuuliza mfumo wa uendeshaji kwa ajili ya kumbukumbu,
kama wewe utakuwa haraka kuona katika kuweka baadaye tatizo, huelekea kuchukua muda.
Hivyo kukanusha kwamba kiasi cha muda, hata kama wewe ni kupoteza baadhi ya nafasi,
huelekea kuwa ni jambo jema.
>> Lakini kama sisi kusoma kupitia sehemu ya mwisho ya GetString hapa -
na tena kuelewa kila line moja hapa sio muhimu leo ​​-
taarifa kwamba hatimaye wito malloc tena
na kutenga hasa kama ka wengi kama ni mahitaji kwa kamba
na kisha throws mbali na wito bure buffer kupita kiasi kikubwa
kama ni kweli got mara mbili mara nyingi sana.
Hivyo katika muda mfupi, kwamba ni jinsi GetString imekuwa ikifanya kazi muda wote huu.
Yote gani ni kusoma moja ya tabia kwa wakati tena na tena na tena,
na kila wakati inahitaji baadhi ya kumbukumbu ya ziada, inauliza mfumo wa uendeshaji kwa
kwa kumwita realloc.
>> Maswali yoyote? Wote haki.
>> mashambulizi.
Sasa kwa kuwa tunaelewa kuyatumia au angalau zinazidi ukoo na kuyatumia,
hebu fikiria jinsi dunia zima kuanza kuanguka
kama huna kabisa kulinda dhidi ya watumiaji adversarial,
watu ambao ni kujaribu Hack ndani ya mfumo wako,
watu ambao ni kujaribu kuiba programu yako kwa circumventing baadhi ya kanuni za usajili
wapate kuwa vinginevyo na aina in
>> Kuangalia mfano huu hapa, ambayo ni tu C kificho kwamba ina kazi kuu chini
kwamba wito foo kazi. Na kile ni kupitisha foo?
[Mwanafunzi] hoja moja. >> [Malan] hoja moja.
Hivyo argv [1], ambayo ina maana ya neno kwanza kwamba mtumiaji typed katika mstari amri
baada a.out au chochote mpango inaitwa.
Hivyo foo juu inachukua katika * Char. Lakini * Char ni yale tu? >> [Mwanafunzi] kamba.
[Malan] kamba, hivyo kuna kitu kipya hapa.
Hiyo kamba ni kiholela kuitwa bar.
Katika mstari huu hapa, char c [12]; katika aina ya nusu ya kiufundi Kiingereza, ni nini mstari huu kufanya?
[Mwanafunzi] safu ya - >> Array ya? >> [Mwanafunzi] Nyingine. >> Nyingine.
Nipe safu ya wahusika 12. Hivyo tupate wito huu buffer.
Ni kitaalam inaitwa c, lakini buffer katika programu njia tu rundo la nafasi
kuwa unaweza kuweka baadhi ya mambo in
Kisha mwisho, memcpy tumekuwa si kutumika kabla, lakini pengine unaweza nadhani nini inakuwa hivyo.
Ni nakala ya kumbukumbu. Ni nini nini?
Ni dhahiri nakala bar, mchango wake, katika c lakini tu hadi urefu wa bar.
Lakini kuna mdudu hapa. >> [Mwanafunzi] Unahitaji tabia sizeof. >> Sawa.
Kitaalam, tunatakiwa kufanya strlen (bar) * sizeof (Char)). Hiyo ni sahihi.
Lakini katika hali mbaya hapa, hebu kudhani kwamba that's -
Sawa. Kisha kuna mbili mende.
Hivyo sizeof (Char));
Hebu tufanye hili kidogo pana.
Hivyo sasa bado kuna mdudu, ambayo ni nini? >> [Inaudible mwanafunzi majibu]
Angalia kwa nini? >> [Mwanafunzi] Angalia kwa null.
Tunapaswa ujumla kuangalia kwa null sababu mambo mabaya kutokea
wakati pointer yako ni null sababu unaweza kuishia kwenda huko,
na unapaswa si milele kuwa kwenda kwa null na dereferencing kwa operator nyota.
Basi hiyo ni nzuri. Na kile kingine ni sisi kufanya? Kimantiki, kuna flaw hapa pia.
[Mwanafunzi] Angalia kama argc ni> = kwa 2.
Ili kuangalia kama ni argc> = 2. Okay, hivyo kuna tatu mende katika mpango huu hapa.
Sisi ni sasa kuangalia kama mtumiaji kweli typed katika kitu chochote ndani ya argv [1]. Nzuri.
Basi nini mdudu wa tatu? Yeah. >> [Mwanafunzi] C wanaweza kuwa kubwa ya kutosha.
Nzuri. Sisi checked moja tukio.
Sisi implicitly checked usinakili zaidi kuliko kumbukumbu ingekuwa kisichozidi urefu wa bar.
Hivyo kama string mtumiaji typed katika ni 10 wahusika muda mrefu,
hii ni kusema tu nakala wahusika 10. Na hiyo ni sawa.
Lakini nini kama mtumiaji typed katika neno saa haraka kama neno 20-tabia?
Hii ni kusema nakala wahusika 20 kutoka bar ndani ya nini?
C, inayojulikana kama buffer yetu, ambayo ina maana tu aliandika data
hadi 8 Byte maeneo ambayo huna mwenyewe,
na humiliki yao kwa maana ya kwamba kamwe zilizotengwa kwao.
Hivyo hii ni nini ujumla inayojulikana kama mashambulizi buffer kufurika au buffer mashambulizi overrun.
Na ni mashambulizi kwa maana kwamba kama mtumiaji au programu hiyo ni wito kazi yako
ni kufanya hivyo kwa nia mbaya, nini hasa kinatokea ijayo inaweza kweli kabisa mbaya.
>> Basi hebu tuangalie picha hii hapa.
Hii picha inawakilisha stack yako ya kumbukumbu.
Kumbuka kwamba kila wakati wewe piga kazi kupata sura hii kidogo juu ya stack
na kisha mwingine na kisha mwingine na mwingine.
Na hivi sasa, tumekuwa aina tu ya abstracted haya kama mistatili
aidha ubaoni au kwenye screen hapa.
Lakini kama sisi zoom katika kwenye moja ya mistatiri hizo, wakati wewe piga foo kazi,
zinageuka kuwa kuna zaidi juu ya ndani ya stack ya frame kwamba katika mstatili kwamba
kuliko tu x na y na a na b, kama sisi hawakuwa kuzungumza juu ya kubadilishana.
Ni zinageuka kuwa kuna baadhi ya maelezo ya chini ya ngazi, kati yao Kurudi mitaani.
Hivyo zinageuka wakati kuu wito foo, kuu ina kuwajulisha foo
nini anwani kuu ni katika kumbukumbu ya kompyuta
kwa sababu vinginevyo, kwa haraka kama foo inafanywa utekelezaji, kama katika kesi hii hapa,
mara moja wewe kufikia hii funge curly brace mwishoni mwa foo,
jinsi heck haina foo kujua ambapo udhibiti wa mpango zinatakiwa kwenda?
Ni zinageuka kuwa jibu la swali hilo ni katika mstatili hii nyekundu hapa.
Hii inawakilisha pointer, na ni juu ya kompyuta kuhifadhi kwa muda
juu ya stack kinachojulikana anuani ya kuu ili haraka kama foo inafanywa utekelezaji,
kompyuta anajua wapi na nini line katika kuu ya kwenda nyuma ya.
Kuokolewa Frame pointer inahusiana vile vile kwa hii.
Char * bar hapa inawakilisha nini?
Sasa hii sehemu ya bluu hapa ni sura ya foo. Je, ni bar?
Bar ni tu hoja kwa kazi foo.
Hivyo sasa tuko nyuma katika aina ya picha za ukoo.
Kuna zaidi ya mambo na distractions zaidi juu ya screen,
lakini hii mwanga sehemu bluu tu ni nini tumekuwa kuchora ubaoni
kwa kitu kama byta. Hiyo ni sura kwa foo.
Na kitu pekee katika haki sasa ni bar, ambayo ni hii parameter.
Lakini nini kingine unapaswa kuwa katika stack kulingana na kanuni hii hapa?
[Mwanafunzi] Char c [12]. >> [Malan] Char c [12].
Tunapaswa pia kuona viwanja 12 ya kumbukumbu zilizotengwa kwa ajili ya variable kuitwa c,
na kwa kweli hatuwezi kuwa na kwamba kwenye screen.
sana juu kuna c [0], na kisha mwandishi wa mchoro huu
haikujali kuchora wote wa mraba, lakini kuna shaka 12 kuna
kwa sababu kama ukiangalia chini kulia, c [11] kama wewe kuhesabu kutoka 0 12 ni vile Byte.
Lakini hapa ni tatizo.
Ambayo mwelekeo ni kuongezeka c?
Aina ya juu chini ikiwa ni kuanza saa ya juu na kukua hadi chini.
Haionekani kama sisi kushoto wenyewe Runway sana hapa wakati wote.
Tumekuwa aina ya walijenga wenyewe ndani ya kona,
na kwamba c [11] ni haki juu ya bar, ambayo ni haki ya juu dhidi ya pointer Saved Frame,
ambayo ni haki juu ya mitaani Kurudi. Hakuna chumba zaidi.
Basi nini maana basi kama wewe screw up
na wewe jaribu kusoma ka 20 ndani ya buffer 12-Byte?
Ambapo ni wale 8 ka ziada kwenda? >> [Mwanafunzi] Ndani -
Ndani ya kila kitu kingine, ambayo baadhi ni super muhimu.
Na jambo muhimu zaidi, uwezekano, ni sanduku nyekundu huko, Kurudi mitaani,
kwa sababu tuchukulie kwamba wewe ama ajali au adversarially overwrite ka wale 4,
kwamba anuani pointer, si tu kwa takataka lakini kwa idadi
kinachotokea kwa kuwakilisha anuani halisi katika kumbukumbu.
Nini maana, mantiki? >> [Mwanafunzi] Kazi ni kwenda kuwarudisha mahali tofauti.
Hasa.
Wakati foo anarudi na hits kwamba brace curly, mpango ni kwenda kuendelea
wasimrudie kuu, ni kwenda na kurudi kwa chochote anuani ni katika sanduku kwamba nyekundu.
>> Katika kesi ya usajili circumventing programu,
nini kama anuani hiyo kuwa alirejea ni kazi ambayo kwa kawaida anapata kuitwa
baada ve kulipwa kwa ajili ya programu na inputted usajili wako code?
Unaweza aina ya hila ya kompyuta katika si kwenda hapa lakini badala yake kwenda hapa.
Au kama wewe ni kweli wajanja, adui unaweza kweli aina katika saa keyboard, kwa mfano,
si neno halisi, wahusika si 20, lakini nadhani yeye au yeye kweli aina katika
baadhi ya wahusika kwamba kuwakilisha code.
Na si kwenda kuwa C kificho, ni kweli kwenda kuwa wahusika
kwamba kuwakilisha binary mashine code, sekunde 0 na 1s.
Lakini tuseme wao uko wajanja kutosha kufanya hivyo,
kwa namna fulani kuweka katika kitu GetString haraka ambayo kimsingi ni compiled kificho,
na mwisho 4 ka overwrite kwamba anuani kurudi.
Na nini anwani haina pembejeo kwamba kufanya?
Ni kweli katika maduka ya Mstatili hii nyekundu anuani ya Byte kwanza ya buffer.
Hivyo wewe kuwa kweli wajanja, na hii ni mengi ya kesi na makosa kwa watu mbaya huko nje,
lakini kama unaweza kufikiri ni jinsi gani kubwa buffer hii ni
vile kwamba mwisho ka chache katika pembejeo, kutoa kwa mpango
kutokea kwa kuwa sawa na anuani ya mwanzo wa buffer yako, unaweza kufanya hivyo.
Tukisema kawaida hujambo na \ 0, kwamba ni nini mwisho juu katika buffer.
Lakini kama tupo zaidi wajanja na sisi kujaza kwamba buffer na kile tutaweza generically kuwaita mashambulizi code -
AAA, mashambulizi, mashambulizi, mashambulizi - ambapo hii ni tu kitu ambacho hana kitu mbaya,
kile kinachotokea kama wewe ni kweli wajanja, unaweza kufanya kazi hii.
Katika sanduku nyekundu hapa ni mlolongo wa idadi - 80, C0, 35, 08.
Ona kwamba kuwa mechi ya idadi hiyo ni hapa juu.
Ni katika utaratibu reverse, lakini zaidi juu ya wakati kwamba baadhi nyingine.
Ona kwamba anuani hii kurudi imekuwa makusudi ilibadilika
kwa anuani sawa hapa, si anuani ya kuu.
Hivyo kama mtu mbaya ni super smart, yeye au yeye ni kwenda kwa pamoja katika kificho kwamba mashambulizi
kitu kama kufuta wote wa files mtumiaji au kunakili nywila
au kuunda akaunti ya mtumiaji kwamba naweza kisha kuingia kwenye - chochote wakati wote.
>> Na hii ni hatari zote na nguvu ya C.
Kwa sababu unaweza kupata kumbukumbu kupitia kuyatumia
na kwa hiyo unaweza kuandika kitu chochote unataka ndani ya kumbukumbu ya kompyuta,
unaweza kufanya kompyuta kufanya kitu chochote unataka
tu na baada yake kuruka karibu ndani ya nafasi yake mwenyewe kumbukumbu.
Na hivyo kwa siku hii ya mipango mingi na tovuti nyingi kwamba ni kuathirika
chemsha chini ya watu kuchukua faida ya hii.
Na hii inaweza kuonekana kama mashambulizi super kisasa, lakini haina daima kuanza kwa njia hiyo.
ukweli ni kwamba watu wabaya itakuwa kawaida kufanya ni,
kama ni mpango katika mstari amri au mpango GUI au tovuti,
wewe tu kuanza kutoa nonsense.
Wewe aina katika neno kubwa kweli kweli ndani ya shamba tafuta na hit Enter,
na wewe kusubiri kuona kama tovuti shambulio
au wewe kusubiri kuona kama mpango hudhihirisha baadhi ujumbe wa makosa
kwa sababu kama wewe kupata bahati kama mtu mbaya na wewe kutoa baadhi ya pembejeo mambo
kwamba shambulio mpango, kwamba maana ya programu Hawakutarajia tabia yako mbaya,
ambayo ina maana unaweza pengine kwa juhudi za kutosha, kesi ya kutosha na makosa,
kufikiri jinsi ya kupigana mashambulizi sahihi zaidi.
Hivyo kama sehemu kubwa ya usalama si tu kuepuka mashambulizi haya kabisa
lakini kuchunguza yao na kwa kweli kuangalia magogo
na kuona nini pembejeo mambo kuwa watu typed katika tovuti yako,
nini tafuta masharti kuwa watu typed katika tovuti yako
kwa matumaini ya kufurika baadhi buffer.
Na hii yote majipu chini misingi rahisi ya nini safu
na nini maana ya kutenga na kutumia kumbukumbu.
>> Kuhusiana na kwamba basi pia ni hii.
Hebu tu mtazamo ndani ya gari ngumu bado tena.
Unakumbuka kutoka wiki moja au mbili zilizopita kwamba wakati wewe Drag files yako kusaga bin au takataka unaweza,
nini kinatokea? >> [Mwanafunzi] Hakuna. >> Kabisa kitu, sawa?
Hatimaye kama wewe kukimbia chini juu ya nafasi disk,
Windows au Mac OS itaanza kufuta faili kwa ajili yenu.
Lakini kama wewe Drag kitu huko, kwamba si wote salama.
Zote roommate yako au rafiki au familia ina kufanya ni bonyeza mara mbili na, voilà,
kuna mafaili yote sketchy kwamba alijaribu kufuta.
Wengi wetu angalau kujua kwamba una haki bonyeza au Udhibiti click
na tupu takataka au kitu kama hicho.
Lakini hata hivyo haina kabisa kufanya hila
kwa sababu kile kinachotokea wakati una faili kwenye gari yako ngumu
kwamba inawakilisha baadhi ya hati Neno au baadhi JPEG, na hii inawakilisha gari yako ngumu,
na hebu sema hii Sliver hapa inawakilisha kwamba faili,
na ni linajumuisha rundo zima la sekunde 0 na 1s.
Nini kinatokea wakati wewe si tu Drag kwamba faili kwa takataka wanaweza au kusaga bin
lakini pia ni tupu? Aina ya kitu.
Ni si kitu kabisa sasa.
Sasa ni kitu tu kwa sababu kitu kidogo kinachotokea katika fomu ya meza hii.
Hivyo kuna baadhi ya aina ya database au meza ndani ya kumbukumbu ya kompyuta
kwamba kimsingi ina moja kwa safu files 'majina na moja kwa safu files' mahali,
ambapo hii inaweza kuwa mahali 123, tu idadi random.
Hivyo sisi tupate kuwa na kitu kama x.jpeg na mahali 123.
Kinachotokea baadae wakati kwa kweli tupu takataka yako?
Kwamba huenda mbali.
Lakini ni nini si kwenda mbali ni sekunde 0 na 1s.
>> Basi nini basi uhusiano na pset4?
Naam, na pset4, kwa sababu tu tumekuwa ajali erased kompakt flash kadi
kwamba alikuwa zote za picha hizi au tu kwa sababu ni kwa bahati mbaya akawa kupotoshwa
haina maana kwamba sekunde 0 na 1s si bado kuna.
Labda wachache wao ni kupotea kwa sababu kitu got kupotoshwa
kwa maana kwamba sekunde 0 baadhi akawa 1s na 1s akawa sekunde 0.
Mambo mabaya yanaweza kutokea kwa sababu ya programu Buggy au defective vifaa.
Lakini wengi wa bits wale, labda hata 100% ya nao, bado kuna.
Ni tu kwamba kompyuta au kamera hajui ambapo JPEG1 ilianza
na ambapo JPEG2 kuanza.
Lakini kama wewe, programu, kujua na kidogo ya savvy ambapo wale JPEGs ni
au nini wao kuangalia kama hivyo unaweza kuchambua JPEG sekunde 0 na 1s na kusema, JPEG,
unaweza kuandika mpango na kimsingi tu kwa wakati au kitanzi
kwamba recovers kila mmoja files wale.
Hivyo basi ni somo kuanza salama erasing files yako
kama Ningependa ili kuepuka hili kabisa. Ndiyo.
>> [Mwanafunzi] Jinsi kuja anasema juu ya kompyuta yako
kwamba una kumbukumbu zaidi kuliko alivyofanya kabla?
Kuwa na zaidi ya kumbukumbu ya wewe alifanya mbele - >> [mwanafunzi] Zaidi inapatikana kumbukumbu.
Oh. Nzuri swali.
Hivyo kwa nini basi baada ya kumwaga maji ya takataka haina kompyuta yako kukuambia
kwamba una zaidi bure nafasi kuliko wewe alifanya mbele?
Kwa kifupi, kwa sababu ni uongo.
Zaidi ya kitaalam, una nafasi zaidi kwa sababu sasa umesema
unaweza kuweka mambo mengine ambapo faili kwamba mara moja mara.
Lakini hiyo haina maana bits ni kwenda mbali,
na hiyo haina maana bits ni kuwa iliyopita kwa sekunde 0 wote, kwa mfano,
kwa kinga yako.
Hivyo kwa kulinganisha, kama wewe salama erase files au kimwili kuharibu kifaa,
kwamba kweli ni njia pekee wakati mwingine kuzunguka kwamba.
>> Hivyo kwa nini sisi kuondoka kwamba kumbuka nusu inatisha, na sisi kuona juu ya Jumatatu.
[Applause]
>> [CS50.TV]