1 00:00:00,000 --> 00:00:02,860 [Powered by Google Translate] [Teden 5] 2 00:00:02,860 --> 00:00:04,860 [David J. Malan - Harvard University] 3 00:00:04,860 --> 00:00:07,260 [To je CS50. - CS50.TV] 4 00:00:07,260 --> 00:00:09,740 >> To je CS50, Teden 5. 5 00:00:09,740 --> 00:00:12,900 Danes in ta teden bomo predstavili malo sveta forenzike 6 00:00:12,900 --> 00:00:14,850 v okviru problema Set 4. 7 00:00:14,850 --> 00:00:18,480 Danes bo skrajšano predavanje zato, ker je poseben dogodek, sem kasneje. 8 00:00:18,480 --> 00:00:21,940 Torej bomo pokukajmo in draži tako študentom kot tudi njihovi starši danes 9 00:00:21,940 --> 00:00:24,600 z nekaterimi stvarmi, ki so na obzorju. 10 00:00:24,600 --> 00:00:29,050 >> Med njimi, kot v ponedeljek, boste imeli še nekaj sošolci. 11 00:00:29,050 --> 00:00:32,980 EDX, Harvard in MIT novo spletno pobuda za OpenCourseWare in več, 12 00:00:32,980 --> 00:00:36,730 začenja na univerzi Harvard v ponedeljek, kar pomeni, da prihaja ponedeljek 13 00:00:36,730 --> 00:00:40,930 boste imeli, kot v zadnjem štetju 86.000 dodatnih sošolci 14 00:00:40,930 --> 00:00:43,680 Kdo bo po skupaj s predavanji CS50 in odsekov 15 00:00:43,680 --> 00:00:45,890 in walkthroughs in problemov sklopov. 16 00:00:45,890 --> 00:00:51,870 In v okviru tega, boste postali člani ustanovni razred CS50 in zdaj CS50x. 17 00:00:51,870 --> 00:00:56,150 Kot del tega zdaj zavedajo, da se bodo nekatere upsides kot dobro. 18 00:00:56,150 --> 00:01:00,620 Pri pripravah na to, za veliko število študentov, 19 00:01:00,620 --> 00:01:03,820 zadošča reči, da čeprav imamo 108 TFS in CAS, 20 00:01:03,820 --> 00:01:07,560 to ni čisto najboljši učenec-učitelj razmerje, ko bomo zadeli na 80.000 študentov. 21 00:01:07,560 --> 00:01:09,830 Ne bomo se razvrščanje toliko problem postavlja ročno, 22 00:01:09,830 --> 00:01:13,050 Tako je predstavil ta teden v problemski sklop bo CS50 Preverite, 23 00:01:13,050 --> 00:01:15,410 , ki se bo pripomoček ukazne vrstice v aparatu 24 00:01:15,410 --> 00:01:17,880 da boste dobili, ko jo boste osvežili kasneje ta teden. 25 00:01:17,880 --> 00:01:21,030 Boste mogli zagnati ukaz, check50, na svojem pset, 26 00:01:21,030 --> 00:01:24,770 in boste dobili takojšnjo povratno informacijo o tem, ali je vaš program, pravilno ali nepravilno 27 00:01:24,770 --> 00:01:27,980 glede na različne tehnične zahteve za obliko, ki smo poskrbeli. 28 00:01:27,980 --> 00:01:30,310 Več o tem v opredelitvi težave set. 29 00:01:30,310 --> 00:01:34,220 The CS50x sošolci bodo uporabili tudi to. 30 00:01:34,220 --> 00:01:36,170 >> Problem Set 4 je vse o forenziki, 31 00:01:36,170 --> 00:01:38,630 in je ta pset res zgleduje po nekaterih resničnih stvari 32 00:01:38,630 --> 00:01:41,210 pri čemer, ko sem bil v šoli sem nekaj časa interniran 33 00:01:41,210 --> 00:01:45,270 z okrožnim tožilcem Middlesex County pisarni delaš forenzično delo 34 00:01:45,270 --> 00:01:47,660 z njihovo vodilno forenzični preiskovalec. 35 00:01:47,660 --> 00:01:50,280 Kaj je ta znašala, kot mislim, da sem že pred nekaj tedni mimo, 36 00:01:50,280 --> 00:01:52,720 se bodo policijski državni Masa ali drugi pridejo, 37 00:01:52,720 --> 00:01:56,150 , ki bi jih odložite stvari, kot so trdi diski in CD-jev in disket in podobno, 38 00:01:56,150 --> 00:01:58,770 in potem je cilj urada forenzike je bil ugotoviti 39 00:01:58,770 --> 00:02:01,470 ali je bila ali ni bila dokaz neke vrste. 40 00:02:01,470 --> 00:02:04,730 To je bila posebna enota Preiskave, tako da je bilo beli ovratnik kriminalu. 41 00:02:04,730 --> 00:02:10,949 To je bolj zaskrbljujoče vrste kaznivih dejanj, ki vključuje vse, kar neke vrste digitalnih medijev. 42 00:02:10,949 --> 00:02:16,450 Izkazalo se je, da ni veliko ljudi, ki pišejo e-poštno sporočilo, "mi je uspelo." 43 00:02:16,450 --> 00:02:20,490 Tako pogosto ti forenzične iskanja ni obrnila navzgor vse, da je veliko sadja, 44 00:02:20,490 --> 00:02:22,820 ampak včasih bi ljudje pišejo take e-pošte. 45 00:02:22,820 --> 00:02:25,240 Torej, včasih so bili nagrajeni prizadevanja. 46 00:02:25,240 --> 00:02:31,210 >> Vendar pa vodi do tega forenzično pset, bomo uvedbo v pset4 malo grafiko. 47 00:02:31,210 --> 00:02:35,410 Verjetno se da te stvari za samoumevne - JPEG, GIF, in podobno - v teh dneh. 48 00:02:35,410 --> 00:02:38,320 Ampak, če si res misliš o tem, slika, podobno kot obraz Rob je, 49 00:02:38,320 --> 00:02:41,270 lahko obravnavamo kot zaporedje pik ali pik. 50 00:02:41,270 --> 00:02:43,380 V primeru obrazu Rob je, tam je vse vrste barv, 51 00:02:43,380 --> 00:02:46,760 in smo začeli videti posamezne pike, sicer znan kot pik, 52 00:02:46,760 --> 00:02:48,610 ko smo začeli, da povečate palca 53 00:02:48,610 --> 00:02:54,660 Ampak, če bomo poenostavili svet malo in samo rečem, da je to tukaj, je Rob v črno-beli tehniki, 54 00:02:54,660 --> 00:02:57,490 da predstavlja črno-belo, lahko pa uporabite binary. 55 00:02:57,490 --> 00:03:01,660 In če bomo uporabiti binarno, 1 ali 0, lahko izrazimo to isto sliko 56 00:03:01,660 --> 00:03:06,140 z nasmejanim obrazom Rob je s tem vzorcu bitov. 57 00:03:06,140 --> 00:03:12,100 11000011 pomeni bela, bela, črna, črna, črna, črna, bela, bela. 58 00:03:12,100 --> 00:03:16,150 In tako to ni velik korak nato začeli govoriti o pisanimi fotografijami, 59 00:03:16,150 --> 00:03:18,600 stvari, ki bi jih vidite na Facebooku ali pa z digitalnim fotoaparatom. 60 00:03:18,600 --> 00:03:21,410 Ampak seveda, ko gre za barve, za ogled potrebujete več bitov. 61 00:03:21,410 --> 00:03:25,690 In zelo pogosto v svetu fotografije je uporaba ne 1-bitne barve 62 00:03:25,690 --> 00:03:29,560 kot to kaže, pa 24-bitno barvno, če ste dejansko dobili milijone barv. 63 00:03:29,560 --> 00:03:32,250 Tako kot v primeru, ko povečujete na očeh Rob je, 64 00:03:32,250 --> 00:03:36,370 da bi bila katera številka milijonov različnih barvnih možnosti. 65 00:03:36,370 --> 00:03:39,040 Torej bomo uvesti to Set 4 Problem je tudi v walkthrough, 66 00:03:39,040 --> 00:03:43,370 , ki bo danes ob 3:30 namesto običajnega 2:30 zaradi petkovega predavanja tukaj. 67 00:03:43,370 --> 00:03:46,620 Vendar pa bo video na spletu običajnega jutri. 68 00:03:46,620 --> 00:03:48,820 >> Prav tako vam bomo predstavili drugi obliki zapisa. 69 00:03:48,820 --> 00:03:51,270 To je pomenilo, da si namerno zastrašujoče na prvi, 70 00:03:51,270 --> 00:03:55,670 ampak to je le nekaj dokumentacije za struct C. 71 00:03:55,670 --> 00:03:58,940 Izkazalo se je, da je Microsoft pred leti pomagal popularizirati ta format 72 00:03:58,940 --> 00:04:05,150 imenuje bitna format, bmp, in to je super preprost barvit grafični format 73 00:04:05,150 --> 00:04:10,150 ki je bila uporabljena za kar nekaj časa in včasih še za ozadja na namiznih računalnikov. 74 00:04:10,150 --> 00:04:14,760 Če menite, da nazaj na Windows XP in gričev in modro nebo, 75 00:04:14,760 --> 00:04:17,170 da je običajno bmp ali bitna slika. 76 00:04:17,170 --> 00:04:19,959 Bitne slike so zabavne za nas, saj imajo malo več kompleksnosti. 77 00:04:19,959 --> 00:04:22,610 To ni tako preprosto, kot to mrežo 0s in 1s. 78 00:04:22,610 --> 00:04:27,510 Namesto, da imate stvari, kot glavo na začetku datoteke. 79 00:04:27,510 --> 00:04:31,990 Torej, z drugimi besedami, znotraj ene datoteke. BMP je cel kup 0s in 1s, 80 00:04:31,990 --> 00:04:34,910 vendar pa je nekaj dodatnih 0s in 1s tam. 81 00:04:34,910 --> 00:04:38,220 In izkazalo se je, da tisto, kar smo verjetno samoumevno let - 82 00:04:38,220 --> 00:04:45,170 datotek, kot so. doc. ali xls ali. mp3, mp4,. ne glede na oblike datotek 83 00:04:45,170 --> 00:04:48,480 da ste seznanjeni s - kaj to sploh pomeni, da je datotečni format, 84 00:04:48,480 --> 00:04:52,480 saj na koncu dneva vse te datoteke, ki jih uporabljamo so le 0s in 1s. 85 00:04:52,480 --> 00:04:56,810 In morda so 0s in 1s predstavljajo ABC preko ASCII ali podobno, 86 00:04:56,810 --> 00:04:58,820 ampak na koncu dneva, je še vedno samo 0 in 1s. 87 00:04:58,820 --> 00:05:02,100 Torej, ljudje le občasno odloči, da izumiti novo obliko datoteke 88 00:05:02,100 --> 00:05:06,420 kjer so standardizacija, kaj se bo vzorce bitov pravzaprav pomeni. 89 00:05:06,420 --> 00:05:09,220 In v tem primeru tudi tu ljudje, ki so namenjeni bitno obliko datoteke 90 00:05:09,220 --> 00:05:15,620 je dejal, da je že na prvi bajt v datoteke bitnih, kot je označena z odmikom 0 tam, 91 00:05:15,620 --> 00:05:18,940 da se bo nekaj cryptically imenom spremenljivke se imenuje bfType, 92 00:05:18,940 --> 00:05:23,080 ki samo stoji za vrsto datoteke bitne slike, kakšne datoteke bitnih je to. 93 00:05:23,080 --> 00:05:27,700 Lahko sklepamo, morda v drugi vrstici, ki izravna 2, bajt številko 2, 94 00:05:27,700 --> 00:05:33,740 ima vzorec 0s in 1s, ki predstavlja kaj? Velikost nečesa. 95 00:05:33,740 --> 00:05:35,310 In gre od tam. 96 00:05:35,310 --> 00:05:37,410 Torej, Set 4 Problem, boste šli skozi nekatere od teh stvari. 97 00:05:37,410 --> 00:05:39,520 Mi ne bo končalo skrbeti za vse. 98 00:05:39,520 --> 00:05:47,510 Ampak opazite, da se začne, da bi dobili zanimive okoli bajt 54: rgbtBlue, zelena in rdeča. 99 00:05:47,510 --> 00:05:52,110 Če ste kdaj slišali kratico RGB - rdeča, zelena, modra - to je, da je sklicevanje na 100 00:05:52,110 --> 00:05:54,610 ker se je izkazalo, lahko slikate vse barve mavrice 101 00:05:54,610 --> 00:05:58,180 z nekaterimi kombinacijo rdeče in modre in zelene. 102 00:05:58,180 --> 00:06:03,320 In v resnici, lahko starši v sobi spomniti na nekatere izmed prvih projektorjev. 103 00:06:03,320 --> 00:06:05,890 Te dni, boste videli ena svetla svetloba, ki prihaja iz leče, 104 00:06:05,890 --> 00:06:09,800 pa nazaj v dan si imel rdečo lečo, modro lečo in zeleno lečo, 105 00:06:09,800 --> 00:06:13,380 in skupaj sta usmerjena na zaslon in oblikovali barvito sliko. 106 00:06:13,380 --> 00:06:16,270 In zelo pogosto, bi srednje šole in srednje šole so tiste leče 107 00:06:16,270 --> 00:06:19,720 vedno tako malo Nakrivo, tako da si nekako vidi dvojno ali trojno slik. 108 00:06:19,720 --> 00:06:24,100 Ampak to je bila ideja. Imeli ste rdečo in zeleno in modro svetlobo, slikarstvo sliko. 109 00:06:24,100 --> 00:06:26,590 In ta ista načela se uporabljajo v računalnikih. 110 00:06:26,590 --> 00:06:30,230 >> Tako med drugim izzivom, potem za vas pri reševanju Set 4 se bo nekaj stvari. 111 00:06:30,230 --> 00:06:34,800 Ena je, da dejansko velikost slike, da bi se v vzorcu 0s in 1s, 112 00:06:34,800 --> 00:06:40,200 ugotovimo, katere kose 0s in 1s predstavlja tisto, kar v strukturi, kot je ta, 113 00:06:40,200 --> 00:06:43,630 in nato ugotovimo, kako se podvajajo pik - The Reds, blues, zelenice - 114 00:06:43,630 --> 00:06:46,660 notranjost tako, da ko slika izgleda tako na začetku, 115 00:06:46,660 --> 00:06:49,210 je morda videti, kot je ta, namesto po tem. 116 00:06:49,210 --> 00:06:53,640 Med drugimi izzivi, preveč se bo, da boste predali forenzično sliko 117 00:06:53,640 --> 00:06:56,030 z dejansko datoteko iz digitalnega fotoaparata. 118 00:06:56,030 --> 00:06:58,960 In na to kamero, nekoč, je bilo cel kup fotografij. 119 00:06:58,960 --> 00:07:03,760 Problem je čisto slučajno izbrišejo ali se je slika poškodovana nekako. 120 00:07:03,760 --> 00:07:05,750 Slabe stvari se dogajajo z digitalnimi fotoaparati. 121 00:07:05,750 --> 00:07:09,150 In tako smo se hitro kopirajo vse 0s in 1s off te kartice za vas, 122 00:07:09,150 --> 00:07:13,610 shrani vse v eno veliko datoteko, nato pa jih bomo predali prikazana v Problem Set 4 123 00:07:13,610 --> 00:07:19,320 tako da boste lahko napisali program v C, s katerimi si opomore vse te JPEGs, v najboljšem primeru. 124 00:07:19,320 --> 00:07:23,330 In izkazalo se je, da so JPEG, čeprav je to nekoliko zapleteno datotečnem formatu - 125 00:07:23,330 --> 00:07:26,360 oni so veliko bolj zapleten kot to nasmejan obraz tukaj - 126 00:07:26,360 --> 00:07:31,160 Izkazalo se je, da ima vsak JPEG začne z istimi vzorci 0s in 1s. 127 00:07:31,160 --> 00:07:35,630 Torej z uporabo, na koncu, medtem ko zanke ali za zanke in podobno, 128 00:07:35,630 --> 00:07:38,880 lahko izbirate čez vse 0s in 1s v tem forenzične slike 129 00:07:38,880 --> 00:07:43,150 in vsakič, ko vidiš poseben vzorec, ki je opredeljen v specifikaciji problem set, 130 00:07:43,150 --> 00:07:47,880 si lahko ogledate tukaj prevzeti, je z veliko verjetnostjo, začetek JPEG. 131 00:07:47,880 --> 00:07:51,230 In takoj, ko je bil isti vzorec nekaj več bajtov 132 00:07:51,230 --> 00:07:55,430 ali kilobajtov megabajtov ali pozneje, lahko prevzamejo tukaj je 2. JPEG, 133 00:07:55,430 --> 00:07:57,380 foto sem po prvi. 134 00:07:57,380 --> 00:08:01,370 Naj nehate brati, da je prvo datoteko, da začnete pisati to novo, 135 00:08:01,370 --> 00:08:06,310 in izhod vašega programa za pset4 se bo kar 50 JPEG. 136 00:08:06,310 --> 00:08:09,270 In če to ni 50 JPEG, imate malo zanko. 137 00:08:09,270 --> 00:08:12,490 Če imate nešteto JPEG, imate neskončno zanko. 138 00:08:12,490 --> 00:08:14,910 Tako, da bodo tudi precej pogost primer. 139 00:08:14,910 --> 00:08:16,600 Torej, to je tisto, kar je na obzorju. 140 00:08:16,600 --> 00:08:21,310 >> Kviz 0 nami, spoznali na moj email, da vedno obstajajo ljudje, ki so tako srečni, 141 00:08:21,310 --> 00:08:23,640 nekako nevtralen, in žalosten okoli 0 kvizu čas. 142 00:08:23,640 --> 00:08:26,800 In vas prosimo, da stik z mano, vodja TF Zamyla, svoje TF, 143 00:08:26,800 --> 00:08:31,180 ali eden od CA, da boste vedeli, če bi želeli, da bi razpravljali, kako je šlo. 144 00:08:31,180 --> 00:08:35,539 >> Torej, da bi naredil vtis na starše tukaj v prostoru, kar je CS50 knjižnica? 145 00:08:36,429 --> 00:08:40,390 [Smeh] Dobro delo. 146 00:08:40,390 --> 00:08:48,340 Kaj CS50 knjižnica? Ja. >> [Študent] je vnaprej pisno niz oznako [neslišno] 147 00:08:48,340 --> 00:08:49,750 Dobro, dobro. 148 00:08:49,750 --> 00:08:53,240 To je predhodno pisno niz kode, ki jih je napisal osebje, nudimo vam, 149 00:08:53,240 --> 00:08:55,030 ki določa nekatere skupne funkcije, 150 00:08:55,030 --> 00:08:59,020 Stvari, kot se mi je niz, me int - vse funkcije, ki so tukaj naštete. 151 00:08:59,020 --> 00:09:02,260 >> Že sedaj smo začeli res, da te usposabljanje kolesa off. 152 00:09:02,260 --> 00:09:05,050 Bomo začeli vzeti niz od tebe, 153 00:09:05,050 --> 00:09:08,870 Odpoklic, ki je bil le sinonim za tisto, kar dejansko podatkovni tip? >> [Več študentov] Char *. 154 00:09:08,870 --> 00:09:12,730 Char *. Za starše, ki je bila verjetno [whooshing naredi zvok]. To je dobro. 155 00:09:12,730 --> 00:09:17,550 Char * bomo začeli videti na zaslonu toliko več, kot smo odstranili iz našega niz besedišča, 156 00:09:17,550 --> 00:09:19,730 vsaj ko gre za dejansko pisanje kode. 157 00:09:19,730 --> 00:09:22,840 Prav tako bomo prenehali uporabljati nekatere od teh funkcij, kar 158 00:09:22,840 --> 00:09:25,280 ker naši programi bodo dobili bolj zapletene. 159 00:09:25,280 --> 00:09:28,480 In ne samo pisati programe, ki sedijo tam s hitro utripa, 160 00:09:28,480 --> 00:09:31,870 čaka, da uporabnik vnesti nekaj, boste dobili svoje vložke od drugod. 161 00:09:31,870 --> 00:09:35,490 Na primer, jih boste dobili od več bitov na lokalni trdi disk. 162 00:09:35,490 --> 00:09:38,580 Boste namesto njih priti v prihodnosti od omrežne povezave, 163 00:09:38,580 --> 00:09:40,230 nekatere spletne strani nekje. 164 00:09:40,230 --> 00:09:44,110 >> Torej, kaj je Odlepite tej plasti so prvič in potegnite do CS50 aparata 165 00:09:44,110 --> 00:09:49,010 in ta datoteka imenuje cs50.h, ki ste bili # vključno tednih 166 00:09:49,010 --> 00:09:51,140 ampak kaj je dejansko videti, kaj je notri tega. 167 00:09:51,140 --> 00:09:54,430 Začetek datoteke v modrem je samo cel kup komentarjev: 168 00:09:54,430 --> 00:09:57,050 informacije o garanciji in izdajanja dovoljenj. 169 00:09:57,050 --> 00:09:59,050 To je neke vrste skupne paradigme v programski opremi 170 00:09:59,050 --> 00:10:01,580 ker je veliko programske opreme v teh dneh je, kaj se ti open source, 171 00:10:01,580 --> 00:10:05,220 kar pomeni, da je nekdo napisal kodo, zato je bilo na voljo brezplačno 172 00:10:05,220 --> 00:10:10,470 ne samo za vožnjo in uporabo, ampak dejansko prebral in spremeniti in vključiti v svoje delo. 173 00:10:10,470 --> 00:10:14,660 Torej, to je tisto, kar ste bili z uporabo, odprtokodno programsko opremo, vendar v zelo majhni obliki. 174 00:10:14,660 --> 00:10:18,560 Če bi se pomaknite navzdol mimo pripomb, čeprav bomo začeli videti nekaj bolj znanih stvari. 175 00:10:18,560 --> 00:10:25,010 Obvestilo na vrhu sem, da je dokumentacija cs50.h vsebuje cel kup glavi datoteke. 176 00:10:25,010 --> 00:10:28,560 Večina od njih še nismo videli, vendar je znano. 177 00:10:28,560 --> 00:10:32,270 Katera od teh smo videli, čeprav na kratko, tako daleč? >> [Študent] Standard knjižnica. 178 00:10:32,270 --> 00:10:35,810 Ja, standardna knjižnica. stdlib.h je malloc. 179 00:10:35,810 --> 00:10:38,320 Ko smo začeli govoriti o dinamično dodeljevanje pomnilnika, 180 00:10:38,320 --> 00:10:41,650 ki jih bomo vrnili naslednji teden pa smo začeli tudi te datoteke. 181 00:10:41,650 --> 00:10:46,640 Izkazalo se je, da je bool in resnično in lažno dejansko ne obstajajo v C-per 182 00:10:46,640 --> 00:10:49,440 razen če so te datoteke tukaj. 183 00:10:49,440 --> 00:10:52,710 Imamo nekaj tednov je bilo tudi stdbool.h 184 00:10:52,710 --> 00:10:55,620 tako da lahko uporabite pojem bool, resnična ali neresnična. 185 00:10:55,620 --> 00:10:58,620 Brez tega bi morali nekako ponaredek, in uporabite int 186 00:10:58,620 --> 00:11:02,610 in samo samovoljno domnevati, da je 0 false in 1 je res. 187 00:11:02,610 --> 00:11:07,150 Če smo se pomaknite naprej, tu je naša opredelitev niza. 188 00:11:07,150 --> 00:11:11,390 Izkazalo se je, kot smo že povedal, da če je ta zvezda je sploh ni važno. 189 00:11:11,390 --> 00:11:13,720 Lahko celo prostor vsem. 190 00:11:13,720 --> 00:11:16,740 Prav ta semester so bili njeni promociji, kot je to jasno 191 00:11:16,740 --> 00:11:18,620 da je zvezda ima opraviti s tipom, 192 00:11:18,620 --> 00:11:21,700 a se zavedaš, tako pogosta, če ne malo bolj pogosti, 193 00:11:21,700 --> 00:11:24,430 je, da ga ni, ampak funkcionalno je ista stvar. 194 00:11:24,430 --> 00:11:27,720 Toda zdaj, če beremo navzdol naprej, pa si oglejte GetInt 195 00:11:27,720 --> 00:11:32,190 saj smo vajeni, da se morda najprej, preden karkoli drugega v tem polletju. 196 00:11:32,190 --> 00:11:37,440 Tukaj je GetInt. To je tisto? >> [Študent] prototip. >> To je samo prototip. 197 00:11:37,440 --> 00:11:41,410 Pogosto smo pripravili prototipe na vrhovih naših. C datoteke 198 00:11:41,410 --> 00:11:46,690 lahko pa tudi postaviti prototip v glavi datoteke, h. datotek, kot je ta tukaj 199 00:11:46,690 --> 00:11:50,840 tako da, ko pišete nekaj funkcij, ki jih želite, da drugi ljudje lahko uporabljali, 200 00:11:50,840 --> 00:11:53,550 , ki je ravno tako s knjižnico CS50, 201 00:11:53,550 --> 00:11:57,040 ne samo izvaja svoje naloge v nekaj podobnega cs50.c, 202 00:11:57,040 --> 00:12:02,790 si prav tako prototipe ni na vrhu te datoteke, ampak na vrhu glave datoteke. 203 00:12:02,790 --> 00:12:07,170 Potem je glava datoteka je tisto, prijatelji in sodelavci so 204 00:12:07,170 --> 00:12:09,760 z # include v svoji kodi. 205 00:12:09,760 --> 00:12:12,210 Torej vsem tem času, ste bili tudi vsi ti prototipov, 206 00:12:12,210 --> 00:12:16,580 dejansko na vrhu datoteke, ampak s pomočjo tega mehanizma # include, 207 00:12:16,580 --> 00:12:20,070 ki je v bistvu kopije in paste to sliko v svoje. 208 00:12:20,070 --> 00:12:23,070 Tukaj je nekaj precej podrobno dokumentacijo. 209 00:12:23,070 --> 00:12:25,640 Smo precej samoumevno, da GetInt dobi int, 210 00:12:25,640 --> 00:12:27,640 vendar se izkaže, da so nekateri primeri kotiček. 211 00:12:27,640 --> 00:12:31,810 Kaj pa, če uporabnik vnese v številu, ki je tako prevelika, quintillion, 212 00:12:31,810 --> 00:12:35,490 ki preprosto ne morejo fit notranjost notr? Kakšna je pričakovana vedenja? 213 00:12:35,490 --> 00:12:38,020 Idealno bi bilo, da je predvidljiv. 214 00:12:38,020 --> 00:12:40,280 Torej, v tem primeru, če ste dejansko prebrali drobni tisk, 215 00:12:40,280 --> 00:12:44,500 boste dejansko videli, da če proga ne more prebrati, ta vrne INT_MAX. 216 00:12:44,500 --> 00:12:48,320 Nikoli nisva govorila o tem, ampak na podlagi svoje kapitalizacije, kaj je to verjetno? 217 00:12:48,320 --> 00:12:50,640 [Študent] konstantna. >> To je stalnica. 218 00:12:50,640 --> 00:12:54,770 To je nekaj posebnega konstanta, ki je verjetno prijavljena v eni od teh glavi datoteke 219 00:12:54,770 --> 00:13:00,090 To je višje v spisu, in INT_MAX je verjetno nekaj podobnega približno 2 milijardi 220 00:13:00,090 --> 00:13:04,990 Zamisel je, da zato, ker moramo nekako pomenilo, da je nekaj šlo narobe, 221 00:13:04,990 --> 00:13:10,700 smo, da imajo 4000000000 številke so nam na voljo: -2000000000 na do 2 milijard EUR, več ali manj. 222 00:13:10,700 --> 00:13:14,710 No, tisto, kar je pogosto pri načrtovanju je, da kradejo samo eno od teh številk, 223 00:13:14,710 --> 00:13:18,920 Morda 0, morda 2 milijardi morda -2000000000, 224 00:13:18,920 --> 00:13:23,280 Tako boste porabili eno od svojih možnih vrednosti, tako da lahko zavežejo na svetu 225 00:13:23,280 --> 00:13:26,820 da če gre kaj narobe, se bom vrnil to super veliko vrednost. 226 00:13:26,820 --> 00:13:31,030 Ampak vi ne želite, da si tipkanje nekaj Grobni kot 234 ..., res veliko številko. 227 00:13:31,030 --> 00:13:34,060 Ti je posploševati, namesto kot stalnica. 228 00:13:34,060 --> 00:13:38,060 Torej res, če si bil analni zadnjih nekaj tednov, vsakič, ko se imenuje GetInt, 229 00:13:38,060 --> 00:13:42,900 da bi bilo treba preverjanjem, če pogoj naredil si tip v INT_MAX, 230 00:13:42,900 --> 00:13:46,590 oziroma, natančneje, pa GetInt Vračilo INT_MAX, ker če bi bil, 231 00:13:46,590 --> 00:13:51,830 ki dejansko pomeni, da ni treba vnesti. Nekaj ​​je šlo narobe v tej zadevi. 232 00:13:51,830 --> 00:13:56,080 Torej, to je tisto, kar je splošno znano kot divjega vrednosti, kar pomeni samo nekaj posebnega. 233 00:13:56,080 --> 00:13:58,120 >> Pojdimo zdaj spremenila v datoteko. C. 234 00:13:58,120 --> 00:14:01,340 Datoteka C je obstajala v aparatu za nekaj časa. 235 00:14:01,340 --> 00:14:06,840 In v resnici, aparat pa že zbirajo za vas v tej stvari smo ti predmetne kode, 236 00:14:06,840 --> 00:14:09,540 ampak to šele ni pomembno za vas, če je to zato, ker sistem ne ve 237 00:14:09,540 --> 00:14:11,730 V tem primeru, ko gre za: aparat. 238 00:14:11,730 --> 00:14:17,400 Naj se pomaknite navzdol do zdaj GetInt in videli, kako GetInt je delal ves ta čas. 239 00:14:17,400 --> 00:14:19,460 Tukaj imamo podobne pripombe od prej. 240 00:14:19,460 --> 00:14:21,660 Naj približati le tisti del kode. 241 00:14:21,660 --> 00:14:23,900 In kaj imamo za GetInt je naslednja. 242 00:14:23,900 --> 00:14:25,700 To traja nobenega vnosa. 243 00:14:25,700 --> 00:14:29,510 To vrne int, medtem ko je (pravi), tako da imamo namerno neskončno zanko, 244 00:14:29,510 --> 00:14:33,180 najverjetneje pa bomo iztrgajo iz tega tako ali vrniti znotraj tega. 245 00:14:33,180 --> 00:14:34,870 >> Poglejmo, kako to deluje. 246 00:14:34,870 --> 00:14:39,240 Zdi se, da se z uporabo GetString v tej prvi vrstici znotraj zanke 166. 247 00:14:39,240 --> 00:14:43,780 To je zdaj dobra praksa, saj pod kakšnimi pogoji lahko vrne GetString 248 00:14:43,780 --> 00:14:47,660 posebna ključna beseda NULL? >> [Študent] Če gre kaj narobe. 249 00:14:47,660 --> 00:14:51,630 Če gre kaj narobe. In kaj bi lahko šlo narobe, ko pokličete nekaj podobnega GetString? 250 00:14:54,960 --> 00:14:57,640 Ja. >> [Študent] malloc ne mu daš ints. 251 00:14:57,640 --> 00:14:59,150 Ja. Mogoče malloc ne uspe. 252 00:14:59,150 --> 00:15:03,190 Nekje pod pokrovom motorja, GetString kliče malloc, ki dodeljuje pomnilnik 253 00:15:03,190 --> 00:15:06,020 ki omogoča računalniško trgovino vse znake 254 00:15:06,020 --> 00:15:07,750 da uporabnik vnese v tipkovnici. 255 00:15:07,750 --> 00:15:11,590 In predvidevam si imel še celo veliko prostega časa in vnesli več, na primer, 256 00:15:11,590 --> 00:15:16,160 kot 2 milijardi znakov, več znakov, kot računalnik pa ima tudi RAM. 257 00:15:16,160 --> 00:15:19,250 GetString je, da bi lahko pomenilo, da za vas. 258 00:15:19,250 --> 00:15:22,560 Tudi če je to super, super občasni kotiček primeru, 259 00:15:22,560 --> 00:15:24,340 to je nekako bi lahko poskrbel za to, 260 00:15:24,340 --> 00:15:28,750 in tako GetString, če bi šli nazaj in preberite dokumentacijo, v resnici vrnitev NULL. 261 00:15:28,750 --> 00:15:34,460 Torej, zdaj, če ne GetString z vrnitvijo NULL, GetInt se dogaja, da ne z vrnitvijo INT_MAX 262 00:15:34,460 --> 00:15:37,690 tako kot kontrolna. To so samo človeške konvencije. 263 00:15:37,690 --> 00:15:41,450 Edini način, da bi vedel, da je to primer, je z branjem dokumentacije. 264 00:15:41,450 --> 00:15:45,040 >> Naj se pomaknite navzdol, kjer se dejansko gotten int. 265 00:15:45,040 --> 00:15:51,160 Če bi se pomaknite navzdol malo naprej, v skladu 170, imamo pripombo nad temi smernicami. 266 00:15:51,160 --> 00:15:55,100 Izjavljamo v 172 int, N in char, C in potem to novo funkcijo, 267 00:15:55,100 --> 00:15:58,930 ki so se nekateri izmed vas naletel pred, sscanf. 268 00:15:58,930 --> 00:16:00,870 To je kratica za scanf niza. 269 00:16:00,870 --> 00:16:05,700 Z drugimi besedami, daj mi niz in ga bom za skeniranje informacijami interesov. 270 00:16:05,700 --> 00:16:07,360 Kaj to pomeni? 271 00:16:07,360 --> 00:16:11,800 Recimo, da sem tip v dobesedno 123 na tipkovnici in nato pritisnite tipko Enter. 272 00:16:11,800 --> 00:16:16,470 Kaj je podatkovni tip 123, ko se vrne z GetString? >> [Študent] String. 273 00:16:16,470 --> 00:16:18,380 Očitno niz, kajne? Imam niz. 274 00:16:18,380 --> 00:16:23,220 Torej je res 123, citiram, konec citata, 123 s \ 0 na koncu. 275 00:16:23,220 --> 00:16:27,110 To ni int. To ni več. Izgleda kot nekaj, vendar to ni dejansko. 276 00:16:27,110 --> 00:16:29,080 Torej, kaj GetInt narediti? 277 00:16:29,080 --> 00:16:35,750 Treba je pregledati, da se niz leve proti desni - 123 \ 0 - in nekako spremeniti v dejanske celo število. 278 00:16:35,750 --> 00:16:37,850 Lahko ugotovimo, kako to storiti. 279 00:16:37,850 --> 00:16:41,450 Če menite, da nazaj na pset2, si verjetno dobil malo všeč Cezarju 280 00:16:41,450 --> 00:16:44,820 ali Vigenere, tako da lahko izbirate v nizu, lahko pretvorite znakov, da ints. 281 00:16:44,820 --> 00:16:46,710 Ampak vraga, to je cel kup dela. 282 00:16:46,710 --> 00:16:49,860 Zakaj ne pokličete funkcijo kot sscanf, da stori za vas? 283 00:16:49,860 --> 00:16:54,230 Torej sscanf pričakuje argument - v tem primeru se imenuje linija, ki je niz. 284 00:16:54,230 --> 00:17:01,840 Nato določite v narekovajih, zelo podoben printf, kaj pričakujete, da boste videli v tem nizu. 285 00:17:01,840 --> 00:17:09,000 In tisto, kar sem rekel, je tukaj pričakujem, da decimalno številko in morda tudi značaj. 286 00:17:09,000 --> 00:17:12,000 In bomo videli, zakaj je temu tako, v trenutku. 287 00:17:12,000 --> 00:17:15,869 In izkazalo se je, da je ta zapis je zdaj spominja stvari smo začeli govoriti o 288 00:17:15,869 --> 00:17:17,619 nekaj več kot tednom dni. 289 00:17:17,619 --> 00:17:21,740 Kaj je & n & c in delaš za nas? >> [Študent] Naslov n in naslov c. 290 00:17:21,740 --> 00:17:25,400 Ja. To mi dali naslov in naslov n c. Zakaj je to pomembno? 291 00:17:25,400 --> 00:17:30,220 Saj veš, da je s funkcijami v C, lahko vedno vrne vrednost ali nobene vrednosti. 292 00:17:30,220 --> 00:17:34,530 Lahko vrne int, niz, float, char, ne glede, ali ga lahko vrnete praznino, 293 00:17:34,530 --> 00:17:38,030 vendar lahko vrne le eno stvar maksimalno. 294 00:17:38,030 --> 00:17:42,760 Ampak tukaj želimo sscanf, da mi vrnejo morda int, decimalno številko, 295 00:17:42,760 --> 00:17:46,220 in tudi char, in bom razložiti, zakaj zna v trenutku. 296 00:17:46,220 --> 00:17:51,460 Vi dejansko želijo vrniti sscanf dve stvari, ampak to enostavno ni mogoče v C. 297 00:17:51,460 --> 00:17:55,200 Temu se lahko izognete tako, da spustimo, da v dveh naslovih 298 00:17:55,200 --> 00:17:57,370 ker takoj, ko se z roko v odvisnosti 2 naslove, 299 00:17:57,370 --> 00:18:00,470 kaj lahko to funkcijo naredili z njimi? >> [Študent] Pisanje teh naslovov. 300 00:18:00,470 --> 00:18:02,010 Lahko pišete na te naslove. 301 00:18:02,010 --> 00:18:05,770 Lahko uporabite zvezdico delovanje in tja, za vsako od teh naslovov. 302 00:18:05,770 --> 00:18:11,260 To je neke vrste te nazaj vrat mehanizma, vendar zelo pogosta za spreminjanje vrednosti spremenljivk 303 00:18:11,260 --> 00:18:14,870 več kot le enem mestu - v tem primeru 2. 304 00:18:14,870 --> 00:18:21,340 Zdaj sem opazil, preverjanje == 1 in se nato vrnejo n če to ne v resnici, ocenjuje, da res. 305 00:18:21,340 --> 00:18:26,170 Torej, kaj se dogaja? Tehnično vse resnično želimo, da se zgodi v GetInt je to. 306 00:18:26,170 --> 00:18:30,740 Želimo, da razčleniti, če se tako izrazim, želimo prebrati niz - quote-konec citata 123 - 307 00:18:30,740 --> 00:18:34,560 in če izgleda kot, da je tam več, kaj govoriš sscanf storiti 308 00:18:34,560 --> 00:18:38,190 je dal to številko - 123 - v ta spremenljivka n zame. 309 00:18:38,190 --> 00:18:42,090 Torej, zakaj potem ni pravzaprav imam, da je to dobro? 310 00:18:42,090 --> 00:18:48,220 Kakšna je vloga sscanf pravim, da bi lahko dobili tudi znak tukaj? 311 00:18:48,220 --> 00:18:53,470 [Neslišno odgovor študentski] >> decimalno vejico lahko dejansko delajo. 312 00:18:53,470 --> 00:18:56,330 Naj presodilo, da je za trenutek pomislil. Kaj še? 313 00:18:56,330 --> 00:18:59,270 [Študent] bi moralo biti NULL. Dobro >> misel. To je lahko znak null. 314 00:18:59,270 --> 00:19:01,660 To je pravzaprav v tem primeru ni. Ja. >> [Študent] ASCII. 315 00:19:01,660 --> 00:19:04,340 ASCII. Ali mi posploševati še dlje. 316 00:19:04,340 --> 00:19:06,640 % C je le za preverjanje napak. 317 00:19:06,640 --> 00:19:09,300 Ne želimo, da bi znak za številko, 318 00:19:09,300 --> 00:19:11,870 ampak kaj mi to omogoča, da storiti, je naslednje. 319 00:19:11,870 --> 00:19:18,210 Izkazalo se je, da sscanf, poleg shranjevanje vrednosti v n in C v tem primeru tukaj, 320 00:19:18,210 --> 00:19:24,890 kar je prav tako je vrne število spremenljivk je dal noter vrednosti 321 00:19:24,890 --> 00:19:30,260 Torej, če ste le tip v 123, potem pa samo% d se dogaja, da se ujemajo, 322 00:19:30,260 --> 00:19:33,880 in šele gets n shranjen v vrednosti kot 123, 323 00:19:33,880 --> 00:19:35,640 in dobi ničesar dal v c. 324 00:19:35,640 --> 00:19:37,620 C ostaja smeti vrednost, če se tako izrazim - 325 00:19:37,620 --> 00:19:40,730 Smetarsko zato, ker nikoli ni bil inicializiran do neke vrednosti. 326 00:19:40,730 --> 00:19:45,520 Torej, v tem primeru sscanf vrne 1, ker sem poseljena 1 teh kazalcev, 327 00:19:45,520 --> 00:19:50,190 v tem primeru super, jaz imam int, zato sem osvoboditi linijo sprostiti pomnilnik 328 00:19:50,190 --> 00:19:54,000 da GetString dejansko dodeljena, in potem se vrnem n, 329 00:19:54,000 --> 00:19:58,500 drugje, če ste se kdaj spraševali, če ta izjava Ponovi prihaja, prihaja od tukaj. 330 00:19:58,500 --> 00:20:04,390 Torej, če je, nasprotno, sem tip v 123foo - samo nekaj naključno zaporedje besedila - 331 00:20:04,390 --> 00:20:08,490 sscanf bo videl številko, številko, številko, f, 332 00:20:08,490 --> 00:20:16,410 in to bo dal 123 na n, da se bo dal v f c in se nato vrne 2. 333 00:20:16,410 --> 00:20:20,640 Torej imamo, samo z osnovno definicijo vedenja sscanf je, zelo preprost način - 334 00:20:20,640 --> 00:20:23,900 No, na prvi pogled zapleteno, vendar na koncu dneva precej preprost mehanizem - 335 00:20:23,900 --> 00:20:28,320 bi rekel da je int, in če je tako, je to edina stvar, ki sem našel? 336 00:20:28,320 --> 00:20:29,860 In tukaj je presledek namerno. 337 00:20:29,860 --> 00:20:34,000 Če ste prebrali dokumentacijo za sscanf, da vam pove, da če so kos prostorom 338 00:20:34,000 --> 00:20:38,810 na začetku ali na koncu, bo sscanf tudi omogoča uporabniku, iz katerega koli razloga, 339 00:20:38,810 --> 00:20:41,860 zadeti 123 preslednico in da bo zakonito. 340 00:20:41,860 --> 00:20:44,150 Ne boste vpij uporabnika samo zato, ker so hit preslednico 341 00:20:44,150 --> 00:20:48,640 na začetku ali na koncu, kar je le malo več uporabniku prijazen. 342 00:20:48,640 --> 00:20:52,300 >> Vsa vprašanja v zvezi GetInt potem? Ja. >> [Študent] Kaj pa, če si dal v znak? 343 00:20:52,300 --> 00:20:54,030 Dobro vprašanje. 344 00:20:54,030 --> 00:20:59,890 Kaj pa, če si jo vnesli v char kot f in pritisnite tipko Enter, ne da bi kdaj tipkanje 123? 345 00:20:59,890 --> 00:21:02,420 Kaj misliš, da je ravnanje te vrstice kode bi se potem lahko? 346 00:21:02,420 --> 00:21:04,730 [Neslišno študentski odziv] 347 00:21:04,730 --> 00:21:08,790 Ja, tako da lahko sscanf zajema tudi to, ker v tem primeru ne gre za zapolnitev n ali c. 348 00:21:08,790 --> 00:21:15,310 To se dogaja, namesto da se vrnete 0, v tem primeru pa sem tudi, da lov scenarij 349 00:21:15,310 --> 00:21:18,750 ker je pričakovana vrednost je 1 želim. 350 00:21:18,750 --> 00:21:22,000 Hočem samo eno in samo eno stvar je treba zapolniti. Dobro vprašanje. 351 00:21:22,000 --> 00:21:24,290 >> Drugo? V redu. 352 00:21:24,290 --> 00:21:26,250 >> Ne smemo iti skozi vse druge funkcije tukaj, 353 00:21:26,250 --> 00:21:29,500 ampak tisti, ki se zdi, da morda za preostale obresti GetString 354 00:21:29,500 --> 00:21:32,790 ker se je izkazalo, da GetFloat, GetInt, GetDouble, GetLongLong 355 00:21:32,790 --> 00:21:36,260 Vse punt veliko funkcionalnostjo na GetString. 356 00:21:36,260 --> 00:21:39,750 Torej si oglejte, kako se je izvajal tukaj. 357 00:21:39,750 --> 00:21:43,630 Tole izgleda malo kompleks, temveč ga uporablja enake osnove 358 00:21:43,630 --> 00:21:45,670 da smo začeli govoriti o zadnjem tednu. 359 00:21:45,670 --> 00:21:49,490 V GetString, ki ne prevzema nobene navedbe kot na praznino tukaj 360 00:21:49,490 --> 00:21:53,730 in vrne niz, jaz sem očitno razglasitvi niz imenovano buffer. 361 00:21:53,730 --> 00:21:56,270 Res ne vem, kaj se dogaja, da se uporabljajo za še, ampak bomo videli. 362 00:21:56,270 --> 00:21:58,390 Izgleda, da je zmogljivost privzeto 0. 363 00:21:58,390 --> 00:22:01,350 Ni povsem prepričan, kam to pelje, ne vem, kaj se dogaja n, ki se uporabljajo za še 364 00:22:01,350 --> 00:22:03,590 ampak zdaj je že malo bolj zanimivo. 365 00:22:03,590 --> 00:22:06,520 V skladu 243 izjavljamo, int, c. 366 00:22:06,520 --> 00:22:08,800 To je neke vrste neumna podrobnosti. 367 00:22:08,800 --> 00:22:15,820 Char je 8 bitov, 8 bitov lahko shranite, koliko različnih vrednosti? >> [Študent] 256. 256 >>. 368 00:22:15,820 --> 00:22:20,730 Problem je, če hočeš imeti 256 različnih ASCII znakov, ki obstajajo 369 00:22:20,730 --> 00:22:23,340 Če mislite, da nazaj - in to ni nekaj, kar na pamet. 370 00:22:23,340 --> 00:22:25,710 Ampak, če mislite, da nazaj v ta velik ASCII tabeli smo imeli pred tedni, 371 00:22:25,710 --> 00:22:30,600 je bilo v tem primeru 128 ali 256 znakov ASCII. 372 00:22:30,600 --> 00:22:32,940 Uporabili smo vse vzorce 0s in 1s up. 373 00:22:32,940 --> 00:22:36,210 To je problem, če želite, da bi bili sposobni odkriti napako 374 00:22:36,210 --> 00:22:40,190 ker če že uporabljate za vaše vrednosti 256 znakov 375 00:22:40,190 --> 00:22:43,050 nisi zares načrtovati vnaprej, ker imate zdaj nikakor ne pravim, 376 00:22:43,050 --> 00:22:46,270 to ni zakonit znakov, to pa je napačno sporočilo. 377 00:22:46,270 --> 00:22:50,270 Torej, kakšen je svet pa je, da uporabite naslednjo največjo vrednost, nekaj takega notr, 378 00:22:50,270 --> 00:22:54,720 tako da boste imeli noro število bitov, 32 za 4000000000 možnih vrednosti 379 00:22:54,720 --> 00:22:58,860 tako da lahko preprosto na koncu z bistveno 257 izmed njih, 380 00:22:58,860 --> 00:23:01,720 1, ki je nekaj posebnega pomena kot napaka. 381 00:23:01,720 --> 00:23:03,120 >> Torej, poglejmo, kako to deluje. 382 00:23:03,120 --> 00:23:07,760 V skladu 246, imam veliko while zanko, ki kliče fgetc, 383 00:23:07,760 --> 00:23:11,090 f pomeni datoteko, tako getc, nato pa stdin. 384 00:23:11,090 --> 00:23:15,520 Izkazalo se je, da je to le bolj natančen način rekel, beri vhod s tipkovnice. 385 00:23:15,520 --> 00:23:19,300 Standardni vhod pomeni, tipkovnica, standardni izhod pomeni zaslon, 386 00:23:19,300 --> 00:23:23,310 in standardna napaka, ki jih bomo videli v pset4 pomeni zaslon 387 00:23:23,310 --> 00:23:27,490 ampak poseben del zaslona, ​​tako da to ni združevali s dejanske proizvodnje 388 00:23:27,490 --> 00:23:30,750 ki ste jo nameravali natisniti. Ampak več o tem v prihodnosti. 389 00:23:30,750 --> 00:23:34,440 Torej fgetc pomeni le prebral en znak s tipkovnice in ga shranite kje? 390 00:23:34,440 --> 00:23:37,350 Shranite jo v c. 391 00:23:37,350 --> 00:23:41,360 In potem preverite, - tako da sem samo z nekaj logičnih veznikov tukaj - 392 00:23:41,360 --> 00:23:46,000 preverite, da ni enak -, \ n, tako da je uporabnik pritisnite tipko Enter, želimo ustaviti na tej točki, 393 00:23:46,000 --> 00:23:49,850 konec zanke - in smo tudi želeli preveriti za posebno stalno EOF, 394 00:23:49,850 --> 00:23:53,610 ki je, če veš, ali veš, kaj to stati? >> [Študent] na konec datoteke. >> Konec datoteke. 395 00:23:53,610 --> 00:23:56,560 To je nekako nesmiselno, ker če sem tipkanje na tipkovnici, 396 00:23:56,560 --> 00:23:58,870 pa je res ni vpleten v to sliko, 397 00:23:58,870 --> 00:24:01,150 ampak to je samo nekako splošen izraz pomeni 398 00:24:01,150 --> 00:24:04,220 da nič ne prihaja od prstov The Human je. 399 00:24:04,220 --> 00:24:06,460 EOF - konec datoteke. 400 00:24:06,460 --> 00:24:09,920 Kot prahi, če ste že kdaj udaril Nadzorna D na tipkovnici, ne da bi imeli še - 401 00:24:09,920 --> 00:24:15,230 ste zadeti Nadzorna C - Nadzor D pošlje ta posebna konstanta se imenuje znak za konec. 402 00:24:15,230 --> 00:24:19,850 Torej, zdaj imamo samo nekaj dinamično dodeljevanje pomnilnika. 403 00:24:19,850 --> 00:24:23,440 >> Torej, če (n + 1> zmogljivosti). Zdaj vam bom razložil n. 404 00:24:23,440 --> 00:24:26,100 N je le, koliko bajtov je trenutno v varovalnem, 405 00:24:26,100 --> 00:24:28,620 Niz, ki ga trenutno gradnjo od uporabnika. 406 00:24:28,620 --> 00:24:33,450 Če imate več znakov v vašem pufru, kot ga imajo zmogljivosti v pufru, 407 00:24:33,450 --> 00:24:37,410 Intuitivno, kaj moramo storiti, je, potem nameniti več zmogljivosti. 408 00:24:37,410 --> 00:24:43,330 Torej bom prelistati čez nekaj aritmetične tukaj in se osredotočiti samo na to funkcijo tukaj. 409 00:24:43,330 --> 00:24:46,070 Veš, kaj je malloc ali pa vsaj splošno znano. 410 00:24:46,070 --> 00:24:48,970 Ugani, kaj realloc ne. >> [Študent] Doda spomin. 411 00:24:48,970 --> 00:24:52,920 To ni čisto dodajanjem pomnilnika. To prerazporeja spomin, kot sledi. 412 00:24:52,920 --> 00:24:57,220 Če je še dovolj prostora ob koncu niza, da bi vam več tega pomnilnika 413 00:24:57,220 --> 00:25:00,000 kot je bilo prvotno vam, potem boste dobili, da dodatnega pomnilnika. 414 00:25:00,000 --> 00:25:03,460 Torej si lahko samo vztrajati dajanje v nizu znakov v back to back to back to back. 415 00:25:03,460 --> 00:25:05,830 Ampak, če to ni tako, ker ste čakali predolgo 416 00:25:05,830 --> 00:25:07,940 in nekaj naključno dobil plopped v spomin tam 417 00:25:07,940 --> 00:25:10,290 vendar pa je dodatno pomnilniško sem, da je v redu. 418 00:25:10,290 --> 00:25:13,100 Realloc bo naredil vse težko delo za vas, 419 00:25:13,100 --> 00:25:16,750 premakniti niz, ki ste jih prebral v tem daleč od tukaj, ga tam doli, 420 00:25:16,750 --> 00:25:19,460 in potem dal nekaj več vzletno-pristajalne steze na tej točki. 421 00:25:19,460 --> 00:25:22,550 >> Torej, zamahnil z roko, naj povem, da to, kar počne GetString 422 00:25:22,550 --> 00:25:26,330 se začenja z malo pomnilnika, morda en znak, 423 00:25:26,330 --> 00:25:30,820 in če uporabnik vnese v dveh znakov, GetString konča kliče realloc in reče: 424 00:25:30,820 --> 00:25:33,150 en znak ne bi bilo dovolj, dajte mi dva znaka. 425 00:25:33,150 --> 00:25:35,950 Potem, če ste prebrali logiki zanke, da se bo torej 426 00:25:35,950 --> 00:25:39,600 Vtipkali v 3 znake, dajte mi zdaj ne pa 2 4 znaki, 427 00:25:39,600 --> 00:25:42,320 potem mi 8, potem mi 16 in 32. 428 00:25:42,320 --> 00:25:45,000 Dejstvo, da sem podvoji zmogljivost vsakič 429 00:25:45,000 --> 00:25:48,570 pomeni, da se buffer ne bo povečevala, zato bo rast izredno hitro. 430 00:25:48,570 --> 00:25:51,380 In morda, kaj je prednost tega? 431 00:25:51,380 --> 00:25:54,600 Zakaj sem podvojitev medpomnilnik 432 00:25:54,600 --> 00:25:58,020 čeprav bi si morali samo še en znak iz tipkovnice? 433 00:25:58,020 --> 00:26:01,750 [Neslišno študentski odziv] >> Kaj je to? >> [Študent] Saj ni treba, da raste tako pogosto. 434 00:26:01,750 --> 00:26:03,300 Točno tako. Saj ni treba, da raste tako pogosto. 435 00:26:03,300 --> 00:26:05,510 In to je samo lepo od vas ste varovanje vaše stave tukaj, 436 00:26:05,510 --> 00:26:10,850 Ideja je, da ne želite, da pokličete realloc veliko, saj kaže, da je počasen. 437 00:26:10,850 --> 00:26:12,910 Vsakič, ko zaprosi za operacijski sistem za spomin, 438 00:26:12,910 --> 00:26:16,990 kot boste kmalu videli v prihodnje opredeli problem, pa kaže, da traja nekaj časa. 439 00:26:16,990 --> 00:26:20,010 Torej čim bolj zmanjšati tako veliko časa, tudi če ste zapravljaš nekaj prostora, 440 00:26:20,010 --> 00:26:21,900 kaže, da je dobra stvar. 441 00:26:21,900 --> 00:26:24,060 >> Ampak, če bomo prebrali v zadnjem delu GetString tukaj - 442 00:26:24,060 --> 00:26:27,950 in spet razumeti vsako posamezno vrstico tu ni tako pomembno danes - 443 00:26:27,950 --> 00:26:30,530 opazili, da je na koncu spet poziva malloc 444 00:26:30,530 --> 00:26:33,880 in razdeli natanko toliko bajtov, kot jo potrebuje za niz 445 00:26:33,880 --> 00:26:38,060 in nato odvrže s klicem na brezplačno preveliko rezervo 446 00:26:38,060 --> 00:26:40,080 če je dobil celo podvojila prevečkrat. 447 00:26:40,080 --> 00:26:42,730 Torej na kratko, to je, kako GetString je delal ves ta čas. 448 00:26:42,730 --> 00:26:47,060 Vse to je pa prebral en znak naenkrat spet in spet in spet, 449 00:26:47,060 --> 00:26:50,750 in vsakič, ko jo potrebuje nekaj dodatnega pomnilnika, da zahteva operacijski sistem za to 450 00:26:50,750 --> 00:26:53,670 s pozivom realloc. 451 00:26:53,670 --> 00:26:57,890 >> Kakšno vprašanje? V redu. 452 00:26:57,890 --> 00:26:59,270 >> Napad. 453 00:26:59,270 --> 00:27:04,060 Zdaj, ko razumemo napotke ali vsaj vedno bolj seznanjeni s kazalci, 454 00:27:04,060 --> 00:27:06,700 kaj menijo, kako je cel svet začne na propad 455 00:27:06,700 --> 00:27:10,030 če se ne znajdete brani pred kontradiktornem uporabnikov, 456 00:27:10,030 --> 00:27:11,850 ljudje, ki poskušajo vdreti v sistem, 457 00:27:11,850 --> 00:27:16,890 ljudje, ki poskušajo ukrasti vaše programske opreme za izogibanje nekaj registracijsko kodo 458 00:27:16,890 --> 00:27:19,090 ki bi jih sicer morali vnesti noter 459 00:27:19,090 --> 00:27:22,990 >> Oglejte si ta primer tukaj, ki je samo C kodo, ki ima funkcijo glavnega na dnu 460 00:27:22,990 --> 00:27:26,380 da pokliče funkcijo foo. In kaj je prehod na foo? 461 00:27:26,380 --> 00:27:29,680 [Študent] en argument. >> [Malan] en argument. 462 00:27:29,680 --> 00:27:33,450 Torej, argv [1], ki pomeni prvo besedo, ki si jo vnesli v ukazni vrstici 463 00:27:33,450 --> 00:27:36,360 Po a.out ali kakorkoli se imenuje program. 464 00:27:36,360 --> 00:27:41,680 Torej foo na vrhu se v char *. Ampak char * je samo, kaj? >> [Študent] niz. 465 00:27:41,680 --> 00:27:43,350 [Malan] niz, tako da ni nič novega. 466 00:27:43,350 --> 00:27:45,420 Ta niz se pa samovoljno imenuje bar. 467 00:27:45,420 --> 00:27:51,430 V skladu s tem tukaj, char c [12], v nekakšno pol-tehnične angleščine, kaj je ta linija dela? 468 00:27:51,430 --> 00:27:55,220 [Študent] array - >> Array? >> [Študent] Liki. >> Glasba. 469 00:27:55,220 --> 00:27:58,870 Daj mi niz 12 znakov. Torej bi temu lahko rekli buffer. 470 00:27:58,870 --> 00:28:02,920 To je strokovno imenujemo c, vendar varovalni pri načrtovanju programov pomeni le kup prostora 471 00:28:02,920 --> 00:28:04,800 da lahko dajo nekaj stvari noter 472 00:28:04,800 --> 00:28:07,940 Potem končno, memcpy smo ne uporabljajo prej, vendar boste verjetno lahko uganiti, kaj počne. 473 00:28:07,940 --> 00:28:10,480 To kopije pomnilnika. Kaj počne? 474 00:28:10,480 --> 00:28:19,270 To očitno kopira bar, vložek, v C, vendar le do dolžine traku. 475 00:28:19,270 --> 00:28:24,930 Ampak tam je napaka tukaj. >> [Študent] Potrebuješ sizeof karakter. >> Redu. 476 00:28:24,930 --> 00:28:30,860 Tehnično, bi morali res strlen (bar) * sizeof (char)). To je pravilno. 477 00:28:30,860 --> 00:28:33,930 Vendar pa v najslabšem primeru v tej zadevi, predpostavimo, da je that - 478 00:28:33,930 --> 00:28:35,950 Ok. Potem je tu še 2 bugs. 479 00:28:35,950 --> 00:28:39,160 Torej, sizeof (char)); 480 00:28:39,160 --> 00:28:41,290 Naj bo to malo širše. 481 00:28:41,290 --> 00:28:44,910 Torej, zdaj je še napako, ki je kaj? >> [Neslišno študentski odziv] 482 00:28:44,910 --> 00:28:46,990 Preverite, za kaj? >> [Študent] Preverite NULL. 483 00:28:46,990 --> 00:28:50,270 Mi se na splošno preverjanje za NULL, ker se slabe stvari zgodijo 484 00:28:50,270 --> 00:28:53,200 ko je kazalec NULL, ker boste morda na koncu dogaja tam, 485 00:28:53,200 --> 00:28:57,630 in si ne bi nikoli šli na NULL da ga Dereferenciranje z zvezdicami operaterja. 486 00:28:57,630 --> 00:29:01,050 Torej, to je dobro. In kaj počnemo? Logično je, da je napaka tukaj. 487 00:29:01,050 --> 00:29:04,450 [Študent] Preverite, če je argc> = do 2. 488 00:29:04,450 --> 00:29:10,550 Torej, preverite, ali je argc> = 2. Ok, tako da so tri napake v tem programu tukaj. 489 00:29:10,550 --> 00:29:16,630 Zdaj smo to preverjanje, če si dejansko vnesli v ničemer v argv [1]. Dobro. 490 00:29:16,630 --> 00:29:20,950 Torej, kaj je 3. napako? Ja. >> [Študent] C morda ne bo dovolj velika. 491 00:29:20,950 --> 00:29:23,320 Dobro. Preverili smo en scenarij. 492 00:29:23,320 --> 00:29:29,520 Mi implicitno preveriti ne kopirajte več pomnilnika, kot bi presegla dolžino bar. 493 00:29:29,520 --> 00:29:32,510 Torej, če si niz vnesli, je 10 znakov, 494 00:29:32,510 --> 00:29:36,020 to se pravi samo kopirate 10 znakov. In to je v redu. 495 00:29:36,020 --> 00:29:39,940 Toda kaj, če si jo vnesli v besedo na poziv kot 20 znakov besedo? 496 00:29:39,940 --> 00:29:44,900 To se pravi kopijo 20 znakov iz bara v kaj? 497 00:29:44,900 --> 00:29:49,750 C, sicer znan kot naš buffer, kar pomeni, da si napisal podatke 498 00:29:49,750 --> 00:29:52,540 do 8 bajtov lokacijah, ki ni v vaši lasti, 499 00:29:52,540 --> 00:29:54,870 in ne njihov lastnik v smislu, da jih nikoli ne dodelijo. 500 00:29:54,870 --> 00:30:00,370 Torej, to je tisto, kar je splošno znano kot napad buffer overflow ali napada medpomnilnika. 501 00:30:00,370 --> 00:30:05,580 In to je napad v smislu, da če uporabnik ali program, ki kliče svojo funkcijo 502 00:30:05,580 --> 00:30:10,490 to počne zlonamerno, kaj se dejansko zgodi potem dejansko lahko zelo slabo. 503 00:30:10,490 --> 00:30:12,450 >> Torej, da pogled na te slike tukaj. 504 00:30:12,450 --> 00:30:16,060 Ta slika predstavlja svoj kup pomnilnika. 505 00:30:16,060 --> 00:30:19,580 Spomnimo se, da vsakič, ko pokličete funkcijo boste dobili tale okvir na kupu 506 00:30:19,580 --> 00:30:21,520 in nato drugo in nato še in še. 507 00:30:21,520 --> 00:30:24,300 In sedaj, smo nekako odvzete kot ti pravokotniki 508 00:30:24,300 --> 00:30:26,290 bodisi na ladji ali na zaslonu tukaj. 509 00:30:26,290 --> 00:30:30,580 Ampak, če povečate na eno od teh pravokotnikov, ko pokličete funkcijo foo, 510 00:30:30,580 --> 00:30:35,880 Izkazalo se je, da je to bolj na dimnik znotraj tega okvira v tem pravokotniku 511 00:30:35,880 --> 00:30:40,060 kot samo x in y ter a in b, tako kot nismo govorili o zamenjavi. 512 00:30:40,060 --> 00:30:44,410 Izkazalo se je, da je nekaj nižji ravni podrobnosti, med njimi tudi naslov pošiljatelja. 513 00:30:44,410 --> 00:30:49,550 Tako se izkaže, ko je glavna zahteva foo, glavni obvestiti foo 514 00:30:49,550 --> 00:30:53,520 Kaj je glavni naslov v pomnilniku računalnika 515 00:30:53,520 --> 00:30:57,770 ker v nasprotnem primeru se takoj foo storiti izvršitve, kot v tem primeru tukaj, 516 00:30:57,770 --> 00:31:00,830 ko boste dosegli ta zaprt kodraste oklepaja na koncu foo, 517 00:31:00,830 --> 00:31:05,310 kako za vraga ne ve, kje je foo nadzora programa naj bi šel? 518 00:31:05,310 --> 00:31:08,970 Izkaže se, da je odgovor na to vprašanje je v tem rdečega pravokotnika tukaj. 519 00:31:08,970 --> 00:31:12,670 To predstavlja kazalec, in to je do računalnika za začasno shranjevanje 520 00:31:12,670 --> 00:31:17,030 na tako imenovani dimnik je naslov glavnega tako, da kakor hitro foo storiti izvršitve, 521 00:31:17,030 --> 00:31:21,120 Računalnik ne ve, kje in kaj postavka v glavnem za vrnitev. 522 00:31:21,120 --> 00:31:23,940 Shranjeni okvirja kazalec se nanaša prav na to. 523 00:31:23,940 --> 00:31:26,310 Char * bar tu pomeni kaj? 524 00:31:26,310 --> 00:31:31,350 Zdaj je to modra segmentnih je bla v okvir. Kaj je bar? 525 00:31:31,570 --> 00:31:35,010 Bar je samo argument funkcije foo. 526 00:31:35,010 --> 00:31:37,500 Torej, zdaj smo spet v nekakšno prepoznavno sliko. 527 00:31:37,500 --> 00:31:39,850 Obstaja več stvari in več motenj na zaslonu, 528 00:31:39,850 --> 00:31:43,380 vendar ta svetlo modra odsek samo tisto, kar smo se opira na tabli 529 00:31:43,380 --> 00:31:45,790 nekaj podobnega zamenjave. To je okvir za foo. 530 00:31:45,790 --> 00:31:51,490 In edina stvar, v njej zdaj je bar, ki je ta parameter. 531 00:31:51,490 --> 00:31:55,220 Vendar pa je treba, kaj je v sklad v skladu s tem kodeksom tukaj? 532 00:31:55,220 --> 00:31:57,760 [Študent] char c [12]. >> [Malan] char c [12]. 533 00:31:57,760 --> 00:32:02,810 Prav tako bi morali videti 12 kvadratov pomnilnika, dodeljenih spremenljivko imenovano c, 534 00:32:02,810 --> 00:32:04,970 in res imamo, da na zaslonu. 535 00:32:04,970 --> 00:32:08,480 Samem vrhu je c [0], nato pa avtor tega diagrama 536 00:32:08,480 --> 00:32:11,850 ni motilo pripravo vseh trgih, vendar so v resnici obstaja 12 537 00:32:11,850 --> 00:32:16,590 ker če pogledaš na spodnji desni, c [11], če šteješ od 0, je 12. tak bajt. 538 00:32:16,590 --> 00:32:18,400 Ampak tukaj je problem. 539 00:32:18,400 --> 00:32:22,390 V katero smer se c raste? 540 00:32:22,390 --> 00:32:27,080 Nekako od zgoraj navzdol, če se začne na vrhu in raste do dna. 541 00:32:27,080 --> 00:32:30,110 To ne izgleda kot smo odšli sami veliko vzletno-pristajalne steze tu sploh. 542 00:32:30,110 --> 00:32:32,090 Mi smo nekako sebe naslikal v kotu, 543 00:32:32,090 --> 00:32:36,940 in c [11] je prav proti baru, ki je vse do pred Shranjeni Frame kazalcem 544 00:32:36,940 --> 00:32:39,960 , ki je prav proti povratni naslov. Ni več prostora. 545 00:32:39,960 --> 00:32:42,810 Torej, kaj je potem posledice, če zajebeš 546 00:32:42,810 --> 00:32:46,500 in poskusite branje 20 bajtov v 12-Bajt? 547 00:32:46,500 --> 00:32:50,060 Kadar so ti dodatni 8 bajtov šli? >> [Študent] Inside - 548 00:32:50,060 --> 00:32:53,200 Znotraj vsega drugega, nekaj kar je zelo pomembno. 549 00:32:53,200 --> 00:32:57,260 In najbolj pomembna stvar, lahko je rdeča škatla tam Povratni naslov, 550 00:32:57,260 --> 00:33:03,560 Domnevam, da zato, ker pomotoma ali adversarially prepisati tiste 4 bajte 551 00:33:03,560 --> 00:33:07,260 da kazalec naslov, ne samo s smetmi vendar z nekaterimi 552 00:33:07,260 --> 00:33:09,810 se zgodi, da predstavljajo dejanskega naslova v pomnilniku. 553 00:33:09,810 --> 00:33:13,880 Kaj posledice, logično? >> [Študent] Položaj se bo vrnil na drugo mesto. 554 00:33:13,880 --> 00:33:15,250 Točno tako. 555 00:33:15,250 --> 00:33:19,170 Ko se vrne foo in zadetki, ki brace kodrasti, program bo nadaljevanje 556 00:33:19,170 --> 00:33:25,060 ne bo vrnil na glavno, da se dogaja, da se vrnete na kateri koli naslov v tem rdečem polju. 557 00:33:25,060 --> 00:33:28,600 >> V primeru izognilo programske opreme registracije 558 00:33:28,600 --> 00:33:32,260 Kaj pa, če je naslov, ki se je vrnil, je funkcija, ki dobi navadno imenujemo 559 00:33:32,260 --> 00:33:35,690 Ko boste plačali za programsko opremo in vnesejo svojo registracijsko kodo? 560 00:33:35,690 --> 00:33:39,870 Lahko razvrstite trik računalnik v ne dogaja tukaj, temveč gre tukaj. 561 00:33:39,870 --> 00:33:45,100 Ali pa, če si res pameten, lahko nasprotnik dejansko vnesite na tipkovnici, na primer, 562 00:33:45,100 --> 00:33:50,690 Ne dejansko besedo, ne pa 20 znakov, ampak predvidevam mu dejansko vrste v 563 00:33:50,690 --> 00:33:52,770 nekateri znaki, ki predstavljajo kodo. 564 00:33:52,770 --> 00:33:55,320 In to ne bo C kodo, da se dejansko dogaja, da se znaki 565 00:33:55,320 --> 00:33:59,290 ki predstavljajo binarno kodo stroj, 0s in 1s. 566 00:33:59,290 --> 00:34:01,290 Recimo, da si dovolj pameten, da bi to dosegli, 567 00:34:01,290 --> 00:34:06,500 nekako prilepite v GetString hitro nekaj, kar je v bistvu sestavljen koda 568 00:34:06,500 --> 00:34:09,980 in zadnja 4 bajte prepiše tega povratni naslov. 569 00:34:09,980 --> 00:34:13,360 In kaj naj bi to naslov vhod storiti? 570 00:34:13,360 --> 00:34:18,630 To dejansko shrani v tej rdeči pravokotnik naslov prvega bajt pufra. 571 00:34:18,630 --> 00:34:23,070 Torej moraš biti zelo pameten, in to je veliko poskusov in napak za slabe ljudi tam zunaj, 572 00:34:23,070 --> 00:34:25,639 če pa lahko ugotovimo, kako velik je ta varovalni 573 00:34:25,639 --> 00:34:28,820 tako, da je v zadnjih nekaj bajtov na vhodu, ki jih posredujete programa 574 00:34:28,820 --> 00:34:33,540 zgodi, da se enakovredno naslovu začetku vašega pufra, lahko to storite. 575 00:34:33,540 --> 00:34:39,320 Če rečemo, normalno zdravo in \ 0, to je tisto, kar konča v pufru. 576 00:34:39,320 --> 00:34:44,420 Ampak, če smo bolj pameten in se zapolni to rezervo s tem, kar bomo generično klic napad kodo - 577 00:34:44,420 --> 00:34:48,860 AAA, napad, napad, napad - če je to nekaj, kar počne nekaj slabega, 578 00:34:48,860 --> 00:34:51,820 Kaj se zgodi, če si res pameten, lahko to storijo. 579 00:34:51,820 --> 00:34:58,610 V rdečem polju tu je zaporedje številk - 80, C0, 35, 08. 580 00:34:58,610 --> 00:35:01,610 Obvestilo, da se ujema s številko, ki je tu gor. 581 00:35:01,610 --> 00:35:04,430 To je v obratnem vrstnem redu, a več o tem kdaj drugič. 582 00:35:04,430 --> 00:35:08,140 Obvestilo, da je to vaš naslov je bil namerno spremenjen 583 00:35:08,140 --> 00:35:12,020 na enak naslov tukaj, ne naslov glavnega. 584 00:35:12,020 --> 00:35:17,500 Torej, če je slab fant je super pametna, on ali ona se dogaja, da so v tem napadu kodo 585 00:35:17,500 --> 00:35:20,930 nekaj podobnega izbrisati vse datoteke uporabnika ali kopiranje gesel 586 00:35:20,930 --> 00:35:24,680 ali ustvarite uporabniški račun, da bom lahko nato prijavite v - nič. 587 00:35:24,680 --> 00:35:26,950 >> In to je tako nevarnost in moč C. 588 00:35:26,950 --> 00:35:29,840 Ker imate dostop do pomnilnika preko kazalcev 589 00:35:29,840 --> 00:35:32,520 in lahko zato napišete karkoli želite v spomin računalnika, 590 00:35:32,520 --> 00:35:35,080 si lahko računalnik storiti vse, kar hočeš 591 00:35:35,080 --> 00:35:39,550 samo s tem, ko je skok okoli v svojem pomnilnika. 592 00:35:39,550 --> 00:35:44,650 In tako se na ta dan, tako da veliko programov in toliko spletnih strani, ki so ogroženi 593 00:35:44,650 --> 00:35:46,200 omejijo na ljudi, ki izkoriščajo to. 594 00:35:46,200 --> 00:35:50,760 In morda to zdi super prefinjen napad, vendar ne vedno začne na tak način. 595 00:35:50,760 --> 00:35:53,560 Dejstvo je, da tisto, kar slabi ljudje navadno storiti, je, 596 00:35:53,560 --> 00:35:58,200 ali je to program v ukazni vrstici ali program, GUI, ali spletne strani, 597 00:35:58,200 --> 00:35:59,940 ste pravkar začel zagotavljati neumnosti. 598 00:35:59,940 --> 00:36:03,980 Vnesete v res velikem besedo v iskalno polje in pritisnite tipko Enter, 599 00:36:03,980 --> 00:36:05,780 in počakate, da vidim, če je spletna stran sesuje 600 00:36:05,780 --> 00:36:09,990 ali pa čakati, da vidim, če je program kaže nekaj napaki 601 00:36:09,990 --> 00:36:14,330 ker če imate srečo, kot slab človek in si zagotoviti nekaj norega prispevek 602 00:36:14,330 --> 00:36:18,980 da zruši program, potem to pomeni programer ni predvidel vašo slabo vedenje, 603 00:36:18,980 --> 00:36:23,630 kar pomeni, da lahko verjetno z dovolj truda, dovolj poskusov in napak, 604 00:36:23,630 --> 00:36:26,650 ugotoviti, kako plače bolj natančen napad. 605 00:36:26,650 --> 00:36:31,410 Torej toliko del varnosti ni samo preprečevanje te napade v celoti 606 00:36:31,410 --> 00:36:34,100 ampak jih zazna in dejansko si ogleduje dnevniki 607 00:36:34,100 --> 00:36:36,780 in videli, kaj so ljudje nori vhodi vnesli v vašo spletno stran, 608 00:36:36,780 --> 00:36:38,960 kaj iskalni pojmi so ljudje vnesli v vašo spletno stran 609 00:36:38,960 --> 00:36:42,870 v upanju, poplavljenih nekaj pomnilnika. 610 00:36:42,870 --> 00:36:45,500 In to vse izvira na preprostih osnove, kar je matrika 611 00:36:45,500 --> 00:36:49,080 in kaj to pomeni za dodeljevanje in uporabo spomin. 612 00:36:49,080 --> 00:36:51,710 >> V povezavi s tem pa tudi to. 613 00:36:51,710 --> 00:36:54,280 Naj samo pogled notranjost trdega diska še enkrat. 614 00:36:54,280 --> 00:36:58,440 Spomnite iz tednu ali dveh nazaj, ko povlečete datoteke v koš ali koša, 615 00:36:58,440 --> 00:37:03,710 kaj se zgodi? >> [Študent] Nič. >> Popolnoma nič, kajne? 616 00:37:03,710 --> 00:37:05,740 Sčasoma, če zmanjkovati prostora na disku, 617 00:37:05,740 --> 00:37:08,190 Windows ali Mac OS bo začelo brisanje datotek za vas. 618 00:37:08,190 --> 00:37:10,390 Ampak, če vlečete nekaj tam, da sploh ni varno. 619 00:37:10,390 --> 00:37:13,800 Vse vaš sostanovalec ali prijatelja ali družinskega člana mora storiti, je dvojni klik, in voila, 620 00:37:13,800 --> 00:37:16,310 tam je vse skicirana datoteke, ki jih poskušali izbrisati. 621 00:37:16,310 --> 00:37:19,590 Večina od nas vsaj vedeli, da imate na desni klik ali klik Nadzor 622 00:37:19,590 --> 00:37:22,310 in prazne smeti ali kaj podobnega. 623 00:37:22,310 --> 00:37:25,000 Toda tudi potem to ni čisto trik 624 00:37:25,000 --> 00:37:28,010 ker tisto, kar se zgodi, ko imate datoteko na trdem disku 625 00:37:28,010 --> 00:37:32,770 , ki predstavlja nekaj Wordov dokument ali nekaj JPEG, in to je vaš trdi disk, 626 00:37:32,770 --> 00:37:35,350 in recimo, da to pomeni, da je tukaj IVer datoteko 627 00:37:35,350 --> 00:37:38,390 in je bila sestavljena iz cel kup 0s in 1s. 628 00:37:38,390 --> 00:37:42,470 Kaj se zgodi, če ne boste le povlecite datoteko v smeti, ali pa lahko Koš 629 00:37:42,470 --> 00:37:48,020 ampak jo izpraznite? Nekako nič. 630 00:37:48,020 --> 00:37:49,640 To ni popolnoma nič zdaj. 631 00:37:49,640 --> 00:37:54,290 Zdaj je to samo zato, ker nič ne zgodi nekaj malega v obliki te tabele. 632 00:37:54,290 --> 00:37:58,370 Torej je neke vrste podatkovne baze ali tabele znotraj pomnilnika računalnika 633 00:37:58,370 --> 00:38:03,850 da je v bistvu en stolpec za datoteke imen in en stolpec za datoteke 'mesto, 634 00:38:03,850 --> 00:38:07,720 če bi bilo to mesto 123, samo naključno število. 635 00:38:07,720 --> 00:38:14,560 Tako bi imeli nekaj podobnega x.jpeg in lokacijo 123. 636 00:38:14,560 --> 00:38:18,800 Kaj se zgodi potem, ko ste dejansko izprazniti smeti? 637 00:38:18,800 --> 00:38:20,330 Ta izgine. 638 00:38:20,330 --> 00:38:23,610 Toda kaj ne izgine, je 0 in 1s. 639 00:38:23,610 --> 00:38:26,270 >> Torej, kaj je potem povezava pset4? 640 00:38:26,270 --> 00:38:31,240 No, z pset4, samo zato, ker smo pomotoma izbrisal Compact Flash kartice 641 00:38:31,240 --> 00:38:35,750 , ki je imel vse od teh fotografij ali pa samo zato, ker je zaradi smole postal poškodovan 642 00:38:35,750 --> 00:38:38,000 ne pomeni, da 0s in 1s niso vedno tam. 643 00:38:38,000 --> 00:38:40,410 Morda so nekateri od njih izgubljena zaradi dobil nekaj pokvarjenega 644 00:38:40,410 --> 00:38:43,320 v smislu, da je postala del 0s 1s in 0s 1s postal. 645 00:38:43,320 --> 00:38:47,240 Slabe stvari se lahko zgodi zaradi Otroški voziček programske opreme ali napako strojne opreme. 646 00:38:47,240 --> 00:38:50,370 Toda mnogi od teh bitov, morda celo 100% od njih so še vedno tam. 647 00:38:50,370 --> 00:38:55,050 To je samo, da je računalnik ali fotoaparat ne ve, kje JPEG1 vpis 648 00:38:55,050 --> 00:38:56,910 in če JPEG2 začelo. 649 00:38:56,910 --> 00:39:01,070 Ampak, če ste, programer, da se z malo zdrava pamet, če ti JPEG so 650 00:39:01,070 --> 00:39:06,010 ali kaj so izgledali tako da lahko analizira 0s in 1s in reči JPEG, JPEG, 651 00:39:06,010 --> 00:39:09,440 lahko napišete program z bistvu le za ali while zanko 652 00:39:09,440 --> 00:39:12,820 da povrne vsak izmed teh datotek. 653 00:39:12,820 --> 00:39:16,030 Torej nauk pa je, da začnete varno brisanje datotek 654 00:39:16,030 --> 00:39:18,340 če želite, da bi se temu izognili v celoti. Da. 655 00:39:18,340 --> 00:39:21,010 >> [Študent] Kako to, da piše na računalniku 656 00:39:21,010 --> 00:39:23,550 da imate več pomnilnika, kot si prej? 657 00:39:23,550 --> 00:39:27,820 Imajo več pomnilnika, kot si prej - >> [študentski] Več prostega pomnilnika. 658 00:39:27,820 --> 00:39:29,630 Oh. Dobro vprašanje. 659 00:39:29,630 --> 00:39:32,360 Torej, zakaj potem po praznjenju koša ne računalnik vam povem, 660 00:39:32,360 --> 00:39:34,910 da imate več prostora, kot si prej? 661 00:39:34,910 --> 00:39:36,770 Na kratko, ker laže. 662 00:39:36,770 --> 00:39:40,740 Bolj tehnično, imate več prostora, ker zdaj ste rekli 663 00:39:40,740 --> 00:39:43,680 lahko dajo druge stvari, kjer je datoteka nekoč bil. 664 00:39:43,680 --> 00:39:45,450 Toda to ne pomeni bitov odhajam 665 00:39:45,450 --> 00:39:48,590 in da ne pomeni bitov se spremeni v vseh 0s, na primer, 666 00:39:48,590 --> 00:39:50,150 za vašo zaščito. 667 00:39:50,150 --> 00:39:54,640 Torej v nasprotju s tem, če si varno brisanje datotek ali fizično uničiti napravo 668 00:39:54,640 --> 00:39:57,300 je to res edini način, včasih okoli tega. 669 00:39:57,300 --> 00:40:02,020 >> Torej, zakaj ne gremo na ta pol strašno note, mi pa vas bomo videli v ponedeljek. 670 00:40:02,020 --> 00:40:07,000 [Aplavz] 671 00:40:07,780 --> 00:40:10,000 >> [CS50.TV]