[Powered by Google Translate] [Nedēļa 5] [David J. Malan - Hārvarda] [Tas ir CS50. - CS50.TV] Tas ir CS50, Nedēļa 5. Šodien un šonedēļ, mēs ieviest mazliet pasaules kriminālistikas saistībā ar problēmu Set 4. Šodien būs saīsināts lekcija jo tur īpašs notikums šeit vēlāk. Tāpēc mēs veikt palūrēt, un kaitināt gan studentiem un vecākiem līdzīgi šodien ar dažiem no lietām, kas ir pie horizonta. Starp tiem, kas pirmdien, jums būs vēl dažus klasesbiedrus. EDX, Hārvardas un MIT jaunu tiešsaistes iniciatīva OpenCourseWare un vairāk, sāk ar Hārvardas universitātes pirmdien, kas nozīmē nāk pirmdiena Jums būs, kā pagājušajā skaits, 86.000 papildu klasesbiedrus Kurš būs pēc kopā ar CS50 lekcijām un iedaļās un walkthroughs un problēmu komplekti. Un kā daļa no šī, jūs kļūtu par inaugurācijas klases CS50 un tagad CS50x. Kā daļu no šo tagad, saprotam, ka būs daži upsides kā arī. Lai iegūtu gatavs, par masveida studentu skaita, pietiek pateikt, ka, lai gan mums ir 108 TFS un CAS, tas nav gluži labākais studentu un skolotāju proporcija, tiklīdz mēs hit 80.000 studentiem. Mēs nebrauksim, lai šķirošanas tik daudz problēmu kopas manuāli, tāpēc ieviesa šonedēļ problēmu kopumu būs CS50 Pārbaudīt, kas būs komandrindas lietderība ietvaros iekārtas ka jūs saņemsiet, kad jūs atjaunināt to vēlāk šajā nedēļas nogalē. Jūs varēsiet vadīt komandu, check50, par savu PSET, un jūs saņemsiet tūlītēju atgriezenisko saiti par to, vai jūsu programma ir pareiza vai nepareiza saskaņā ar dažādiem dizaina specifikācijām, kas mēs esam. Vairāk par to problēmu kopumu specifikācijai. Ar CS50x klasesbiedru tiks izmantojot to kā labi. Problēma Set 4 ir visu par kriminālistikas, un tas PSET bija tiešām iedvesmoja daži reālās dzīves sīkumi kad, kad es biju absolvents skolu es internēti uz brīdi ar MIDDLESEX County District Attorney birojs dara kriminālistikas darbu ar savu svina kriminālistikas pētnieks. Ko tas sasniedza, jo es domāju, ka es teicu pāris nedēļas agrāk, ir masa Valsts policija vai citi nāks, tie varētu samazināties pie lietas, piemēram, cietos diskus un kompaktdiskus un disketes un, piemēram, un tad par kriminālistikas biroja mērķis bija noskaidrot vai tur bija vai nebija pierādījumu par sava veida. Tas bija Īpašā izmeklēšanas dienests, tāpēc tas bija balto apkaklīšu noziegumiem. Tas bija vairāk nepatīkamas veida noziegumiem, kaut iesaistot kādu digitālo mediju. Izrādās, ka nav, ka daudzi cilvēki rakstīt e-pastu, sakot, "es to darīja." Tik bieži, šie kriminālistikas meklējumi neieradās visu, ka daudz augļu, bet dažreiz cilvēki varētu rakstīt šādas vēstules. Tāpēc dažreiz, centieni tika atalgoti. Bet novest līdz šim tiesu PSET, mēs būsim ieviešot pset4 mazliet grafika. Jūs, iespējams, ņemt šīs lietas par pašsaprotamām - JPEG, GIF un kā - šajās dienās. Bet, ja jūs patiešām domājat par to, attēlu, līdzīgi Rob sejā, varētu tikt veidota kā secību punktiem vai pikseļi. Attiecībā uz aplaupīt sejas, tur ir visi krāsu veidu, un mēs sākām redzēt atsevišķus punktus, kas pazīstama arī kā pikseļi, kad mēs sākām, lai tuvinātu collas Bet, ja mēs vienkāršotu pasauli mazliet un tikai saka, ka tas šeit ir Rob melnā un baltā krāsā, pārstāvēt melnā un baltā, mēs varam tikai izmantot bināro. Un, ja mēs spēsim izmantot bināro, 1 vai 0, mēs varam paust šo pašu attēlu gada Robs ir smaidīgas sejas ar šo modeli bitiem. 11000011 pārstāv balts, balts, melns, melns, melns, melns, balts, balts. Un tāpēc tas nav milzīgs lēciens, tad sākt runāt par krāsainiem fotoattēliem, lietas, kas jūs redzēt uz Facebook vai veikt ar digitālo kameru. Bet, protams, ja runa ir par krāsām, jums ir nepieciešams vairāk bitu. Un diezgan izplatīta pasaulē fotogrāfijām ir izmantot ne 1-bitu krāsu, jo tas liecina, bet 24-bitu krāsu, kur jūs faktiski iegūt miljoniem krāsu. Tā kā gadījumā, ja mēs pietuvināto par Rob acīm, kas bija jebkurš skaits miljoniem dažādu krāsains iespējām. Tāpēc mēs ieviest to Problem Set 4, kā arī ar walkthrough, kas būs šodien, 03:30, nevis parasto 02:30 jo piektdienas lekciju šeit. Bet video būs online kā parasti rīt. Mēs arī jūs iepazīstināt ar citu faila formātu. Tas ir apzināti domāts, lai apskatīt iebiedēt sākumā, bet tas ir tikai daži dokumenti par C struct. Izrādās, ka Microsoft gadiem palīdzēja popularizēt šo formātu sauc bitkartes failu formātu, bmp, un tas bija super vienkārši, krāsains grafisko failu formātu kas tika izmantota jau ilgu laiku un reizēm vēl uz tapetes uz galddatoriem. Ja jūs domājat, atpakaļ uz Windows XP un pakalniem un zilas debesis, ka parasti bija bmp vai bitkartes attēlu. Bitkartes ir jautri mums, jo viņiem ir mazliet vairāk sarežģītību. Tas nav tik vienkārši, kā šo režģa 0s un 1s. Tā vietā, jums ir lietas, piemēram, galveni sākumā failu. Tātad, citiem vārdiem sakot, iekšpusē. Bmp faila ir viss ķekars 0s un 1s, bet tur ir dažas papildu 0s un 1s tur. Un izrādās, ka tas, ko mēs esam droši par pašsaprotamu gadus - failu formātus, piemēram,. doc vai. xls vai. MP3, MP4,. neatkarīgi failu formāti ka jūs esat iepazinušies ar - ko tas pat nozīmē būt faila formāts, jo beigās, dienā visi šie faili mēs tikko 0s un 1s. Un varbūt tiem 0s un 1s pārstāvēt ABC caur ASCII vai tamlīdzīgu bet beigās, dienā, tas joprojām tikai 0s un 1s. Tik cilvēki tikai reizēm nolemj izgudrot jaunu faila formātu kur viņi standartizēt kāda modeļus bitiem būs patiesībā nozīmē. Un šajā gadījumā šeit, ļaudīm, kas paredzēti bitkartes failu formātu teica, ka pašu pirmo baitu bitkartes failu, kas apzīmēts ar kompensēt 0 tur, tur būs daži cryptically nosaukts mainīgo sauc bfType, kas vienkārši stāv uz bitmap failu tipa, kāda veida bitkartes failu tas ir. Jūs varat secināt varbūt no otrās rindas, ka ofseta 2, baitu skaits 2 ir modelis 0s un 1s kas parāda, ko? Lielums kaut ko. Un tā iet no turienes. Tātad Problem Set 4, jums tiks gāja caur kādu no šīm lietām. Mēs ne galu galā rūpējas par visiem tiem. Bet pamanāt, ka tas sāk iegūt interesantu aptuveni 54 baitu: rgbtBlue, zaļo un sarkano. Ja esat kādreiz dzirdējuši akronīms RGB - sarkans, zaļš, zils - tas ir atsauce uz kas jo izrādās jūs varat krāsu visu varavīksnes krāsās ar kādu kombināciju sarkanā un zilā un zaļā. Un patiesībā, vecāki telpā varētu atgādināt dažus no senākajiem projektoru. Šajās dienās, jūs vienkārši redzēt vienu spilgtu gaismu, kas nāk no lēcas, bet atpakaļ dienā jums bija sarkanā objektīvu, zilo objektīvs, un zaļo lēcu, un kopā viņi ir vērsts uz ekrānu un veido krāsainu attēlu. Un diezgan bieži, vidējā skolas un vidusskolas būtu šos lēcas kādreiz tik nedaudz šķībi, tāpēc jums bija sava veida redzes dubultošanās vai trīskāršā attēlus. Bet tas bija ideja. Jums bija sarkanā un zaļā un zilā gaisma krāsošana attēlu. Un tas pats princips tiek izmantots datoros. Tātad starp uzdevumiem, tad par jums problēma Komplektā 4 būs dažas lietas. Viens no tiem ir faktiski mainītu attēlu, lai ar daudziem 0s un 1s, skaitlis, kura gabalus 0s un 1s pārstāv kāda konstrukcijā, piemēram, tas, un tad izdomāt, kā atkārtot pikseļi - Sarkanās, blūza, zaļumi - iekšā tā, ka tad, kad attēls izskatās sākotnēji, tas varētu izskatīties šādi, nevis pēc tam. Starp citiem uzdevumiem ir pārāk būs, ka jums tiks nodota tiesu medicīnas attēlu faktisko failu no digitālo kameru. Un par šo kameru, reiz bija viss ķekars fotogrāfijas. Problēma ir, mēs nejauši izdzēsti vai bija attēla bojāts kaut kā. Sliktas lietas notiek ar digitālo kameru. Un tā mēs ātri nokopēt visu 0s un 1s nost šīs kartes jums, saglabāts tos visus vienā lielā failā, un tad mēs nodot tos jums Problēma Set 4 lai jūs varētu uzrakstīt programmu C, ar kuru, lai atgūtu visus šos JPEG, ideāli. Un izrādās, ka JPEG, pat ja viņi nedaudz par sarežģītu faila formātā - viņi daudz sarežģītāka nekā šajā smaidošu seju šeit - izrādās, ka katrs JPEG sākas ar tiem pašiem modeļiem 0s un 1s. Tātad, izmantojot, visbeidzot, kamēr cilpa, vai cilpa vai līdzīgu, Jūs varat atkārtot pār visu 0s un 1s šajā kriminālistikas tēlu, un katru reizi, kad jūs redzēt īpašu modeli, kas ir definēta problēma noteiktā specifikāciju, Jūs varat pieņemt šeit ir, ar ļoti lielu varbūtību, sākums JPEG. Un tiklīdz jūs atradīsiet to pašu modeli kādu baitu skaits vai kilobaiti vai megabaiti vēlāk, jūs varat pieņemt šeit ir otrā JPEG, Foto Paņēmu aiz pirmā. Ļaujiet man apstāties lasot šo pirmo failu, sāciet rakstīt šo jaunu, un jūsu programma izeja pset4 būs tik daudz kā 50 JPEG. Un, ja tas nav 50 JPEG, jums ir mazliet cilpu. Ja Jums ir bezgalīgs skaits JPEG, Jums ir bezgalīgs cilpa. Lai arī būs diezgan izplatīta lieta. Tātad tas, kas ir pie horizonta. Viktorīna 0 aiz mums, saproti uz manu e-pastu, ka vienmēr pastāv ļaudīm, kuri abi ir laimīgi, neitrāls, un skumji ap viktorīnā 0 Time. Un, lūdzu, vērsties pie manis, galvas TF Zamyla, savu TF, jeb viens no SI ka jūs zināt, ja jūs vēlētos, lai apspriestu, kā lietas gāja. Tātad, lai ieskaidrot vecākiem šeit telpā, kāda ir CS50 bibliotēka? [Smiekli] Labs darbs. Kas CS50 bibliotēka? Yeah. >> [Students] Tas iepriekš rakstiski kopa koda [dzirdams] Labi, labi. Tas ir iepriekš rakstiski kopa koda ka mēs darbinieki rakstīja, mēs piedāvājam Jums, kas nodrošina kādu kopīgu funkcionalitāti, sīkumi, piemēram, atnesiet man virkni, get me int - visas funkcijas, kas ir uzskaitītas šeit. Sākot no šī brīža, mēs sākam, lai patiesi ņemtu šos mācību riteņiem off. Mēs esam gatavojas sākt atņemt virkni no jums, kas atgādināt bija tikai sinonīms kāda faktiskā datu tips? >> [Vairāki studenti] Char *. Char *. Vecākiem, kas, iespējams, bija [padara whooshing skaņa]. Tas ir labi. Char * mēs sāksim redzēt uz ekrāna visu vairāk, kā mēs noņemt virkne no mūsu leksikas, vismaz ja runa ir faktiski rakstot kodu. Tāpat, mēs pārtraukt izmantot kādu no šīm funkcijām tik daudz jo mūsu programmas ir gatavojas saņemt sarežģītākas. Nevis vienkārši uzrakstīt programmu, kas sēž tur ar ātru mirgo, gaida, lai lietotājs varētu rakstīt kaut ko, jūs saņemsiet savu ieguldījumu no citurienes. Piemēram, jūs saņemsiet tos no vairākiem bitiem uz vietējo cieto disku. Jūs tā vietā saņemt tos nākotnē no tīkla savienojumu, kādu mājas lapu kaut kur. Tāpēc pieņemsim Noņemiet šo slāni pirmo reizi un uzvilkt CS50 Appliance un šo failu sauc cs50.h, kas jūs esat # ieskaitot nedēļas, bet pieņemsim patiesībā redzēt, kas ir iekšā šo. No lietas materiāliem zilā top ir tikai viss ķekars komentārus: garantijas informācija un licencēšanu. Tas ir sava veida kopīgu paradigmas programmatūru jo programmatūras daudz šajās dienās ir tas, ko sauc atvērtā koda, kas nozīmē, ka kāds ir uzrakstījis kodu un dara to brīvi pieejamu ne tikai vadīt un izmantot, bet faktiski lasīt un mainīt un integrēt savu darbu. Tātad tas, ko jūs esat, izmantojot, atvērtā koda programmatūru, lai arī ļoti maza formā. Ja es ritiniet uz leju pagātnes komentāriem, lai gan, mēs sāksim redzēt vēl daži pazīstami lietas. Paziņojums no augšas šeit, ka cs50.h fails ietver visu ķekars header failus. Lielākā daļa no šiem, mēs neesam redzējuši pirms, bet viens ir pazīstams. Kurš no šiem mēs esam redzējuši, kaut arī īsi, līdz šim? >> [Students] Standarta bibliotēka. Jā, standarta bibliotēka. stdlib.h ir malloc. Kad mēs sākām runāt par dinamisku atmiņas sadalījumu, kas mēs būsim atpakaļ uz nākamo nedēļu, kā arī, mēs sākām ieskaitot šo failu. Izrādās, ka loģiska un patiesa un viltus nav faktiski nepastāv C per se ja jūs iekļaut šo failu šeit. Mēs esam par nedēļu tika ieskaitot stdbool.h lai jūs varētu izmantot jēdzienu bool, patiess vai nepatiess. Bez tam, jums būtu sava veida viltus to un izmantot int un tikai patvaļīgi pieņemt, ka 0 ir nepatiess un 1 ir taisnība. Ja mēs ritinātu uz leju tālāk, šeit ir mūsu definīcija virknes. Izrādās, jo mēs esam teica pirms, ka, ja šī zvaigzne ir nav īsti jautājumu. Jūs pat varat būt vietas visapkārt. Mums šajā semestrī ir veicināt to, jo tas būtu skaidrs, ka zvaigzne ir saistīts ar veidu, bet saproti, kā bieži, ja ne mazliet biežāk, ir likt to tur, bet funkcionāli tas pats. Bet tagad, ja mēs lasām, kas tālāk, pieņemsim to apskatīt GetInt jo mēs izmantojām, ka varbūt pirmo pirms kaut kas cits šajā pusgadā. Šeit ir GetInt. Tas ir tas, ko? >> [Students] prototips. >> Tas ir tikai prototips. Bieži vien mēs esam prototipus pie mūsu galotnēm. C failus, bet jūs varat arī nodot prototipus header failus,. h failus, piemēram, šo vienu šeit lai tad, kad jūs uzrakstīt dažas funkcijas, ka jūs vēlaties citiem cilvēkiem, lai varētu izmantot, kas ir tieši gadījumā ar CS50 bibliotēku, Jūs ne tikai īstenot savas funkcijas kaut ko līdzīgu cs50.c, Jūs arī nodot prototipu nav augšpusē šo failu, bet augšpusē galvenes failu. Tad ka galvene fails ir kādi draugi un kolēģi arī ar # ietvert savā kodu. Tātad visu šo laiku, jūs esat bijis, ieskaitot visus šo prototipu, efektīvi augšpusē jūsu failu, bet ceļā uz to # ietvert mehānisms, kas būtībā kopijas un pastas šo failu savu. Šeit ir daži diezgan detalizētu dokumentāciju. Mēs esam diezgan daudz par pašsaprotamu, ka GetInt izpaužas int, bet izrādās ir daži stūra gadījumi. Ko darīt, ja lietotājs veidiem vairākās kas ir pārāk liels, quintillion, kas vienkārši nevar ielikt no int? Kāda ir paredzamā rīcība? Ideālā gadījumā tas ir prognozējama. Tātad šajā gadījumā, ja jūs faktiski lasīt smalka drukāt, jūs faktiski redzēt, ka, ja līnija nav iespējams izlasīt, šī atgriešanās INT_MAX. Mēs nekad par to runāja, bet gan balstoties uz tās kapitalizāciju, kas tas ir iespējams? [Students] nemainīgs. >> Tas ir pastāvīgs. Tas ir sava īpaša nemainīga, ka ir iespējams, deklarēta vienā no šīm header failus tas ir atkarīgs no augstāka failā, un INT_MAX ir iespējams kaut kā aptuveni 2 miljardiem Ideja ir, ka tāpēc mums ir kaut kā neizsaka ka kaut kas nogāja greizi, mēs, jā, ir 4000000000 skaitļus mūsu rīcībā: -2 miljardus līdz 2 miljardiem, sniegt vai pieņemt. Nu, kāda ir izplatīta programmēšanas ir jums nozagt tikai vienu no šiem numuriem, varbūt 0, varbūt 2 miljardus, varbūt -2000000000, lai jūs pavadīt kādu no saviem iespējamo vērtību, lai jūs varētu izdarīt uz pasauli ka, ja kaut kas noiet greizi, es atgriezīšos šo super liels vērtību. Bet jūs nevēlaties lietotājs rakstīt kaut noslēpumains kā 234 ..., tiešām liels skaits. Jūs vispārināt to, nevis kā nemainīga. Tik tiešām, ja jūs to anālo pēdējo nedēļu, jebkurā laikā jūs sauc GetInt, Jums vajadzētu būt pārbaudot ja nosacījums darīja lietošanas veidu, kas INT_MAX, vai, precīzāk, to darīja GetInt atgriešanās INT_MAX, jo, ja tā notiktu, kas faktiski nozīmē, ka tie nav rakstīt to. Kaut kas nogāja greizi šajā lietā. Tātad tas ir tas, ko parasti sauc par pastiprinātas vērtība, kas nozīmē tikai to īpašu. Pieņemsim tagad pārvērsties. C failu. C fails pastāvējis ierīces kādu laiku. Un patiesībā, ierīce ir tas iepriekš apkopoti par jums vērā, ka lieta, ko mēs sauc objekta kodu, bet tas vienkārši nav svarīgi, lai jūs, ja tas ir tāpēc, ka sistēma zina Šajā gadījumā, ja tas ir: ierīce. Pieņemsim ritināt uz leju tagad, lai GetInt un redzēt, kā GetInt ir strādājusi visu šo laiku. Šeit mums ir līdzīgas komentārus pirms tam. Ļaujiet man tuvinātu tikai koda daļu. Un ko mēs esam par GetInt ir šādi. Tas aizņem nav ievadi. Tā atgriež int, kamēr (patiess), tāpēc mums ir apzinātu bezgalīgu cilpu, bet domājams mēs izkļūt no šīs kaut vai atgriezties no šī. Let 's redzēt, kā tas darbojas. Mēs šķiet, izmantojot GetString šajā pirmajā rindā iekšpusē cilpa, 166. Tagad tas ir laba prakse, jo kādos apstākļos varētu GetString atgriezties īpašais atslēgvārds NULL? >> [Students] Ja kaut kas noiet greizi. Ja kaut kas noiet greizi. Un ko varētu iet nepareizi, ja jūs zvanīt kaut kas līdzīgs GetString? Yeah. >> [Students] malloc neizdodas, lai dotu tai Ints. Yeah. Varbūt malloc neizdodas. Kaut kur zem motora pārsega, GetString zvana malloc, kas piešķir atmiņu, kas ļauj datoru veikalā visas rakstzīmes ka lietotājs uz klaviatūras. Un pieņemsim, lietotājs bija visai daudz brīva laika un drukāti vairāk, piemēram, nekā 2 miljardiem rakstzīmes, vairāk zīmēm nekā datora pat ir RAM. GetString ir jāspēj apliecina, ka ar jums. Pat ja tas ir super, super retāk stūra gadījumā, tas ir kaut jāspēj rīkoties ar šo, un tā GetString, ja mēs devāmies atpakaļ un lasīt tās dokumentāciju, tā faktiski atgriezties null. Tāpēc tagad, ja GetString neizdodas, atgriežoties null, GetInt gatavojas neveiksmei, atdodot INT_MAX tāpat kā Sentinel. Šie ir tikai cilvēka konvencijas. Vienīgais veids, kā jūs varētu zināt, tas ir gadījumā, ir rīdinga dokumentāciju. Pieņemsim ritiniet uz leju, kur int ir faktiski gotten. Ja es ritiniet uz leju mazliet tālāk, 170 līnijas, mums ir komentāru virs šīm līnijām. Mēs paziņojam 172 int, N un char, C, un tad šī jaunā funkcija, ko daži no jums ir stumbled pāri pirms, sscanf. Tas nozīmē stīgu scanf. Citiem vārdiem sakot, man stīgu un es skenēt to informācijas daļas interesi. Ko tas nozīmē? Pieņemsim, ka es rakstīt, burtiski, 123 pie klaviatūras un tad hit Enter. Kas ir datu tips no 123 kad atgriezās ar GetString? >> [Students] String. Tas acīmredzot virkne, labi? Man virkni. Tātad 123 ir patiesi, citēju-likt pēdiņas beigās, 123 ar \ 0 beigās tā. Tas nav int. Tas nav skaitlis. Tas izskatās numuru, bet tas nav reāli. Tātad, ko tas GetInt jādara? Tā ir skenēšanas, ka virkne no kreisās uz labo - 123 \ 0 - un kaut konvertēt uz faktisko skaitlim. Jūs varētu izdomāt, kā to izdarīt. Ja jūs domājat, atpakaļ uz pset2, jūs, iespējams, ieguvuši nedaudz apmierināti ar Cēzara vai Vigenere, lai jūs varētu atkārtot pār virkni, jūs varat pārvērst chars uz Ints. Bet heck, tas ir visai daudz darba. Kāpēc ne zvanu funkciju, piemēram sscanf ka tas, ka jums? Tātad sscanf sagaida arguments - šajā gadījumā sauc līnija, kas ir virkne. Jūs tad norādiet pēdiņās, ļoti līdzīgi printf, ko jūs gaidāt, lai redzētu šajā virknē. Un ko es saku šeit ir gaidāms kāds decimālskaitlis un varbūt raksturu. Un mēs redzēsim, kāpēc tas tā ir tikai brīdi. Un izrādās, ka šis apzīmējums ir tagad atgādina stuff mēs sākām runāt par nedaudz vairāk nekā pirms nedēļas. Kas ir & N un & c darot mums šeit? >> [Students] n adrese un c adrese. Yeah. Tas dod man adresi n un adrese c. Kāpēc ir tik svarīga? Jūs zināt, ka ar funkciju C, jūs vienmēr varat atgriezties vērtību vai nav vērtības. Jūs varat atgriezties int, virkne, pludiņa, char, neatkarīgi, vai jūs varat atgriezties tukšumu, bet jūs varat atgriezties tikai viena lieta maksimāli. Bet šeit mēs vēlamies sscanf atgriezties man varbūt int, decimālskaitlis, un arī palija, un es paskaidrošu, kāpēc CHAR brīdi. Jūs faktiski vēlaties sscanf atgriezties divas lietas, bet tas vienkārši nav iespējams C. Jūs varat strādāt ap ka, pieņemot divās adresēs jo tiklīdz jūs nodot funkciju divām adresēm, Ko var, ka funkciju darīt ar viņiem? >> [Students] Rakstiet uz šīm adresēm. Tā var rakstīt uz šīm adresēm. Jūs varat izmantot zvaigzne darbību un iet tur, katrai no šīm adresēm. Tas ir sava veida šīs muguras durvju mehānisms, bet ļoti bieži mainās vērtības mainīgo vairāk nekā tikai vienā vietā - šajā gadījumā divi. Tagad paziņojums es esmu pārbaudot 1 == un pēc tam atgriežas n ja tas patiesībā novērtē taisnība. Tātad, kas notiek? Tehniski visi mēs patiešām vēlamies, lai notiktu, GetInt tas ir. Mēs vēlamies, lai parsēt, tā sakot, mēs vēlamies, lai izlasītu string - citēju-likt pēdiņas beigās 123 - un ja izskatās, ka tur ir vairāki tur, ko mēs esam spēcīgi sscanf darīt ir nodot šo numuru - 123 - šajā mainīgo n par mani. Tātad, kāpēc tad es tiešām ir tas, kā arī? Kas ir par sscanf loma sakot, jūs varētu arī saņemt raksturs šeit? [Dzirdams studentu reaģēšanas] >> komatu faktiski varētu darboties. Pieņemsim turēt kas domāja par brīdi. Kas vēl? [Students] Tā varētu būt nulle. >> Laba doma. Tas varētu būt null raksturs. Tas tiešām nav šajā gadījumā. Yeah. >> [Students] ASCII. ASCII. Vai ļaut man vispārināt vēl vairāk. % C tur ir tikai kļūdu labošanas. Mēs negribam, lai būtu varonis pēc skaita, bet ko tas man ļauj to darīt, ir šādi. Izrādās, ka sscanf papildus uzglabāšanai vērtības n un c šajā piemērā šeit, ko tas arī ir tas atgriež skaitu mainīgo tas likts vērtības iekšā Tātad, ja jūs tikai rakstīt 123, tad tikai% d gatavojas, lai atbilstu, un tikai n izpaužas uzglabā ar vērtību, piemēram, 123, un nekas izpaužas nodot c. C paliek atkritumu vērtība, tā teikt - atkritumu, jo tas nekad nav bijis inicializēts ar kādu vērtību. Tātad šajā gadījumā, sscanf atgriež 1, jo es apdzīvots 1 no tiem norādes, tādā gadījumā lieliski, man ir int tāpēc es atbrīvotu līniju, lai atbrīvotu atmiņu ka GetString faktiski piešķirti, un tad es atgriezties n, cits, ja jums kādreiz prātoju, kur tas Atkārtot paziņojums nāk no, tas nāk tieši no šīs vietas. Tātad, ja, tieši pretēji, es rakstīt 123foo - tikai daži izlases secību teksta - sscanf gatavojas redzēt numurs, numurs, numurs, F, un tas gatavojas nodot 123 n; tas gatavojas nodot F C un pēc tam atgriezties 2. Tātad mums ir, tikai izmantojot pamata definīciju sscanf uzvedību, ļoti vienkāršs veids - labi, komplekss pēc pirmā acu uzmetiena, bet beigās, dienā diezgan vienkāršs mehānisms - gada sakot tur int un, ja tā, ka vienīgā lieta, ka es atklāju? Un atstarpes šeit ir apzināta. Ja jūs lasīt dokumentāciju sscanf, tā stāsta, ka, ja jūs iekļaut kādu tukšumiem sākumā vai beigās, sscanf arī ļaus lietotājam, lai kāda iemesla dēļ, hit kosmosa bar 123 un ka būs likumīgs. Jums nav bļaut lietotājam tikai tāpēc, ka tie skāra starpdevējs sākumā vai beigās, kas ir tikai nedaudz vairāk lietotājam draudzīgu. Jebkādi jautājumi, tad par GetInt? Yeah. >> [Students] Ko darīt, ja jūs vienkārši ievietot char? Labs jautājums. Ko darīt, ja jūs vienkārši ierakstījāt char piemēram F un hit Enter, nekad rakstīt 123? Ko jūs domājat par šo līniju kodu uzvedība tad ir? [Dzirdams studentu reaģēšanas] Yeah, tāpēc sscanf varētu aptvert, ka pārāk, jo šādā gadījumā, tas nav gatavojas aizpildīt n vai c. Tas notiek, lai tā vietā atgriezties 0, tādā gadījumā es esmu arī iepatikusies, ka scenārijs jo paredzamā vērtība es gribu ir 1. Es tikai gribu vienu un tikai viena lieta, kas jāaizpilda. Labs jautājums. Citi? Labi. Pieņemsim nav iet caur visu, kas šeit funkcijām, bet viens, kas, šķiet, ir varbūt par atlikušo interese ir GetString jo izrādās, ka GetFloat, GetInt, GetDouble, GetLongLong visi punt daudz to funkcionalitāti GetString. Tātad, pieņemsim to apskatīt, kā viņš tiek īstenota šeit. Tas viens izskatās mazliet sarežģīti, bet tas izmanto tos pašus pamatus ka mēs sākām runāt par pagājušajā nedēļā. Jo GetString, kas aizņem ne argumentu kā vienu tukšumu šeit un tas atgriež virkni, es acīmredzot esmu deklarējot virkni sauc buferis. Man nav īsti zināt, ko tas notiek, lai izmantot vēl, bet mēs redzēsim. Izskatās jauda ir par 0 noklusējuma. Ne gluži pārliecināts, kur tas notiek, nav pārliecināti, ko n gatavojas izmantot vēl, bet tagad tas kļūst nedaudz vairāk interesants. 243 līniju, mēs paziņojam int, c. Tas ir sava veida stulba detaļām. Char ir 8 biti, un 8 biti var uzglabāt cik atšķirīgas vērtības? >> [Students] 256. >> 256. Problēma ir, ja jūs vēlaties, lai ir 256 dažādas ASCII rakstzīmes, kas ir ja jūs domājat atpakaļ - un tas nav kaut iegaumēt. Bet, ja jūs domājat atpakaļ uz šo lielo ASCII topā mums bija nedēļas atpakaļ, tur bija šajā gadījumā 128 vai 256 ASCII rakstzīmes. Mēs izmantojām visus modeļus 0s un 1s augšu. Tas ir problēma, ja jūs vēlaties, lai varētu konstatēt kļūdas jo, ja jūs esat jau izmanto 256 vērtības jūsu rakstzīmes, Jums nav īsti plānot uz priekšu, jo tagad jums nav veids, kā pateikt, tas nav legit raksturs, tas ir daži kļūdaina ziņa. Tātad, ko pasaule dara ir tie izmanto nākamo lielāko vērtību, kaut kas līdzīgs int, tāpēc, ka jums ir traks bitu skaitu, 32, lai 4000000000 iespējamām vērtībām lai jūs varat vienkārši galu galā, izmantojot būtībā 257 tiem, 1 no kuriem ir kāda īpaša nozīme kā kļūda. Tātad, pieņemsim redzēt, kā tas darbojas. 246 rindā, man ir šī lielā kamēr cilpa, kas zvana fgetc, f nozīmē failu, tāpēc getc, un tad stdin. Izrādās tas ir tikai precīzāk veids kā pateikt lasīt ievadi no klaviatūras. Standarta patēriņš ir klaviatūra, standarta produkcija ir ekrāns, un standarta kļūda, ko mēs redzam pset4, nozīmē, ka ekrāna bet īpašu daļu no ekrāna, lai tas nav nesaista ar faktisko produkciju kas jums paredzēta drukāt. Bet vairāk par to nākotnē. Tik fgetc nozīmē tikai izlasīt vienu rakstzīmi no klaviatūras un uzglabāt to, kur? Uzglabāt to c. Un pēc tam pārbaudiet - tāpēc es esmu tikai izmantojot dažus Būla saikļi šeit - pārbaudiet, vai tas nav vienāds - \ n, tāpēc lietotājs ir skārusi Enter, mēs vēlamies apstāties šajā punktā, beigām cilpu - un mēs arī vēlamies, lai pārbaudītu īpašo pastāvīgu EOF, kas, ja jūs zināt vai uzminēt, ko tas kandidēt? >> [Students] faila beigas. >> Faila beigas. Tas ir sava veida muļķīgi, jo, ja es esmu mašīnrakstīšanu pie klaviatūras, tur tiešām nav failu iesaistīts šajā, bet tas ir tikai sava veida vispārējs termins, ko izmanto, lai apzīmētu ka nekas cits nāk no cilvēka pirkstiem. EOF - faila beigas. Kā malā, ja jūs esat kādreiz hit Control D pie klaviatūras, nevis, ka jums būtu vēl - Jūs esat hit vadība C - Kontroles D sūta šis īpašais konstante sauc EOF. Tāpēc tagad mums vienkārši ir dažas dinamisku atmiņas sadalījumu. Tātad, ja (n + 1> tilpums). Tagad es jums paskaidrot n. N ir tikai cik daudz baitu pašlaik buferī, virkne, kas jūs pašlaik veidojot no lietotāja. Ja jums ir vairāk rakstzīmes jūsu bufera nekā jums ir spējas buferi, intuitīvi kas mums jādara, tad ir piešķirt vairāk jaudas. Tāpēc es esmu gatavojas iziet vairāk nekā daži no aritmētiskā šeit un koncentrēties tikai uz šo funkciju šeit. Jūs zināt, ko malloc ir vai vismaz parasti pazīstams. Veikt uzminēt ko realloc dara. >> [Students] Pievieno atmiņu. Tas nav gluži pievienojot atmiņas. Tas pārvieto atmiņu šādi. Ja tur vēl iespējams beigās virknes, lai dotu jums vairāk, ka atmiņas nekā tas sākotnēji dod jums, tad jūs saņemsiet, ka papildu atmiņu. Tātad jūs varat vienkārši turēt liekot virknes varoņi atpakaļ atpakaļ atpakaļ atpakaļ. Bet, ja tas nav gadījums, jo jūs gaidīja pārāk ilgi un kaut izlases ieguva plopped atmiņā tur bet tur ir papildu atmiņas šeit lejā, tas ir labi. Realloc gatavojas darīt visu smago celšanas jums, pārvietot string esat lasījuši līdz šim no šīs vietas, nodot to uz leju tur, un tad jums vēl nedaudz skrejceļu tajā brīdī. Tātad ar viļņa rokas, ļaujiet man teikt, ka tas, ko GetString dara ir tas sāk ar mazu buferi, varbūt viena varoņa, un ja lietotājs veidiem divām zīmēm, GetString beidzas līdz zvanot realloc un saka viena rakstzīme nebija pietiekami, man divas zīmes. Tad, ja jums izlasīt loģikas cilpas, tas gatavojas teikt lietotājs drukāti 3 rakstzīmes, dāvā man tagad nav 2, bet 4 rakstzīmes, tad dod man 8, tad dod man 16 un 32. Fakts, ka es esmu Apjoma divkāršošana katru reizi nozīmē, ka bufera nav gatavojas augt lēnām, tas notiek, lai augt super ātri. Un ko varētu būt priekšrocība, ka? Kāpēc man divkāršojot bufera pat ja lietotājs var vienkārši vajag vienu papildus rakstzīmi no klaviatūras? [Dzirdams studentu reaģēšanas] >> Kas tas ir? >> [Students] Jums nav augt to tik bieži. Tieši tā. Jums nav augt to tik bieži. Un tas ir tikai sava veida jūs hedžēšanas savas likmes šeit, Ideja ir, ka jūs nevēlaties, lai izsauktu realloc daudz, jo tā mēdz būt lēns. Jebkurā laikā jūs lūgt operētājsistēmu atmiņu, kā jūs ātri redzēt, kas nākotnē problēma kopumu, tai ir tendence ņemt kādu laiku. Tādējādi samazinot šo laiku, pat ja jūs izšķērdēt dažas vietas, mēdz būt laba lieta. Bet, ja mēs lasām cauri pēdējo daļu GetString šeit - un atkal izprast katru rindiņu šeit nav tik svarīgi šodien - pamanāt, ka tas beidzot aicina malloc atkārtoti un tā piešķir tieši tik baitos, jo tai ir par virkni un tad met prom zvanot bez maksas no pārmērīgi lielu buferi ja tas tiešām got dubultojās pārāk daudz reižu. Tātad īsumā, tas ir kā GetString ir strādājusi visu šo laiku. Visiem tas ir lasīt vienu rakstzīmi laikā atkal un atkal un atkal, un katru reizi, ir vajadzīgas dažas papildu atmiņu, tā lūdz operētājsistēmu par to zvanot realloc. Kādi jautājumi? Labi. Uzbrukums. Tagad, kad mēs saprotam norādes vai vismaz arvien iepazinušies ar norādes, pieņemsim apsvērt, kā visa pasaule sāk sabrukt ja jums nav gluži aizstāvēt pret sacīkstes lietotājiem, cilvēki, kas cenšas kapāt jūsu sistēmā, cilvēki, kas cenšas nozagt jūsu programmatūru, apejot kādu reģistrācijas kodu ka viņi citādi varētu būt rakstīt collas Veikt apskatīt šo piemēru šeit, kas ir tikai C kodu, kas ir funkcija galvenais apakšā kas izsauc funkciju foo. Un ko tas iet uz foo? [Students] viena arguments. >> [Malan] viena arguments. Tātad argv [1], kas nozīmē pirmais vārds, kas lietotājs drukāti pie komandrindas Pēc a.out vai kāds programmu sauc. Tātad foo augšā veic, char *. Bet char * ir tieši tas, ko? >> [Students] virkne. [Malan] stīgu, tāpēc tur nekas jauns šeit. Ka virkne ir patvaļīgi tiek saukta bārs. Šajā rindā šeit, char c [12]; jo veida daļēji tehniskās angļu, kas ir šī līnija dara? [Students] masīvs - >> Array? >> [Students] Blondīne. >> Blondīne. Dodiet man masīvu 12 rakstzīmes. Lai mēs varētu nosaukt šo buferi. Tas ir tehniski sauc c, bet programmēšanas buferis tikai nozīmē ķekars vietas kas jums var likt dažus stuff iekšā Tad visbeidzot, memcpy mēs esam nav izmantota, bet jūs varat droši uzminēt, ko tā dara. Tā kopijas atmiņu. Ko tas dod? Tas acīmredzot kopē bārs, tās ieejas, uz C bet tikai līdz garumu joslas. Bet tur ir kļūda šeit. >> [Students] Jums nepieciešams sizeof raksturs. >> Labi. Tehniski mēs patiešām vajadzētu darīt, strlen (bar) * sizeof (char)). Tas ir pareizi. Bet sliktākajā gadījumā šeit, pieņemsim, ka That - Labi. Tad tur ir divi kļūdas. Tātad sizeof (char)); Veidosim šo mazliet plašāks. Tāpēc tagad tur ir vēl kļūda, kas ir tas, ko? >> [Dzirdams studentu reaģēšanas] Pārbaudiet par ko? >> [Students] Pārbaudīt NULL. Mums parasti būtu pārbaudot NULL jo sliktas lietas notiek ja jūsu rādītājs ir NULL, jo jūs varētu galu galā iet tur, un jums nav kādreiz ir iet uz NULL ar dereferencing to ar zvaigzni operatoru. Tātad tas ir labs. Un ko vēl mēs darām? Loģiski, tur plaisāt arī šeit. [Students] Pārbaudiet argc ir> = līdz 2. Lai pārbaudītu, vai argc ir> = 2. Labi, tā tur ir trīs kļūdas šajā programmā šeit. Mēs tagad pārbaudītu, ja lietotājs faktiski drukāti jebko ARGV [1]. Labi. Tātad, kāda ir trešā kļūda? Yeah. >> [Students] C var nebūt pietiekami lielas. Labi. Mēs pārbauda vienu scenāriju. Mēs netieši jāpārbauda nav kopēt vairāk atmiņas, nekā tas būtu ilgāks par bāru. Tātad, ja virkne lietotājs drukāti ir 10 rakstzīmes garš, tas ir saprotams tikai kopēt 10 rakstzīmes. Un tas ir labi. Bet ko tad, ja lietotājs drukāti vārdu uzvednē kā 20 rakstzīmju vārdu? Tas ir saprotams kopiju 20 rakstzīmes no bāra uz ko? C, citādi zināma kā mūsu buferis, kas nozīmē, ka jūs tikko rakstīja datus līdz 8 baitu vietām, kas jums nepieder, un jums nepieder viņiem tādā nozīmē, ka jūs nekad piešķirtā tos. Tātad tas ir tas, ko parasti sauc par bufera pārpildes uzbrukumu vai bufera pārtēriņš uzbrukumu. Un tas ir uzbrukums, kas nozīmē, ka, ja lietotājs vai programma, kas zvana savu funkciju to dara ļaunprātīgi, kas patiesībā notiek tālāk faktiski varēja būt diezgan slikti. Tāpēc pieņemsim to apskatīt šajā attēlā šeit. Šis attēls atspoguļo jūsu kaudze atmiņas. Atgādina, ka katru reizi, kad jūs zvanu funkciju jums šo maz rāmi kaudze un tad vēl un tad vēl un vēl. Un līdz šim, mēs esam tikai veida iegūtā šiem, kā taisnstūru nu uz klāja vai uz ekrāna šeit. Bet, ja mēs tuvinātu par vienu no šiem taisnstūriem, kad jūs izsauktu funkciju foo, izrādās, ka tur ir vairāk uz skursteņa iekšpusē ka rāmis šajā taisnstūrī nekā tikai x un y un a un b, tāpat mēs to runājam swap. Izrādās, ka tur ir daži zemāka līmeņa detaļas, starp tiem atpakaļadresi. Tātad izrādās, kad galvenais aicina foo, galvenais ir, lai informētu foo Kādi ir galvenie adrese ir datora atmiņā jo citādi, tiklīdz foo tiek darīts izpildes, kā šajā gadījumā šeit, kad jūs sasniedzat šo slēgto cirtaini lencēm beigās foo, kā heck tas foo zina, kur programmas kontroli vajadzēja doties? Izrādās, ka atbilde uz šo jautājumu ir šajā sarkanā taisnstūrī šeit. Tas ir rādītājs, un tas ir līdz ar datoru, lai īslaicīgi par tā saukto skursteņus no galvenā adresi, lai, tiklīdz foo tiek darīts izpildes, dators zina, kur un kādi līnija galvenais, lai dotos atpakaļ uz. Saglabāts Rāmis rādītājs attiecas līdzīgi šim. Char * bar šeit pārstāv, ko? Tagad šis zilais segments šeit ir Foo ir rāmis. Kas ir bārs? Josla ir tikai arguments foo funkciju. Tāpēc tagad mēs esam atpakaļ pie sava veida pazīstamo attēla. Tur ir vairāk stuff un vairāk traucējošos uz ekrāna, bet tas gaiši zils segments tieši ir tas, ko mēs esam balstoties uz tāfeles kaut ko līdzīgu swap. Tas ir rāmis foo. Un vienīgais, kas to jau tagad ir bārs, kas ir šis parametrs. Bet kas vēl būtu kaudze saskaņā ar šo kodu šeit? [Students] CHAR c [12]. >> [Malan] CHAR c [12]. Mums vajadzētu arī redzēt 12 no atmiņas kvadrātu piešķirtos mainīgo sauc c, un tiešām mums ir kas uz ekrāna. Ļoti top tur ir c [0], un tad autors šajā diagrammā nav apnikt zīmēšanas visi laukumi, bet tur tiešām ir 12 tur jo, ja paskatās labajā apakšējā, c [11], ja jūs rēķināties no 0 ir 12 šāda baitu. Bet šeit ir problēma. Kurā virzienā ir c aug? Kārtot augšas uz leju, ja tā sākas augšā un aug uz leju. Tas nav izskatās mēs atstājām sev daudz skrejceļa šeit vispār. Mēs esam veida krāsotas sevi stūrī, un ka c [11], ir tiesības uz augšu pret bāru, kas ir tiesības uz augšu pret Saglabātās Frame rādītājs, kas ir tiesības uz augšu pret atpakaļadresi. Tur ir ne vairāk istabu. Tātad, kāda ir saistība tad, ja jūs skrūvējamu augšu un jūs mēģināt lasījums 20 baiti uz 12 baitu buferī? Kur ir šie 8 papildu baiti gatavojas doties? >> [Students] Inside - Iekšā viss pārējais, no kuriem daži ir super svarīgi. Un pats svarīgākais, iespējams, ir sarkans lodziņš tur, atpakaļadresi, jo pieņemsim, ka jūs vai nu nejauši vai adversarially pārrakstīt šos 4 baiti, ka rādītājs adrese, ne tikai ar atkritumu, bet ar vairākiem kas notiek, lai pārstāvētu faktisko adresi atmiņā. Kas Ietekme, loģiski? >> [Students] funkcija gatavojas atgriezties uz citu vietu. Tieši tā. Kad foo atgriežas un hits, ka cirtaini lencēm, programma ir gatavojas turpināt neatgriezties galveno, tas notiek, lai atgrieztos kāds adrese ir šajā sarkanajā lodziņā. Attiecībā uz apiet programmatūras reģistrācijas, Ko darīt, ja adrese, kas ir atdoti to ir funkcija, kas parasti izpaužas sauc Pēc tam, kad esat samaksājis par programmatūru un ievadījis savu reģistrācijas kodu? Jūs varat kārtot triks datora vērā nevis iet šeit, bet gan iet uz augšu šeit. Vai, ja jūs patiešām gudrs, pretinieks var reāli ierakstīt pie klaviatūras, piemēram, nav faktisko vārdu, nevis 20 rakstzīmes, bet pieņemsim, ka viņš vai viņa tiešām veidi daži simboli, kas pārstāv kodu. Un tas nav būs C kodu, tas faktiski būs rakstzīmes kas pārstāv bināro mašīnu kodu, 0s un 1s. Bet pieņemsim, ka viņi pietiekami gudri, lai to izdarītu, kaut kā ielīmēt GetString ātri kaut kas būtībā apkopo kodu, un pēdējie 4 baiti pārrakstīt šo atpakaļadresi. Un ko adrešu tas, ka ieejas darīt? Tas faktiski uzglabā šajā sarkanā taisnstūrī adrese pirmās baitu buferī. Tātad jums ir jābūt ļoti gudrs, un tas ir daudz izmēģinājumu un kļūdu uz sliktiem cilvēkiem, kas tur, bet, ja jūs varat izdomāt, cik liels šis buferis piemēram, ka pēdējo baitu ieejas jūs nodrošināt ar programmu gadās būt līdzvērtīgs uz adresi sākumā jūsu bufera, jūs varat izdarīt. Ja mēs teiksim normāli sveiki un \ 0, ka tas, ko nonāk buferī. Bet, ja mēs vairāk gudrs un mums aizpildīt šo buferi ar ko mēs vispārīgi saucam uzbrukuma kods - AAA, uzbrukums, uzbrukums, uzbrukums - ja tas ir tikai kaut kas dara kaut ko sliktu, kas notiek, ja jūs patiešām gudrs, jūs varētu darīt. Ar sarkano kastē šeit ir skaitļu secība - 80, C0, 35, 08. Ievērojiet, ka saskan ar skaitu, kas ir šeit. Tas ir apgrieztā secībā, bet vairāk par šo citā laikā. Ievērojiet, ka šī atgriešanās adrese ir apzināti mainīts vienāda adresi šeit, nevis adrese galvenais. Tātad, ja slikts puisis ir super gudrs, viņš vai viņa gatavojas iekļaut šajā uzbrukuma kods kaut kā izdzēst visus lietotāja failus vai kopēt paroles vai izveidotu lietotāja kontu, es pēc tam var pieteikties - neko. Un tas ir gan briesmas un C. jauda Jo jums ir piekļuve atmiņas pa šautru un jūs varat tāpēc rakstīt kaut ko vēlaties uz datora atmiņā, Jūs varat veikt dators darīt kaut ko vēlaties vienkārši kam tas lēkā savā atmiņu. Un tā līdz pat šai dienai tik daudz programmas un tik daudz portālu, kas ir apdraudēti vāra uz leju, lai cilvēki, kas izmanto šo. Un tas varētu šķist super sarežģītu uzbrukumu, taču tas ne vienmēr sākas ka veidā. Realitāte ir tāda, ka to, ko slikti cilvēki parasti darīt, ir, vai tas ir pie komandrindas programma vai GUI programmu vai mājas lapā, jūs vienkārši sākt sniegt muļķības. Rakstot tiešām liels vārdu, meklēšanas laukā un nospiediet Enter, un jūs gaidīt, lai redzētu, vai tīmekļa vietne avarē vai jūs gaidīt, lai redzētu, vai programma izpaužas dažas kļūdas paziņojumu jo, ja jums paveiksies kā slikts puisis, un jūs sniegt dažas traks ievadi ka avārijās programmu, kas nozīmē, ka programmētājs nav paredzēt savu slikto uzvedību, kas nozīmē, ka jūs varat, iespējams ar pietiekami pūles, pietiekami daudz izmēģinājumu un kļūdu, izdomāt, kā algu precīzāku uzbrukumu. Tik tik daudz drošības daļa ir ne tikai izvairīties no šiem uzbrukumiem vispār bet atklājot tos un reāli meklē baļķiem un redzēt to, ko trakie izejvielas ir cilvēki drukāti savā mājas lapā, ko meklēt termini cilvēkus drukāti savā mājas lapā cer pārpildīta kādu buferi. Un tas viss aprobežojas ar vienkāršu pamati Kas masīvs un ko tas nozīmē, lai sadalītu un izmantot atmiņu. Saistīta ar to, tad arī tas ir. Pieņemsim tikai skatienu iekšpusē cieto disku vēlreiz. Jūs atceraties no nedēļas vai divām pirms, ka, ja jūs vilkt failus uz jūsu atkritni vai trash var, kas notiek? >> [Students] Nekas. >> Pilnīgi nekas, vai ne? Galu galā, ja jūs vadāt zemu diska vietas, Windows vai Mac OS sāks izdzēšot failus jums. Bet, ja jūs vilkt kaut ko tur, ka nav vispār droši. Visas jūsu istabas biedrs vai draugs vai ģimenes loceklis, ir jādara, ir divreiz uzklikšķiniet un voila, tur visi fragmentārie failus, mēģināja izdzēst. Lielākā daļa no mums ir vismaz zināt, ka jums ir tiesības noklikšķiniet vai Control klikšķi un tukšs trash vai kaut kas tamlīdzīgs. Bet pat tad, ka nav gluži darīt to triks jo kas notiek, ja jums ir fails uz cietā diska kas pārstāv kādu Word dokumentu vai kādu JPEG, un tas atspoguļo jūsu cietā diska, un pieņemsim, ka tas skaida šeit ir, ka fails, un tas sastāv no visu ķekars 0s un 1s. Kas notiek, ja jūs ne tikai vilkt šo failu uz miskasti var vai atkritni bet arī iztukšojiet to? Kārtot neko. Tas nav absolūti nekas tagad. Tagad tas ir tikai nekas, jo nedaudz kaut kas notiek veidā šīs tabulas. Tātad tur ir dažas no datubāzes vai galda veida iekšpusē datora atmiņā ka būtībā ir viens failiem kolonnu vārdiem un viena kolonna faili "vietā, kur tas varētu būt vieta 123, tikai izlases numuru. Lai mēs varētu būt kaut kas līdzīgs x.jpeg un atrašanās 123. Kas notiek tad, kad jūs faktiski iztukšot miskasti? Kas iet prom. Bet ko nav iet prom ir 0s un 1s. Tātad, kāda ir tad savienojums ar pset4? Nu, ar pset4, tikai tāpēc, ka mēs esam nejauši izdzēš kompakto flash karti ka bija visas šīs fotogrāfijas vai vienkārši tāpēc, ka tas, ko neveiksmes kļuva bojāti nenozīmē, ka 0s un 1s nav joprojām. Varbūt daži no viņiem tiek zaudēti, jo kaut got bojāti tādā ziņā, ka daži 0s kļuva 1s un 1s kļuva 0s. Sliktas lietas var notikt, jo buggy programmatūru vai bojātu aparatūru. Bet daudzi no tiem bitiem, varbūt pat 100% no tiem, ir joprojām. Tas ir tikai, ka dators vai kamera nezina, kur JPEG1 sākās un kur JPEG2 sākusies. Bet, ja jūs, programmētājs, zināt, ar mazliet savvy ja šie JPEG ir vai ko viņi izskatās, lai jūs varētu analizēt 0s un 1s un teikt JPEG, JPEG, Jūs varat uzrakstīt programmu ar būtībā tikai par vai kamēr cilpa kas atgūst katru no šiem failiem. Tātad mācība, tad ir jāsāk droši dzēšana failus ja jūs vēlaties, lai izvairītos no šīs pavisam. Jā. [Students] Kā nāk tā saka savā datorā ka jums ir vairāk atmiņas nekā jūs agrāk? Ir vairāk atmiņas nekā jūs agrāk - >> [students] vairāk pieejamā atmiņa. Oh. Labs jautājums. Tātad, kāpēc tad pēc iztukšošanas miskasti Vai jūsu dators jums pateikt ka jums ir vairāk brīvas vietas nekā jūs agrāk? Īsumā, jo tas guļ. Vairāk tehniski, jums ir vairāk vietas, jo tagad jūs teicāt Jūs varat nodot citas lietas, kur tas fails reiz bija. Bet tas nenozīmē, ka biti dodas prom, un tas nenozīmē, ka biti tiek mainīts uz visiem 0S, piemēram, jūsu aizsardzību. Tātad gluži pretēji, ja jūs droši dzēst failus vai fiziski iznīcināt ierīci, kas patiešām ir vienīgais veids, reizēm ap to. Tātad, kāpēc nav mēs atstāt šajā daļēji biedējošu piezīmi, un mēs redzēt jūs pirmdien. [Aplausi] [CS50.TV]