1 00:00:00,000 --> 00:00:02,760 [Powered by Google Translate] [VIKA 5] 2 00:00:02,760 --> 00:00:04,760 [David J. Malan, Harvard University] 3 00:00:04,760 --> 00:00:11,990 [Þetta er CS50.] [CS50.TV] 4 00:00:11,990 --> 00:00:17,780 [Kona] hann er að ljúga, um það, ég veit ekki. 5 00:00:17,780 --> 00:00:20,300 [Karl] Svo hvað vitum við? 6 00:00:20,300 --> 00:00:24,120 [Kona] Það á 9:15, Ray Santoya var í hraðbanka. 7 00:00:24,120 --> 00:00:27,420 [Karl] Svo spurningin er, hvað var hann að gera á 9:16? 8 00:00:27,420 --> 00:00:29,980 [Kona] skjóta 9 mm á eitthvað. 9 00:00:29,980 --> 00:00:31,900 Kannski sá hann leyniskytta. 10 00:00:31,900 --> 00:00:34,000 [Karl] Eða hann var að vinna með honum. 11 00:00:34,000 --> 00:00:36,330 [Kona] Bíddu. Fara aftur um eitt. 12 00:00:36,330 --> 00:00:38,330 [Karl] Hvað sérðu? 13 00:00:38,330 --> 00:00:44,520 [♫ spennandi tónlist ♫] 14 00:00:44,520 --> 00:00:48,320 [Kona] Koma andlit hans upp. Full skjár. 15 00:00:48,320 --> 00:00:51,230 [Karl] Gleraugun hans. >> Að það er spegilmynd. 16 00:00:51,230 --> 00:01:00,810 [♫ spennandi tónlist ♫] 17 00:01:00,810 --> 00:01:03,580 [Karl] Það er baseball lið í Nuevita er. Það er merki þeirra. 18 00:01:03,580 --> 00:01:07,790 [Kona] Og hann er að tala við hver er þreytandi að jakka. 19 00:01:07,790 --> 00:01:13,730 >> [David Malan] Svo er þetta CS50 viku 5, og í dag við eyðileggja smá sjónvarp og bíómynd fyrir þig. 20 00:01:13,730 --> 00:01:16,170 Svo þegar þú ert að horfa á sýningu eins og þessa hér, 21 00:01:16,170 --> 00:01:19,910 og lögguna segja "Getur þú þrífa það upp?" eða "Auka" 22 00:01:19,910 --> 00:01:21,900 það er engin auka í hinum raunverulega heimi. 23 00:01:21,900 --> 00:01:25,220 Í raun, það sem þú færð í raun er svolítið eitthvað eins og this. 24 00:01:25,220 --> 00:01:27,570 Ég hef dregið upp einn starfsmanna myndir af síðunni. 25 00:01:27,570 --> 00:01:30,980 Þetta er forrit sem heitir Photoshop. Þetta er 1 af 2 Bowdens, 26 00:01:30,980 --> 00:01:36,300 1 af 3 Bowdens raun, í dag, vegna þess að við höfum Frú Bowden hér eins og heilbrigður, með Rob og Paul. 27 00:01:36,300 --> 00:01:41,950 En hér er Rob á skjánum, og ef við zoom í á þeirri glint hann alltaf verið í augum hans, 28 00:01:41,950 --> 00:01:47,600 það sem þú sérð í raun er að það sem þú sérð er það sem þú færð. 29 00:01:47,600 --> 00:01:51,690 Þetta er "auka", svo "CSI" hafa það svolítið rangt. 30 00:01:51,690 --> 00:01:55,190 Það er eitt annað myndband, ef við getum tekið á "CSI" bara svolítið lengur. 31 00:01:55,190 --> 00:01:58,500 Þessi er ágætur setning að kveða héðan ef þú vilt 32 00:01:58,500 --> 00:02:10,280 trausta tækni með vinum þínum þegar í raun, þú ert að segja nákvæmlega ekkert. 33 00:02:10,280 --> 00:02:12,970 >> [Karl] Fyrir vikur Ég hef verið að rannsaka Cabby morð Killer 34 00:02:12,970 --> 00:02:15,360 með ákveðnum þjást hrifningu. 35 00:02:15,360 --> 00:02:17,160 [Kona # 1] Þetta er í rauntíma. 36 00:02:17,160 --> 00:02:22,930 [Kona # 2] Ég mun búa til GUI viðmótið að nota Visual Basic, sjá hvort ég get rakið IP-tölu. 37 00:02:22,930 --> 00:02:29,570 >> [Malan] Svo hljóð út af sync hliðar, búa til GUI tengi með Visual Basic 38 00:02:29,570 --> 00:02:31,820 til að fylgjast með IP-tölu er lokið bull. 39 00:02:31,820 --> 00:02:33,840 Þessa dagana þú vilt ekki nota Visual Basic, 40 00:02:33,840 --> 00:02:38,920 það er engin þörf fyrir GUI, og IP tölu var tæknilega rétt orð. 41 00:02:38,920 --> 00:02:41,730 Svo að hafa auga út fyrir þetta, og einn af mínum uppáhalds: 42 00:02:41,730 --> 00:02:45,070 Þessi 'a lítill fleiri Bogagöng, þar sem þú þarft að vita með annað tungumál. 43 00:02:45,070 --> 00:02:47,860 Það er tungumál sem kallast Objective-C, sem er superset C. 44 00:02:47,860 --> 00:02:51,960 Sem þýðir að c það er auk sumir viðbótar-lögun, þar á meðal hlutbundin forritun. 45 00:02:51,960 --> 00:02:55,070 Og þetta er mál sem Apple hefur útbreiðslu um IOS forritun. 46 00:02:55,070 --> 00:02:58,760 Og svo hér er myndband frá mismunandi sýna að öllu leyti, frá "Numbers" 47 00:02:58,760 --> 00:03:02,450 að ef þú lítur í raun náið TiVo og gera hlé á réttum tíma, 48 00:03:02,450 --> 00:03:07,700 þú munt sjá að það sem þeir eru að leita að er ekki alveg það sem verið er að lýsa. 49 00:03:07,700 --> 00:03:11,170 Og láta mig reyna mismunandi hljóð tengi hér og sjá hvort við getum ekki 50 00:03:11,170 --> 00:03:13,780 halda hljóð í sync í þetta sinn. 51 00:03:13,780 --> 00:03:20,530 Ég gefa þér "Numbers". 52 00:03:20,530 --> 00:03:23,240 >> [Man # 1] Það er 32-bita IPv4 vistfang. 53 00:03:23,240 --> 00:03:38,930 [Man # 2] IP, það er á netinu. >> Persónulegur net. Það er persónulegur net Anita er. 54 00:03:38,930 --> 00:03:43,810 [Malan] lagi. Þetta er Objective-C, og það er fyrir áætlun litarefni sumir krakki, 55 00:03:43,810 --> 00:03:51,140 eins og þú getur kannski álykta af nafni breytu þar. 56 00:03:51,140 --> 00:03:54,410 Þannig að þá var "Numbers". Svo í dag og í þessari viku við að kynna 57 00:03:54,410 --> 00:03:57,740 smá heim réttar og samhengi í vandamál þess vegna. 58 00:03:57,740 --> 00:04:00,590 Í dag verður stytt fyrirlestur því að það er sérstakur atburður hér 59 00:04:00,590 --> 00:04:05,530 síðar, þannig að við munum taka gægjast, og stríða bæði nemendur og foreldra jafnt dag 60 00:04:05,530 --> 00:04:07,420 með sumir af þeim hlutum sem eru á sjóndeildarhringnum. 61 00:04:07,420 --> 00:04:12,240 Meðal þeirra, sem í mánudagur, verður þú að hafa nokkra bekkjarfélaga. 62 00:04:12,240 --> 00:04:16,050 EDX, Harvard og MITs nýr online frumkvæði að opna courseware 63 00:04:16,050 --> 00:04:19,120 og fleiri, er stokkunum á háskólasvæðinu Harvard er á mánudaginn. 64 00:04:19,120 --> 00:04:21,490 Sem þýðir að koma Mánudagur þú þarft - eins og á síðasta telja, 65 00:04:21,490 --> 00:04:26,210 86.000 fleiri bekkjarfélagar verða eftir með fyrirlestrum CS50 er 66 00:04:26,210 --> 00:04:29,170 og köflum og walkthroughs og vandamál setur. 67 00:04:29,170 --> 00:04:32,350 Og sem hluti af þessu, verður þú að verða aðilar að vígslu flokki 68 00:04:32,350 --> 00:04:35,090 CS50 og nú CS50x. 69 00:04:35,090 --> 00:04:39,310 >> Sem hluti af þessu, nú, átta sig á að það verði sumir upsides eins og heilbrigður. 70 00:04:39,310 --> 00:04:43,790 Til að fá tilbúinn fyrir það, að miklum fjölda nemenda, 71 00:04:43,790 --> 00:04:47,180 nægja að segja að jafnvel þó að við höfum 108 TFS og CAS, 72 00:04:47,180 --> 00:04:50,790 ekki alveg besta nemandi / kennara hlutfall þegar við högg 80.000 aðra nemendur. 73 00:04:50,790 --> 00:04:52,850 Þannig að við erum ekki að fara að flokka svo mörg vandamál setur handvirkt. 74 00:04:52,850 --> 00:04:55,920 Þannig kynnt í þessari viku í vandamál setja verður CS50 Athuga, 75 00:04:55,920 --> 00:04:58,450 sem er að fara til vera a stjórn lína gagnsemi innan tækið 76 00:04:58,450 --> 00:05:01,200 sem þú munt fá þegar þú uppfærir hann seinna um helgina, 77 00:05:01,200 --> 00:05:03,200 og þú munt vera fær til að keyra skipun, stöðva 50, 78 00:05:03,200 --> 00:05:06,500 eigin pset þinn, og þú munt fá sumir endurgjöf um hvort forrit er 79 00:05:06,500 --> 00:05:11,160 rétt eða rangt í samræmi við ýmsar upplýsingar hönnun sem við höfum veitt. 80 00:05:11,160 --> 00:05:13,580 Svo meira um það og setja vandamálið forskrift og 81 00:05:13,580 --> 00:05:17,240 á CS50x bekkjarfélagar verður að nota þetta eins og heilbrigður. 82 00:05:17,240 --> 00:05:19,230 >> Svo er vandamálið sett 4 allt um réttar. 83 00:05:19,230 --> 00:05:21,940 Og þetta verk var innblásið af einhverjum alvöru efni, 84 00:05:21,940 --> 00:05:24,620 þar þegar ég var í framhaldsnámi skólanum interned ég um stund með 85 00:05:24,620 --> 00:05:28,650 Embætti Middlesex County héraðsdómi gera réttar vinna 86 00:05:28,650 --> 00:05:31,650 með leiða réttar rannsakandi þeirra, og hvað þetta var 87 00:05:31,650 --> 00:05:35,260 er, ég held að ég nefndi fortíð fáir viku, er massi lögreglu ríki eða öðrum 88 00:05:35,260 --> 00:05:39,000 myndi koma, myndu þeir falla burt hluti eins og harða diska og geisladiska og disklingadrifið 89 00:05:39,000 --> 00:05:42,340 og þess háttar, og svo markmið réttar skrifstofu var að kanna hvort 90 00:05:42,340 --> 00:05:44,600 það var eða var ekki merki um einhvers konar. 91 00:05:44,600 --> 00:05:48,010 Þetta var sérstök Rannsóknir Unit, þannig að það var hvít-kraga glæpastarfsemi, 92 00:05:48,010 --> 00:05:52,350 það var meiri áhyggjur konar glæpi, 93 00:05:52,350 --> 00:05:55,990 eitthvað sem felur í sér einhvers konar stafræna miðla, kemur í ljós að ekki margir 94 00:05:55,990 --> 00:05:59,370 skrifa tölvupóst segja "ég gerði það." 95 00:05:59,370 --> 00:06:03,290 Svo oft þessar réttar leit ekki snúa upp allt sem mikinn ávöxt, 96 00:06:03,290 --> 00:06:05,850 en stundum fólk myndi skrifa slík bréf. 97 00:06:05,850 --> 00:06:08,490 Svo stundum var viðleitni verðlaun. 98 00:06:08,490 --> 00:06:14,420 >> En til þess að leiða allt til þessa réttar pset, munum við kynna í pset 4 smá grafík. 99 00:06:14,420 --> 00:06:18,260 Svo þú taka sennilega þetta sem sjálfsagðan hlut, JPEG, GIF og eins þessa dagana, 100 00:06:18,260 --> 00:06:21,640 en ef þér finnst virkilega um það, mynd, líkt andlit Rob er, 101 00:06:21,640 --> 00:06:24,430 gæti verið fyrirmynd sem röð af punktum, eða punktar. 102 00:06:24,430 --> 00:06:26,680 Nú, í að ræða andlit Rob er, það er alls konar litum, 103 00:06:26,680 --> 00:06:29,940 og við byrjuðum að sjá einstaka punkta, annan hátt þekktur sem punkta, 104 00:06:29,940 --> 00:06:31,610 þegar við byrjuðum að þysja inn 105 00:06:31,610 --> 00:06:35,590 En ef við einfalda heiminn aðeins, og bara segja að þetta hér er Rob 106 00:06:35,590 --> 00:06:40,560 í svörtu og hvítu, vel, til að tákna svart og hvítt að við getum bara notað tvöfaldur. 107 00:06:40,560 --> 00:06:44,960 Og ef við ætlum að nota tvöfaldur, 1 eða 0, getum við tjáð þessa sömu mynd 108 00:06:44,960 --> 00:06:51,970 af brosandi andliti Rob er með þessu mynstri bita: 11000011 táknar 109 00:06:51,970 --> 00:06:55,160 hvítt, hvítt, svart, svart, svart, svart, hvítt hvítt. 110 00:06:55,160 --> 00:06:59,290 Og svo er það ekki mikið stökk, þá að byrja að tala um litríka ljósmyndum. 111 00:06:59,290 --> 00:07:01,920 Hlutir sem þú vilt sjá á Facebook eða fara með stafræna myndavél, 112 00:07:01,920 --> 00:07:04,730 En vissulega, þegar það kemur að litum, þú þarft fleiri bita. 113 00:07:04,730 --> 00:07:08,470 Og mjög algengt í heimi ljósmynda er að nota 1-bita lit, 114 00:07:08,470 --> 00:07:12,730 eins og þetta bendir til, en 24-bita lit, þar sem þú færð í raun milljónir litum. 115 00:07:12,730 --> 00:07:15,430 Svo eins og í tilfelli þegar við aðdregna í á auga Rob er, 116 00:07:15,430 --> 00:07:19,270 það var einhver fjöldi af milljón mismunandi litríka möguleika. 117 00:07:19,270 --> 00:07:22,260 >> Þannig að við munum kynna þetta í setja vandamál 4 eins og í walkthrough, 118 00:07:22,260 --> 00:07:27,050 sem verður í dag kl 03:30 í stað venjulega 2:30 vegna fyrirlestur Föstudagur er hér. 119 00:07:27,050 --> 00:07:29,930 En vídeó vilja vera á netinu, eins og venjulega, á morgun. 120 00:07:29,930 --> 00:07:31,880 Við munum einnig kynna þér annað skráarsnið. 121 00:07:31,880 --> 00:07:34,150 Þannig að þetta er vísvitandi ætlað að líta ógnvekjandi í fyrstu, 122 00:07:34,150 --> 00:07:38,980 en þetta er bara einhver skjöl fyrir C strúktúr. 123 00:07:38,980 --> 00:07:42,280 Það kemur í ljós að Microsoft, árum, hjálpaði vinsælan þetta snið, 124 00:07:42,280 --> 00:07:46,630 kallað punktamynd skrá snið, BMP, og þetta var frábær-einfalt, 125 00:07:46,630 --> 00:07:50,390 litríka grafísku skráarsnið sem var notað fyrir alveg sumir tími 126 00:07:50,390 --> 00:07:53,640 og stundum enn fyrir veggfóður á skjáborð. 127 00:07:53,640 --> 00:07:57,410 Ef þú heldur aftur til Windows XP og Rolling Hills og blár himinn, 128 00:07:57,410 --> 00:08:00,660 það var yfirleitt BMP eða punktamynd ímynd og bitmaps 129 00:08:00,660 --> 00:08:03,340 er gaman fyrir okkur vegna þess að þeir hafa a hluti fleiri flókið. 130 00:08:03,340 --> 00:08:05,640 Það er ekki alveg eins einfalt og þetta net af er 0 og 1 er; 131 00:08:05,640 --> 00:08:10,680 staðinn, þú hluti eins og haus í upphafi skrá. 132 00:08:10,680 --> 00:08:15,520 Svo í öðrum orðum, inni. BMP skrá er a heild búnt af er 0 og 1 er, 133 00:08:15,520 --> 00:08:18,070 en það er einhver viðbótar 0 og 1 er þarna. 134 00:08:18,070 --> 00:08:21,450 Og það kemur í ljós að það sem við höfum líklega tekið sem sjálfsögðum hlut í mörg ár, 135 00:08:21,450 --> 00:08:27,040 skrá snið eins. læknir eða. XLS eða. mp3 eða. mp4, 136 00:08:27,040 --> 00:08:29,910 hvað skrá snið sem þú ert kunnug. 137 00:08:29,910 --> 00:08:31,900 Jæja, hvað þýðir það jafnvel að vera skráarsnið? 138 00:08:31,900 --> 00:08:35,740 Þar í lok dags, hafa allar þessar skrár sem við notum bara 0 og er 1 139 00:08:35,740 --> 00:08:39,950 og kannski þeir 0 og er 1 tákna a, b, c, í ASCII eða þess háttar, 140 00:08:39,950 --> 00:08:42,030 en í lok dagsins, það er bara er 0 og 1 er. 141 00:08:42,030 --> 00:08:45,300 >> Svo menn bara stundum ákveðið að búa til nýtt skráarsnið 142 00:08:45,300 --> 00:08:49,420 þar sem þeir staðla hvaða mynstur bita mun í raun þýða. 143 00:08:49,420 --> 00:08:52,790 Og í þessu tilfelli hér, fólkinu sem hannaði punktamynd skrá snið 144 00:08:52,790 --> 00:08:58,260 sagði að við fyrstu bæti í punktamynd skrá, sem táknuð með Offset 0, þar 145 00:08:58,260 --> 00:09:02,320 það er að fara til vera sumir cryptically heitir breytilegum heitir bfType, 146 00:09:02,320 --> 00:09:06,510 sem stendur bara fyrir punktamynd skrá tegund, hvaða tegund af punktamynd skrá þetta. 147 00:09:06,510 --> 00:09:10,780 Þú getur ætlað, kannski frá annarri röð sem vega upp á móti 2, bæti númer 2, 148 00:09:10,780 --> 00:09:15,980 hefur mynstur er 0 og er 1 sem sýnir hvað? 149 00:09:15,980 --> 00:09:18,320 Stærð eitthvað, og það fer þaðan. 150 00:09:18,320 --> 00:09:20,660 Svo setja vandamál 4, verður þú að vera gengið í gegnum sumir af þessum hlutum. 151 00:09:20,660 --> 00:09:24,480 >> Við munum ekki enda umhyggju um þau öll, en eftir það fer að áhugavert 152 00:09:24,480 --> 00:09:30,780 um línu eða bæti 54, rgbtBlue, grænn og rauður. 153 00:09:30,780 --> 00:09:35,280 Ef þú hefur einhvern tíma heyrt skammstöfun RGB, rauður grænn blár, þetta er tilvísun í það. 154 00:09:35,280 --> 00:09:37,840 Vegna þess að það kemur í ljós að þú getur mála alla liti regnbogans 155 00:09:37,840 --> 00:09:41,580 við sumir samsetning af rauðu og bláu og grænu. 156 00:09:41,580 --> 00:09:46,560 Og í raun, foreldrar í herberginu gæti muna sumir af elstu sýningarvél. 157 00:09:46,560 --> 00:09:49,360 Þessa dagana, þú sérð bara 1 skær ljós koma út linsu. 158 00:09:49,360 --> 00:09:52,870 En í dag, hafði þú rauða linsu, bláa linsu, og græna linsu 159 00:09:52,870 --> 00:09:56,620 og saman þeir miðar á skjánum og myndaði litríka mynd. 160 00:09:56,620 --> 00:09:59,590 Og oft grunnskóla og framhaldsskólum yrði þeim linsur 161 00:09:59,590 --> 00:10:02,680 alltaf-svo-lítið Askew, svo þú varst konar sjá tvöfaldur eða þrefaldur myndir, 162 00:10:02,680 --> 00:10:07,500 en það var hugmyndin. Þú hafði rautt og grænt og blátt ljós málverk mynd. 163 00:10:07,500 --> 00:10:09,570 Og að sama lögmál er notað í tölvum. 164 00:10:09,570 --> 00:10:12,000 >> Svo meðal áskoranir, þá fyrir þig í vandamál setja 4 165 00:10:12,000 --> 00:10:16,080 ætlum að vera nokkur atriði, eitt er í raun að breyta stærð myndar. 166 00:10:16,080 --> 00:10:18,050 Til að taka á mynstur er 0 og 1 er, 167 00:10:18,050 --> 00:10:22,840 reikna út hver klumpur af er 0 og er 1 tákna það í uppbyggingu eins og þetta, 168 00:10:22,840 --> 00:10:26,800 og þá reikna út hvernig á að endurtaka punktar: Liverpool, Chelsea, The Greens 169 00:10:26,800 --> 00:10:32,460 inni þannig að þegar mynd lítur svona út í upphafi, getur litið svona stað eftir það. 170 00:10:32,460 --> 00:10:35,590 Meðal annarra áskoranir líka, er að fara að vera að þú munt vera afhent 171 00:10:35,590 --> 00:10:38,900 réttar mynd af raunverulegur skrá frá stafræna myndavél 172 00:10:38,900 --> 00:10:42,410 og á þeim myndavél, einu sinni voru allt fullt af myndum. 173 00:10:42,410 --> 00:10:47,030 Vandamálið er, eytt við tilviljun eða var myndin skemmd á einhvern hátt. 174 00:10:47,030 --> 00:10:51,040 Slæmir hlutir gerast með stafræna myndavél, og svo að við afrita fljótt allt af er 0 og er 1 175 00:10:51,040 --> 00:10:55,410 burt af því kort fyrir þig, spara þá allt í 1 stór skrá, og þá munum við afhenda þeim til þín 176 00:10:55,410 --> 00:11:00,000 í vanda sett 4 þannig að þú getur skrifað forrit í C sem á að batna 177 00:11:00,000 --> 00:11:02,660 allar þessar JPEG, helst. 178 00:11:02,660 --> 00:11:06,280 Og það kemur í ljós að JPEG, jafnvel þótt þeir séu nokkuð flókið skrá snið, 179 00:11:06,280 --> 00:11:09,580 þeir eru miklu flóknari en þetta brosandi andlit hér. 180 00:11:09,580 --> 00:11:14,320 Það kemur í ljós að hvert JPEG byrjar með sömu mynstur er 0 og 1 er. 181 00:11:14,320 --> 00:11:18,820 Svo nota while lykkju eða í lykkju eða svipuð, 182 00:11:18,820 --> 00:11:22,350 þú getur iterate yfir allar 0 og 1 er í réttar mynd 183 00:11:22,350 --> 00:11:26,670 og í hvert skipti sem þú sérð sérstaka mynstur sem er skilgreint í lýsingu Vandamálið SET er, 184 00:11:26,670 --> 00:11:29,770 þú getur tekið, "Ó, hér er með mjög miklar líkur, 185 00:11:29,770 --> 00:11:33,520 byrjun á JPEG, "og um leið og þú finnur sömu mynstur, 186 00:11:33,520 --> 00:11:36,050 sumir tala um bæti eða kílóbæti eða megabæti síðar, 187 00:11:36,050 --> 00:11:40,550 þú getur tekið, "Ooh! Hér er annað JPEG, er mynd sem ég tók eftir í fyrsta. 188 00:11:40,550 --> 00:11:44,720 Leyfðu mér að hætta að lesa það fyrst skrá, byrja að skrifa þetta nýja. " 189 00:11:44,720 --> 00:11:49,980 Og framleiðsla program fyrir pset 4 er að fara að vera eins og margir eins og 50 JPEG. 190 00:11:49,980 --> 00:11:52,400 Og ef það er ekki 50 JPEG, þú hafa a hluti af lykkju. 191 00:11:52,400 --> 00:11:55,580 Ef þú ert með óendanlega fjölda JPEG, hefur þú óendanlega lykkju. 192 00:11:55,580 --> 00:11:58,280 Svo líka, verður alveg sameiginlegt mál. 193 00:11:58,280 --> 00:12:00,280 Það er það sem er á sjóndeildarhringnum. 194 00:12:00,280 --> 00:12:03,740 >> Spurningakeppni 0, á bak við okkur. Átta sig á, á netfangið mitt, sem ávallt er það gott fólk 195 00:12:03,740 --> 00:12:06,820 sem eru bæði ánægð, svona hlutlaust, og sorglegt um próf 0 skipti. 196 00:12:06,820 --> 00:12:10,160 Og þá skaltu ekki ná mér, höfuðið TFS, Zamyla, eigin TF þinn 197 00:12:10,160 --> 00:12:14,120 eða einn af CAS að þú veist ef þú vildi eins og til að ræða hvernig hlutirnir fóru. 198 00:12:14,120 --> 00:12:16,460 >> Svo til að heilla foreldra hér í herberginu, 199 00:12:16,460 --> 00:12:23,990 hvað er CS50 bókasafn? Gott starf. 200 00:12:23,990 --> 00:12:32,280 Hvað er CS50 bókasafn? Já? [Námsmaður svarar óskiljanlegur] 201 00:12:32,280 --> 00:12:35,730 >> Jæja, gott. Svo er það prewritten setja af kóða sem við, starfsfólk, skrifaði 202 00:12:35,730 --> 00:12:38,460 við bjóðum þér, að veita nokkrar algengar virkni. 203 00:12:38,460 --> 00:12:42,290 Efni eins og fá mér band, fá mér int, allar aðgerðir sem eru taldar upp hér. 204 00:12:42,290 --> 00:12:45,260 Byrjar nú byrjum við að virkilega taka þessa þjálfun hjól burt. 205 00:12:45,260 --> 00:12:48,230 Þannig að við erum að fara að byrja að taka burt a "band" frá þér, 206 00:12:48,230 --> 00:12:52,790 sem muna, var bara samheiti fyrir það raunverulegur gögn tegund? char *. 207 00:12:52,790 --> 00:12:57,020 Svo fyrir foreldra, það var líklega - það er gott, svo char * við munum byrja að sjá 208 00:12:57,020 --> 00:13:00,810 á skjánum því meir sem við fjarlægjum "band" úr orðaforða okkar, 209 00:13:00,810 --> 00:13:02,760 að minnsta kosti þegar það kemur að því að í raun og veru að skrifa kóðann. 210 00:13:02,760 --> 00:13:06,240 Á sama hátt munum við hætta að nota einhverja af þessum aðgerðum eins mikið, 211 00:13:06,240 --> 00:13:08,390 því áætlanir okkar eru að fara að fá flóknari 212 00:13:08,390 --> 00:13:11,370 frekar en bara að skrifa forrit sem sitja þar með hvetja blikka, 213 00:13:11,370 --> 00:13:13,580 bíða fyrir the notandi til að slá eitthvað inn 214 00:13:13,580 --> 00:13:15,220 Þú munt fá inntak þinn annars staðar frá. 215 00:13:15,220 --> 00:13:18,720 Til dæmis, munt þú fá þá frá röð af bitum á heimamaður harður ökuferð. 216 00:13:18,720 --> 00:13:23,340 Þú munt í staðinn fá þau í framtíðinni frá a net tengsl, sumir website einhvers staðar. 217 00:13:23,340 --> 00:13:27,460 Svo skulum afhýða aftur þetta lag í fyrsta skipti, og draga upp CS50 tæki 218 00:13:27,460 --> 00:13:32,300 og þessi skrá heitir CS50.h, sem þú hefur verið mikil þar í margar vikur. 219 00:13:32,300 --> 00:13:34,380 >> En við skulum raunverulega sjá hvað er inni í þessu. 220 00:13:34,380 --> 00:13:38,250 Svo er the toppur af the skrá í bláu bara allt fullt af athugasemdum, 221 00:13:38,250 --> 00:13:41,340 ábyrgð upplýsingar og leyfisveitingar. Þetta er tegund af sameiginlegri fyrirmynd 222 00:13:41,340 --> 00:13:44,600 í hugbúnaði, því að mikið af hugbúnaði þessa dagana er það sem er kallað "opinn uppspretta" 223 00:13:44,600 --> 00:13:46,940 sem þýðir að einhver hefur skrifað kóðann 224 00:13:46,940 --> 00:13:50,060 og gerði það í boði ókeypis, ekki bara að keyra og nota, 225 00:13:50,060 --> 00:13:53,660 en í raun og veru að lesa og breyta og fella inn í eigin vinnu þína. 226 00:13:53,660 --> 00:13:55,790 Svo það er það sem þú hefur verið að nota, opinn hugbúnaður, 227 00:13:55,790 --> 00:13:58,030 að vísu í mjög litlu formi. 228 00:13:58,030 --> 00:14:01,860 Ef ég skruna niður framhjá athugasemdum, þó munum við byrja að sjá nokkrar fleiri kunnugleg hluti. 229 00:14:01,860 --> 00:14:08,090 Svo taka efst hér, að CS50.h skrá inniheldur a heild búnt af skrá haus. 230 00:14:08,090 --> 00:14:11,160 Nú, flestir þessir sem við höfum ekki séð áður, en þar er 231 00:14:11,160 --> 00:14:15,640 þekki, sem af þessu höfum við séð, að vísu stutta stund, svona langt? 232 00:14:15,640 --> 00:14:18,720 Já, staðall bókasöfn. Stdlib.h hefur malloc, 233 00:14:18,720 --> 00:14:21,590 svo þegar við byrjuðum að tala um dynamic minni úthlutun, 234 00:14:21,590 --> 00:14:24,960 sem við munum koma aftur í næstu viku og höfum við ma að skrá. 235 00:14:24,960 --> 00:14:29,660 Það kemur í ljós að bool og satt og ósatt í raun ekki til í C, í sjálfu sér, 236 00:14:29,660 --> 00:14:32,460 nema þú látir þessa skrá hérna. 237 00:14:32,460 --> 00:14:35,770 Þannig að við höfum, í margar vikur, verið meðal staðall bool.h 238 00:14:35,770 --> 00:14:39,020 þannig að hægt er að nota hugmyndina um a bool, satt eða ósatt. 239 00:14:39,020 --> 00:14:41,830 Án þetta, myndir þú verða að tegund af falsa það og nota int 240 00:14:41,830 --> 00:14:45,920 og bara geðþótta ráð fyrir að 0 er ósatt og 1 er satt. 241 00:14:45,920 --> 00:14:49,980 >> Nú, ef við skruna niður frekar, hér er skilgreining okkar á band. 242 00:14:49,980 --> 00:14:54,820 Það kemur í ljós, eins og við höfum áður sagt, að þar sem * er skiptir ekki máli. 243 00:14:54,820 --> 00:14:56,750 Þú getur meira að segja hafa pláss allt í kring. 244 00:14:56,750 --> 00:15:01,550 Við, þessi önn hefur verið að stuðla að því eins og þetta til að gera ljóst að * hefur að gera með tegund. 245 00:15:01,550 --> 00:15:05,370 En átta sig á, eins og algengt, ef ekki aðeins meira sameiginlegt, er að setja það þar 246 00:15:05,370 --> 00:15:07,480 en virkni er það sama. 247 00:15:07,480 --> 00:15:11,070 En ef við lesum niður frekar, láta 'taka a líta á að segja, GetInt, 248 00:15:11,070 --> 00:15:15,350 því við notuðum það, ef til vill, áður en nokkuð annað á þessu misseri. 249 00:15:15,350 --> 00:15:19,620 Og hér er GetInt. Þetta er það? 250 00:15:19,620 --> 00:15:24,650 Þetta er frumgerð. Svo oft, höfum við sett frumútgáfur á boli af okkar. C skrár, 251 00:15:24,650 --> 00:15:28,190 en þú getur líka sett frumgerð á skrá haus,. h skrá, 252 00:15:28,190 --> 00:15:32,110 eins og þessi hér, svo að þegar þú skrifar nokkrar aðgerðir 253 00:15:32,110 --> 00:15:36,790 sem þú vilt aðra til að vera fær um að nota, sem er einmitt raunin með CS50 bókasafn, 254 00:15:36,790 --> 00:15:40,900 þú ekki bara framkvæma aðgerðir þínar í eitthvað eins CS50.c, 255 00:15:40,900 --> 00:15:46,720 þú setur einnig frumútgáfur ekki efst á þessi skrá, en efst í haus skrá, 256 00:15:46,720 --> 00:15:50,810 þá er haus skrá hvað vinir og samstarfsmenn eru, 257 00:15:50,810 --> 00:15:52,800 með verulega fela í eigin númer þeirra. 258 00:15:52,800 --> 00:15:55,440 Svo allan þennan tíma sem þú hefur verið þar öllum þessum frumgerðum 259 00:15:55,440 --> 00:15:59,870 raun efst á skránni, en með því að þetta mikil eru vélbúnaður 260 00:15:59,870 --> 00:16:03,320 að mestu afrit og deig Þessi skrá inn eigin. 261 00:16:03,320 --> 00:16:06,400 Nú, hér er sumir nokkuð ítarlegar skjöl. 262 00:16:06,400 --> 00:16:08,880 >> Við höfum nokkurn veginn sjálfgefið að GetInt fær int, 263 00:16:08,880 --> 00:16:10,740 en það kemur í ljós að það er nokkur horn tilvikum, ekki satt? 264 00:16:10,740 --> 00:16:14,320 Hvað ef notandinn slær í fjölda sem er alltof stór? 265 00:16:14,320 --> 00:16:17,350 A quintillion, það bara getur ekki passa inni heiltala? 266 00:16:17,350 --> 00:16:21,180 Hvað er gert ráð fyrir hegðun? Jæja, helst er það fyrirsjáanlegt. 267 00:16:21,180 --> 00:16:23,460 Svo í þessu tilfelli, ef þú lest í raun smáletur, 268 00:16:23,460 --> 00:16:27,850 þú munt sjá að ef línan er ekki hægt að lesa, þetta skilar INT_MAX. 269 00:16:27,850 --> 00:16:30,800 Við höfum aldrei talað um þetta, en byggt á hástöfum hennar, 270 00:16:30,800 --> 00:16:33,030 hvað er það, sennilega? 271 00:16:33,030 --> 00:16:36,610 Það er stöðug, þannig að það er einhver sérstakur fasti sem er líklega lýst 272 00:16:36,610 --> 00:16:39,460 í einni af þessum haus skrár Það er allt hærra í skránni, 273 00:16:39,460 --> 00:16:43,400 og INT_MAX er líklega eitthvað eins og um það bil, 2 milljarðar króna. 274 00:16:43,400 --> 00:16:48,160 Hugmyndin er sú að vegna þess að við þurfum einhvern veginn að þar með að eitthvað fór úrskeiðis, 275 00:16:48,160 --> 00:16:51,090 Við, já, hafa 4 milljarða tölur ráða okkar, 276 00:16:51,090 --> 00:16:53,980 neikvæð 2 milljarðar á allt að 2 milljarða króna, gefa eða taka. 277 00:16:53,980 --> 00:16:58,030 Jæja, það er algengt í forritun er að stela bara einn af þessum tölum. 278 00:16:58,030 --> 00:17:02,250 Kannski 0, kannski 2 milljarðar, kannski neikvæð 2 milljarðar. 279 00:17:02,250 --> 00:17:06,720 Svo þú eyðir einn af hugsanlegum gildum þínum svo að þú getur skuldbinda sig til heimsins 280 00:17:06,720 --> 00:17:10,089 að ef eitthvað fer úrskeiðis, mun ég aftur þetta frábær-stór gildi. 281 00:17:10,089 --> 00:17:13,329 En þú vilt ekki að notandinn að skrifa eitthvað dulinn eins og "2, 3, 4 ..." 282 00:17:13,329 --> 00:17:17,079 á mjög stór tala, þar sem þú alhæfa stað sem fasti. 283 00:17:17,079 --> 00:17:19,380 Svo í raun, ef þú varst að vera anal á undanförnum vikum, 284 00:17:19,380 --> 00:17:23,800 hvenær sem þú kalla GetInt, ættir þú að hafa verið að athuga með ef ástand. 285 00:17:23,800 --> 00:17:27,109 Did the notandi tegund á INT_MAX, eða nánar tiltekið, 286 00:17:27,109 --> 00:17:29,900 gerði GetInt RETURN INT_MAX? Vegna þess að ef það gerði það, 287 00:17:29,900 --> 00:17:35,140 sem þýðir í raun að þeir vildu ekki slá það, eitthvað fór úrskeiðis í þessu tilfelli. 288 00:17:35,140 --> 00:17:38,970 Svo er þetta það sem er almennt þekktur sem "Sentinel" gildi, sem þýðir bara sérstakt. 289 00:17:38,970 --> 00:17:41,020 >> Jæja, við skulum nú snúa á við. C skrár. 290 00:17:41,020 --> 00:17:44,500 The C skrá hefur verið í vélinni í einhvern tíma, 291 00:17:44,500 --> 00:17:47,540 og, í raun, tækið hefur það precompiled fyrir þig 292 00:17:47,540 --> 00:17:49,720 í þann sem við kallað "mótmæla kóða," 293 00:17:49,720 --> 00:17:52,940 en það bara skiptir ekki máli fyrir þig þar sem það er vegna þess að kerfið veit, 294 00:17:52,940 --> 00:17:54,780 í þessu tilfelli, þar sem það er, að tæki. 295 00:17:54,780 --> 00:18:00,620 En við skulum fletta niður núna til GetInt, og sjá hvernig GetInt hefur verið að vinna allan þennan tíma. 296 00:18:00,620 --> 00:18:02,380 Svo hér við hafa svipaðar athugasemdir frá áður. 297 00:18:02,380 --> 00:18:04,930 Leyfðu mér að stækka bara kóðann hluti, 298 00:18:04,930 --> 00:18:07,410 og það sem við höfum fyrir GetInt er eftirfarandi. 299 00:18:07,410 --> 00:18:12,770 Það tekur enga inntak og skilar int, meðan (satt), þannig að við höfum vísvitandi óendanlega lykkju 300 00:18:12,770 --> 00:18:16,560 en væntanlega munum við brjótast út úr þessu á einhvern hátt, eða fara úr þessum. 301 00:18:16,560 --> 00:18:19,890 Svo skulum sjá hvernig þetta virkar. Jæja, virðast við að vera með GetString 302 00:18:19,890 --> 00:18:22,550 í þessari fyrstu línu inni í lykkju, 166. 303 00:18:22,550 --> 00:18:25,320 Þetta er nú gott starf því undir hvaða kringumstæðum 304 00:18:25,320 --> 00:18:30,820 gæti GetString aftur þetta sérstaka leitarorð, NULL? 305 00:18:30,820 --> 00:18:38,460 Ef eitthvað fer úrskeiðis. Hvað gæti farið úrskeiðis þegar þú hringir eitthvað eins GetString? 306 00:18:38,460 --> 00:18:42,550 Já? [Námsmaður svar, óskiljanlegur] >> Já. Svo kannski ekki malloc. 307 00:18:42,550 --> 00:18:45,310 Einhvers staðar undir hetta GetString er starf malloc, 308 00:18:45,310 --> 00:18:48,210 sem úthlutar minni, sem gerir tölva birgðir 309 00:18:48,210 --> 00:18:50,950 allir stafir sem notandinn slær inn á lyklaborðinu. 310 00:18:50,950 --> 00:18:53,270 Og býst við að notandi hafði allt fullt af frítíma 311 00:18:53,270 --> 00:18:56,470 og slegið meira, til dæmis, en 2 milljarða stafi. 312 00:18:56,470 --> 00:18:59,600 Fleiri stafir en tölva er jafnvel vinnsluminni. 313 00:18:59,600 --> 00:19:02,350 Jæja, GetString að vera fær um að þar með að þér, 314 00:19:02,350 --> 00:19:05,650 jafnvel ef þetta er frábær, frábær sjaldgæfar horn tilfelli. 315 00:19:05,650 --> 00:19:08,490 Það hefur einhvern veginn að geta séð þetta, og svo GetString, 316 00:19:08,490 --> 00:19:11,850 Ef við förum til baka og lesa skjöl hennar, er í raun aftur null. 317 00:19:11,850 --> 00:19:16,150 Nú ef GetString ekki með því að fara NULL, GetInt er að fara til að mistakast 318 00:19:16,150 --> 00:19:19,370 með því að fara INT_MAX, bara sem Sentinel. 319 00:19:19,370 --> 00:19:22,650 Þetta eru bara mannleg samninga. The eini vegur þú vildi vita að þetta er raunin 320 00:19:22,650 --> 00:19:24,840 er með því að lesa gögn. 321 00:19:24,840 --> 00:19:28,200 Svo skulum við fletta niður þar sem int er í raun GotInt. 322 00:19:28,200 --> 00:19:34,220 >> Svo ef ég skruna niður aðeins lengra, í línu 170 höfum við athugasemd yfir þessum línum. 323 00:19:34,220 --> 00:19:38,470 Þannig að við lýsa, í 172, int n og char c, og þá er þetta nýtt hlutverk 324 00:19:38,470 --> 00:19:41,870 sem sum ykkar hafa rakst áður en sscanf. 325 00:19:41,870 --> 00:19:44,190 Þetta stendur fyrir band skanna f. 326 00:19:44,190 --> 00:19:48,580 Með öðrum orðum, gefa mér band og ég mun skanna það fyrir stykki af upplýsingar um áhuga. 327 00:19:48,580 --> 00:19:53,820 Svo hvað þýðir það? Jæja, býst við að ég slá í, bókstaflega, 1 2 3 á lyklaborðinu, 328 00:19:53,820 --> 00:19:59,730 og högg koma inn í. Hvað er gögn tegund 1 2 3 þegar aftur með GetString? 329 00:19:59,730 --> 00:20:05,010 Það er augljóslega band, ekki satt? Ég fékk band, svo 1 2 3 virkilega "1 2 3" 330 00:20:05,010 --> 00:20:07,260 með \ 0 í lok þess. Það er ekki int. 331 00:20:07,260 --> 00:20:10,420 Það er ekki tala. Það lítur út eins og númer en það er í raun ekki. 332 00:20:10,420 --> 00:20:14,680 Svo hvaða hjartarskinn GetInt að gera? Það þarf að skanna þessi band vinstri til hægri, 333 00:20:14,680 --> 00:20:19,010 1 2 3 \ 0, og einhvern veginn umbreyta það til raunveruleg heiltölu. 334 00:20:19,010 --> 00:20:21,010 Nú, getur þú reikna út hvernig á að gera þetta. 335 00:20:21,010 --> 00:20:24,240 Ef þú heldur aftur til pset 2, fékk væntanlega smá þægilegt 336 00:20:24,240 --> 00:20:26,810 með keisaranum skatt eða vigenere svo þú getur iterate á streng, 337 00:20:26,810 --> 00:20:29,800 þú geta umbreyta chars til ints með velja. Það er a heild einhver fjöldi af vinna. 338 00:20:29,800 --> 00:20:32,800 Hvers vegna ekki að kalla virka eins sscanf sem gerir það fyrir þig? 339 00:20:32,800 --> 00:20:37,520 Svo ráð sscanf rifrildi, í þessu tilfelli heitir lína, sem er band. 340 00:20:37,520 --> 00:20:41,310 Þú tilgreinir þá, innan gæsalappa, mjög svipað printf, 341 00:20:41,310 --> 00:20:44,960 hvað þú átt von á að sjá í þessum streng? 342 00:20:44,960 --> 00:20:52,980 Það sem ég er að segja hér er, búast ég að sjá heiltala og kannski staf. 343 00:20:52,980 --> 00:20:54,990 Og við munum sjá hvers vegna þetta er raunin í bara smá stund. 344 00:20:54,990 --> 00:20:58,440 Það kemur í ljós að þetta tákn er nú minnir á efni 345 00:20:58,440 --> 00:21:00,840 við byrjuðum að tala um rúmlega viku síðan. 346 00:21:00,840 --> 00:21:05,430 >> Hvað er & n og & C að gera fyrir okkur hér? [Námsmaður svarar óskiljanlegur] 347 00:21:05,430 --> 00:21:07,610 >> Já. Það er að gefa mér heimilisfang n og heimilisfang c. 348 00:21:07,610 --> 00:21:10,440 Nú, hvers vegna er það mikilvægt? Jæja, þú veist að með aðgerðum í C 349 00:21:10,440 --> 00:21:13,440 þú getur alltaf farið á gildi eða ekkert gildi á öllum. 350 00:21:13,440 --> 00:21:16,630 Þú getur skila int, a band, a fljóta, á char, hvað sem er. 351 00:21:16,630 --> 00:21:21,150 Eða þú getur aftur tóm, en þú getur aðeins skila 1 hlutur hámarks. 352 00:21:21,150 --> 00:21:26,100 En hér viljum sscanf aftur mig kannski int heiltala, 353 00:21:26,100 --> 00:21:29,240 og einnig bleikju, og ég ætla að útskýra hvers vegna bleikju í smástund. 354 00:21:29,240 --> 00:21:34,250 Svo þú vilt í raun f að skila 2 hluti, það er bara ekki hægt í C. 355 00:21:34,250 --> 00:21:38,460 Svo er hægt að vinna í kringum það með því að láta í 2 tölur, 356 00:21:38,460 --> 00:21:43,710 því um leið og þú hönd aðgerð 2 tölur, hvað getur þessi aðgerð að gera við þá? 357 00:21:43,710 --> 00:21:49,880 Það getur skrifað þær tölur. Þú getur notað * aðgerð og "fara þangað" til hvers þeirra heimilisföng. 358 00:21:49,880 --> 00:21:54,320 Það er tegund af þessu afturvirkt kerfi, en mjög algengt að breyta gildi breytur 359 00:21:54,320 --> 00:21:58,020 í meira en bara 1 stað, í þessu tilviki 2. 360 00:21:58,020 --> 00:22:04,590 Nú, eftir að ég er að leita að == to1, og síðan aftur N ef það er, í raun, meta til satt. 361 00:22:04,590 --> 00:22:09,340 Svo hvað er í gangi? Jæja, tæknilega, allt sem við viljum í raun að gerast í GetInt er þetta. 362 00:22:09,340 --> 00:22:12,340 Við viljum að flokka, svo að segja, við viljum lesa strenginn 363 00:22:12,340 --> 00:22:16,210 "1 2 3" og ef það lítur út eins og það er númer þarna, 364 00:22:16,210 --> 00:22:21,360 hvað við erum að segja sscanf að gera er að setja þessi tala, 1 2 3, í þessari breytu n fyrir mig. 365 00:22:21,360 --> 00:22:26,060 Hvers vegna þá, gerði ég þetta eins og heilbrigður? 366 00:22:26,060 --> 00:22:33,750 Hvað er hlutverk líka segja sscanf, þú gætir líka fengið þér staf hér. 367 00:22:33,750 --> 00:22:36,890 [Námsmaður séð óskiljanlegur] >> Ekki - kommu gæti unnið. 368 00:22:36,890 --> 00:22:40,650 Við skulum halda að hugsun um stund. Hvað annað? 369 00:22:40,650 --> 00:22:42,570 [Námsmaður, óskiljanlegur] >> Svo góður hugsun, gæti það verið NULL staf. 370 00:22:42,570 --> 00:22:44,970 Það er reyndar ekki í þessu tilviki. Já? [Námsmaður, óskiljanlegur] 371 00:22:44,970 --> 00:22:47,100 >> >> ASCII. Eða leyfðu mér að alhæfa enn frekar. 372 00:22:47,100 --> 00:22:49,670 % C er bara til villa-stöðva. 373 00:22:49,670 --> 00:22:52,510 Við viljum ekki að það að vera persóna eftir fjölda, 374 00:22:52,510 --> 00:22:54,980 en hvað þetta gerir mig að gera er eftirfarandi: 375 00:22:54,980 --> 00:23:01,270 Það kemur í ljós að sscanf, auk geyma gildi í N og C, í þessu dæmi hér, 376 00:23:01,270 --> 00:23:08,170 hvað einnig er er það skilar fjölda af breytum það að setja gildi inn 377 00:23:08,170 --> 00:23:13,330 Svo ef þú slærð aðeins í 1 2 3 og svo aðeins% d er að fara að passa 378 00:23:13,330 --> 00:23:18,830 og aðeins N fær geymd með gildi eins og 1 2 3 og ekkert fær setja í c; 379 00:23:18,830 --> 00:23:20,870 C enn sorp gildi, svo að segja. 380 00:23:20,870 --> 00:23:23,550 Sorp því það er aldrei verið forsniðin sem sumir gildi. 381 00:23:23,550 --> 00:23:29,390 Svo í því tilfelli, sscanf skilar 1, því ég byggja einn af þeim ábendingum, 382 00:23:29,390 --> 00:23:33,650 í því tilviki, frábært. Ég er með int, svo ég losa línuna til að losa minni 383 00:23:33,650 --> 00:23:37,150 að GetString úthlutað í raun, og þá skal ég aftur n. 384 00:23:37,150 --> 00:23:42,210 Annars, ef þú alltaf furða þar sem reyna yfirlýsing kemur, kemur hérna. 385 00:23:42,210 --> 00:23:45,770 Ef, hins vegar af gerð I í 1 2 3 foo, 386 00:23:45,770 --> 00:23:48,640 bara nokkrar af handahófi röð af texta, sscanf er að fara að sjá, 387 00:23:48,640 --> 00:23:51,500 ooh, tala, ú, tala, ú, tala, ú - f. 388 00:23:51,500 --> 00:23:54,190 Og það er að fara að setja 1 2 3 í n. 389 00:23:54,190 --> 00:23:59,970 Það er að fara að setja f í C, og síðan aftur 2. 390 00:23:59,970 --> 00:24:02,980 Þannig að við höfum bara með einföldu skilgreiningu á hegðun scanf er, 391 00:24:02,980 --> 00:24:06,170 mjög einföld leið - og, flókið við fyrstu sýn, en í lok dagsins, 392 00:24:06,170 --> 00:24:11,460 frekar einfalt kerfi að segja, er það að int, og ef svo er, er að það eina sem ég fann? 393 00:24:11,460 --> 00:24:14,950 Og hvítt rúm er hér vísvitandi. Ef þú lest skjölin fyrir sscanf, 394 00:24:14,950 --> 00:24:18,690 það segir þér að ef þú setur stykki af hvítu plássi í upphafi eða í lok, 395 00:24:18,690 --> 00:24:24,990 sscanf of vilja leyfa notandi, hver sem ástæðan er, að lemja rúm 1 2 3, og það mun vera lögmætur. 396 00:24:24,990 --> 00:24:28,310 Það mun ekki æpa á notanda bara vegna þess að þeir högg the rúm í upphafi eða í lok, 397 00:24:28,310 --> 00:24:32,160 sem er bara svolítið meira notendavænt. 398 00:24:32,160 --> 00:24:34,160 >> Einhverjar spurningar, þá á GetInts? Já? 399 00:24:34,160 --> 00:24:36,820 [Námsmaður spurning, óskiljanlegur] 400 00:24:36,820 --> 00:24:40,740 >> Góð spurning. Hvað ef þú gafst bara í bleikju, eins og f, og högg koma inn í 401 00:24:40,740 --> 00:24:47,830 án þess að slá 1 2 3, hvað telur þú að hegðun þessa línu af kóða myndi þá vera? 402 00:24:47,830 --> 00:24:50,500 Svo sscanf geta snert það líka, vegna þess að í því tilviki, 403 00:24:50,500 --> 00:24:56,280 það er ekki að fara að fylla N eða C, það er að fara að stað aftur 0. 404 00:24:56,280 --> 00:25:01,540 Í því tilviki, ég er einnig að veiða þá atburðarás, vegna þess að vænt gildi sem ég vil er 1. 405 00:25:01,540 --> 00:25:07,310 Ég vil bara 1, og einungis 1 hlutur til að fylla. Góð spurning. Aðrir? 406 00:25:07,310 --> 00:25:09,610 >> Allt í lagi, þannig að við skulum ekki fara í gegnum allar aðgerðir hér, 407 00:25:09,610 --> 00:25:11,820 en sá sem virðist vera, kannski, að eftir er áhugi 408 00:25:11,820 --> 00:25:14,530 er GetString því það kemur í ljós að GetFloat, GetInt, 409 00:25:14,530 --> 00:25:19,490 GetDouble, GetLongLong ALL Punt mikið af virkni þeirra til GetString. 410 00:25:19,490 --> 00:25:22,860 Svo skulum taka a líta á hvernig hann er útfærður hér. 411 00:25:22,860 --> 00:25:27,040 Þetta eitt lítur svolítið flókið en það notar sömu grundvallaratriði 412 00:25:27,040 --> 00:25:29,680 að við byrjuðum að tala um í síðustu viku. Svo í GetString, 413 00:25:29,680 --> 00:25:32,670 sem tekur ekki rök sem á tómið upp hér, 414 00:25:32,670 --> 00:25:37,110 og það skilar streng, þannig að ég er að lýsa a band heitir biðminni. 415 00:25:37,110 --> 00:25:39,670 Ég í raun ekki vita hvað það er að fara til vera notaður fyrir enn, en við munum sjá. 416 00:25:39,670 --> 00:25:42,950 Útlit eins og getu er sjálfgefið, 0, ekki alveg viss hvar þetta er að fara. 417 00:25:42,950 --> 00:25:44,920 Ekki viss hvað N er að fara til vera notaður fyrir enn. 418 00:25:44,920 --> 00:25:47,860 En nú er að fá aðeins meira áhugavert, svo í línu 243, 419 00:25:47,860 --> 00:25:51,760 við að lýsa int c, Þetta er tegund af heimskulegt smáatriði. 420 00:25:51,760 --> 00:25:58,080 A bleikju er 8 bitar, og 8 bitar geta geymt hversu margar mismunandi gildi? 421 00:25:58,080 --> 00:26:03,310 256.. Vandamálið er, ef þú vilt hafa 256 mismunandi ASCII stafi, 422 00:26:03,310 --> 00:26:06,210 sem það eru, ef þú hugsa til baka, og þetta er ekki eitthvað til að leggja á minnið. 423 00:26:06,210 --> 00:26:09,100 En ef þú heldur aftur að stór ASCII töfluna við höfðum vikum, 424 00:26:09,100 --> 00:26:13,780 voru, í því tilviki, 128 eða 256 ASCII stafi. 425 00:26:13,780 --> 00:26:16,220 Við notuðum öll mynstur er 0 og 1 er upp. 426 00:26:16,220 --> 00:26:19,410 Það er vandamál ef þú vilt vera fær um að uppgötva villu. 427 00:26:19,410 --> 00:26:23,290 Vegna þess að ef þú ert þegar að nota 256 gildi fyrir stafi, 428 00:26:23,290 --> 00:26:26,390 þú ekki í raun að skipuleggja fram í tímann, því nú þú hefur enga leið til að segja, 429 00:26:26,390 --> 00:26:29,750 "Þetta er ekki legit persóna, þetta er einhver röng skilaboð." 430 00:26:29,750 --> 00:26:32,430 Svo er það sem heimurinn er, þeir nota næsta stærsta gildi, 431 00:26:32,430 --> 00:26:35,790 eitthvað eins og int svo þú hafa a brjálaður fjölda bita, 432 00:26:35,790 --> 00:26:39,610 32 fyrir 4 milljarða möguleg gildi, þannig að þú getur einfaldlega endað með, 433 00:26:39,610 --> 00:26:44,800 meginatriðum, 257 af þeim, 1 sem hefur einhverja sérstaka merkingu og villu. 434 00:26:44,800 --> 00:26:49,190 >> Svo skulum sjá hvernig þetta virkar. Í línu 246, hef ég þetta stóra meðan lykkja 435 00:26:49,190 --> 00:26:54,530 sem kallar fgetc, f merkingu skrá, getc, og þá stdin. 436 00:26:54,530 --> 00:26:59,030 Skrúfjárn út það er bara nákvæmari leið til að segja "lesa inntak frá lyklaborðinu." 437 00:26:59,030 --> 00:27:02,730 Standard inntak þýðir hljómborð, staðall framleiðsla þýðir skjár, 438 00:27:02,730 --> 00:27:06,920 og staðalskekkja, sem við munum sjá í pset 4, þýðir skjáinn 439 00:27:06,920 --> 00:27:09,670 en sérstaka hluta skjásins þannig að það er ekki conflated 440 00:27:09,670 --> 00:27:13,760 með raunverulegum framleiðsla sem þú ætlaðir að prenta, en meira um það í framtíðinni. 441 00:27:13,760 --> 00:27:19,430 Svo þýðir fgetc bara lesa einn staf frá lyklaborðinu, og geyma hann þar? 442 00:27:19,430 --> 00:27:24,000 Geyma það í c, og þá stöðva, þannig að ég er bara með einhverja Boolean conjunctions hér, 443 00:27:24,000 --> 00:27:28,430 athuga að það er ekki jafn \ n, þannig að notandi hefur högg inn. 444 00:27:28,430 --> 00:27:31,510 Við viljum að hætta á þeim tímapunkti, enda hliðar, og við viljum líka að athuga 445 00:27:31,510 --> 00:27:36,170 fyrir sérstaka stöðug EOF, sem ef þú veist eða giska - hvað þýðir það standa fyrir? 446 00:27:36,170 --> 00:27:39,860 Lok skrá. Svo er af þessu tagi nonsensical, því ef ég er að skrifa á lyklaborðinu, 447 00:27:39,860 --> 00:27:41,900 Það er í raun engin skrá sem taka þátt í þessu, 448 00:27:41,900 --> 00:27:44,330 en þetta er bara svona almenna hugtakið notað til að þýða 449 00:27:44,330 --> 00:27:50,320 að ekkert annað er að koma frá fingrum mannsins er. EOF. Lok skrá. 450 00:27:50,320 --> 00:27:52,600 Sem innskot, ef þú hefur einhvern tíma högg stjórna d á lyklaborðinu, 451 00:27:52,600 --> 00:27:54,680 ekki það að þú þyrftir enn, þú hefur högg stjórna c. 452 00:27:54,680 --> 00:27:57,920 En stjórn D sendir sérstakan fastann EOF. 453 00:27:57,920 --> 00:28:03,100 >> Svo nú höfum við bara sumir dynamic minni úthlutun. 454 00:28:03,100 --> 00:28:06,460 Svo ef n + 1> getu, nú ég útskýra n. 455 00:28:06,460 --> 00:28:09,380 N er bara hversu mörg bæti eru í biðminni, 456 00:28:09,380 --> 00:28:11,970 strengurinn sem þú ert að byggja upp frá notanda. 457 00:28:11,970 --> 00:28:16,240 Ef þú ert með fleiri stafi í biðminni en þú hefur getu í biðminni, 458 00:28:16,240 --> 00:28:20,760 innsæi, hvað við þurfum að gera þá er að úthluta meiri getu. 459 00:28:20,760 --> 00:28:24,490 Ég ætla að Lögð gegnum sumir af the tölur hér 460 00:28:24,490 --> 00:28:26,900 og einblína á þessari aðgerð hér. 461 00:28:26,900 --> 00:28:29,170 Þú veist hvað malloc er, eða að minnsta kosti almennt þekki. 462 00:28:29,170 --> 00:28:32,380 Taktu giska hvað realloc gerir. [Námsmaður svar, óskiljanlegur] 463 00:28:32,380 --> 00:28:35,690 >> Já. Og það er ekki alveg að bæta minni, það reallocates minni sem hér segir: 464 00:28:35,690 --> 00:28:40,530 Ef það er enn pláss í lok band til að gefa þér meira af því minni 465 00:28:40,530 --> 00:28:43,370 en það gefur upphaflega þig, þá munt þú fá þessi auka minni. 466 00:28:43,370 --> 00:28:46,640 Svo getur þú bara að setja strengi stafi aftur til baka til baka til baka. 467 00:28:46,640 --> 00:28:49,290 En ef það er ekki raunin, því þú beðið of lengi 468 00:28:49,290 --> 00:28:51,700 og eitthvað af handahófi fékk plopped í minni þar, en það er auka 469 00:28:51,700 --> 00:28:56,480 minni hérna, það er allt í lagi. Realloc er að fara að gera allt þungt að lyfta fyrir þig, 470 00:28:56,480 --> 00:28:58,810 færa strenginn sem þú hefur lesið í svona langt áfram, 471 00:28:58,810 --> 00:29:02,550 setja hana niður þar, og þá gefa þér nokkrar fleiri flugbraut á þeim tímapunkti. 472 00:29:02,550 --> 00:29:05,610 Svo með bylgju af hendi, láta mig segja að það GetString er að gera 473 00:29:05,610 --> 00:29:09,540 það er að byrja með litlum buffer, kannski 1 staf, 474 00:29:09,540 --> 00:29:12,300 og ef notandinn slær í 2 stafi, GetString endar 475 00:29:12,300 --> 00:29:15,210 starf realloc og segir, "Ooh, 1 eðli var ekki nóg. 476 00:29:15,210 --> 00:29:18,480 Gefðu mér 2 stafi. ' Síðan ef þú lest í gegnum rökfræði lykkju, 477 00:29:18,480 --> 00:29:21,070 það er að fara að segja "Ooh, notandi slegið í 3 stöfum. 478 00:29:21,070 --> 00:29:25,690 Gefðu mér nú ekki 2 en 4 stafir, þá gefa mér 8, þá gefa mér 16 og 32. 479 00:29:25,690 --> 00:29:28,180 Sú staðreynd að ég er tvöföldun getu í hvert sinn 480 00:29:28,180 --> 00:29:30,320 þýðir að biðminni er ekki að fara að vaxa hægt. 481 00:29:30,320 --> 00:29:35,870 Það er að fara að vaxa frábær fljótur, og það gæti verið kostur á því? 482 00:29:35,870 --> 00:29:38,540 Hvers vegna fæ ég tvöfalda stærð biðminni, jafnvel þótt notandinn 483 00:29:38,540 --> 00:29:41,450 gæti bara þurft 1 auka staf úr lyklaborðinu? 484 00:29:41,450 --> 00:29:44,830 [Námsmaður svar, óskiljanlegur]. >> Hvað er það? 485 00:29:44,830 --> 00:29:46,750 Einmitt. Þú þarft ekki að vaxa það eins oft. 486 00:29:46,750 --> 00:29:48,870 Og þetta er bara eins konar - þú verja veðmál þín hér. 487 00:29:48,870 --> 00:29:54,150 Hugmyndin er að þú vilt ekki að hringja realloc mikið, vegna þess að það hefur tilhneigingu til að vera hægur. 488 00:29:54,150 --> 00:29:56,840 Í hvert sinn sem þú biður um stýrikerfi fyrir minni, eins og þú munt fljótlega sjá 489 00:29:56,840 --> 00:30:00,620 í framtíðinni vandamál setja, gæta þess að taka nokkurn tíma. 490 00:30:00,620 --> 00:30:04,980 Svo lágmarkað tíma, jafnvel ef þú ert að sóa pláss, tilhneigingu til að vera gott. 491 00:30:04,980 --> 00:30:07,250 >> En ef við lesum í gegnum það sem kemur síðas hluti af GetString hér, 492 00:30:07,250 --> 00:30:10,880 og aftur, að skilja hvert einasta lína hér er ekki svo mikilvægt í dag. 493 00:30:10,880 --> 00:30:14,830 En eftir að það kallar á endanum malloc aftur, og það úthlutar 494 00:30:14,830 --> 00:30:16,980 nákvæmlega eins og margir bæti sem það þarf á að halda band 495 00:30:16,980 --> 00:30:21,620 og þá kastar burt með því að hringja ókeypis, er of stór biðminni, 496 00:30:21,620 --> 00:30:23,510 ef það örugglega fékk tvöfaldast of mörgum sinnum. 497 00:30:23,510 --> 00:30:25,970 Í stuttu máli, það er hvernig GetString hefur verið að vinna allan þennan tíma. 498 00:30:25,970 --> 00:30:30,100 Allt það gerir er að lesa einn staf í einu aftur og aftur og aftur 499 00:30:30,100 --> 00:30:37,930 og í hvert skipti sem það þarf nokkrar auka minni, biður það stýrikerfi fyrir það með því að kalla realloc. 500 00:30:37,930 --> 00:30:41,660 Einhverjar spurningar? Allt í lagi. 501 00:30:41,660 --> 00:30:45,220 >> An árás. Nú þegar við skiljum ábendingum, eða að minnsta kosti 502 00:30:45,220 --> 00:30:47,560 eru sífellt þekkja ábendingum, 503 00:30:47,560 --> 00:30:50,020 skulum íhuga hvernig allur heimurinn byrjar að hrynja 504 00:30:50,020 --> 00:30:53,160 ef þú ert ekki alveg verjast andstæðinga notendur, 505 00:30:53,160 --> 00:30:55,180 fólk sem eru að reyna að reiðhestur inn í kerfið. 506 00:30:55,180 --> 00:31:00,260 Fólk sem eru að reyna að stela hugbúnað með því að sniðganga sumir skráning merkjamál 507 00:31:00,260 --> 00:31:02,150 að þeir gætu annars hafa að slá inn 508 00:31:02,150 --> 00:31:04,860 Taka a líta á þetta dæmi hér, sem er bara C kóða 509 00:31:04,860 --> 00:31:07,920 sem hefur fall helstu neðst, sem kallar fall foo, 510 00:31:07,920 --> 00:31:12,100 og hvað er það sem liggur að foo? [Nemandi] Ein rök. 511 00:31:12,100 --> 00:31:15,660 >> Single rök. Svo argv [1], sem þýðir fyrsta orðið sem notandinn slegið 512 00:31:15,660 --> 00:31:19,150 á stjórn lína eftir a.out eða hvað forritið heitir. 513 00:31:19,150 --> 00:31:24,920 Svo foo, efst, tekur í char *, en char * er bara hvað? 514 00:31:24,920 --> 00:31:28,860 String. Það er ekkert nýtt hér, og það band er geðþótta vera kölluð Bar. 515 00:31:28,860 --> 00:31:36,090 Í þessari línu hér, bleikju C [12], í konar hálf-tækni ensku, hvað er þetta lína að gera? 516 00:31:36,090 --> 00:31:40,640 Array af -? Litur. Gefðu mér fjölda af 12 stöfum. 517 00:31:40,640 --> 00:31:44,970 Svo við gætum kalla þetta biðminni. Það er tæknilega kallast C, en biðminni í forritun 518 00:31:44,970 --> 00:31:47,890 þýðir bara fullt af plássi sem hægt er að setja smá dót tommur 519 00:31:47,890 --> 00:31:49,940 >> Þá loks, memcpy, höfum við ekki notað áður. 520 00:31:49,940 --> 00:31:52,380 En þú getur sennilega giska á hvað það gerir. Það afritar minni. 521 00:31:52,380 --> 00:31:58,790 Hvað þýðir það að gera? Jæja, afrit það virðist bar, inntak þess, í C, 522 00:31:58,790 --> 00:32:03,420 en aðeins upp að lengd bar. 523 00:32:03,420 --> 00:32:07,440 En það er padda hér. 524 00:32:07,440 --> 00:32:14,500 Jæja, svo tæknilega við ættum í raun að gera strlen (bar) x sizeof (char), það er rétt. 525 00:32:14,500 --> 00:32:17,920 En í versta tilfelli hér, við skulum gera ráð fyrir að that's - svo allt í lagi. 526 00:32:17,920 --> 00:32:23,760 Þá er það 2 bugs. Svo sizeof (char), allt í lagi, við skulum gera þetta aðeins stærra. 527 00:32:23,760 --> 00:32:28,860 Svo nú er það enn a padda sem er hvað? 528 00:32:28,860 --> 00:32:31,630 [Námsmaður svar, óskiljanlegur] >> Athuga fyrir hvað? Jæja, svo við ættum að vera að skoða 529 00:32:31,630 --> 00:32:35,010 for null vegna slæmur hlutir gerast þegar bendillinn er NULL, 530 00:32:35,010 --> 00:32:38,490 Þar sem þú might endir upp að fara þangað, og þú ættir aldrei að fara að NÚLL 531 00:32:38,490 --> 00:32:40,890 með dereferencing það með * rekstraraðila. 532 00:32:40,890 --> 00:32:45,250 Svo það er gott, og hvað annað eigum við að gera? Rökrétt er það galli hér líka. 533 00:32:45,250 --> 00:32:47,650 [Námsmaður svar, óskiljanlegur] 534 00:32:47,650 --> 00:32:51,340 >> Svo athuga hvort argc ≥ 2? 535 00:32:51,340 --> 00:32:54,130 Jæja, þannig að það er 3 bugs í þessu verkefni hér. 536 00:32:54,130 --> 00:33:00,080 Við erum ekki að athuga hvort notandinn í raun slegið á allt í argv [1], gott. 537 00:33:00,080 --> 00:33:02,240 Svo er það þriðji galla? Já? 538 00:33:02,240 --> 00:33:04,420 [Námsmaður svar, óskiljanlegur] >> Good. 539 00:33:04,420 --> 00:33:09,590 Svo við athugum eitt dæmi. Við skoðuðum óbeint gera afrit ekki meira minni 540 00:33:09,590 --> 00:33:12,800 en myndi fara yfir lengd bar. 541 00:33:12,800 --> 00:33:15,720 Svo ef band notandinn slegið inn er 10 stafir að lengd, 542 00:33:15,720 --> 00:33:18,260 þetta er að segja, aðeins afrita 10 stafi. " 543 00:33:18,260 --> 00:33:21,140 Og það er allt í lagi, en hvað ef notandinn slegið inn orð á the hvetja 544 00:33:21,140 --> 00:33:29,360 eins og 20 stafa orð, þetta er, segja copy 20 stafi af bar í það? 545 00:33:29,360 --> 00:33:32,840 c, annars þekkt sem biðminni okkar, sem þýðir að þú skrifaði bara gögn 546 00:33:32,840 --> 00:33:35,950 til 8 bæti stöðum sem þú átt ekki, 547 00:33:35,950 --> 00:33:38,320 og þú átt ekki þá í þeim skilningi að þú aldrei úthlutað þeim. 548 00:33:38,320 --> 00:33:41,190 Svo er þetta það sem er almennt þekktur sem gnægð biðminni árás, 549 00:33:41,190 --> 00:33:46,650 eða biðminni umframmagn árás og árás það er í þeim skilningi að ef notandi 550 00:33:46,650 --> 00:33:50,650 eða forrit sem kallar á virka er að gera þetta af illgirni, 551 00:33:50,650 --> 00:33:53,780 hvað gerist í raun næst mætti ​​alveg slæmt. 552 00:33:53,780 --> 00:33:55,690 >> Við skulum taka a líta á þessari mynd hér. 553 00:33:55,690 --> 00:33:59,070 Þessi mynd sýnir stafla þinn af minni. 554 00:33:59,070 --> 00:34:01,050 Og muna að í hvert skipti sem þú hringja í aðgerð, 555 00:34:01,050 --> 00:34:04,520 þú færð þetta litla ramma á mánudaginn og þá annað og þá annað og þá annað. 556 00:34:04,520 --> 00:34:07,250 Og svona langt við höfum bara svona abstracted þetta burt eins og rétthyrninga 557 00:34:07,250 --> 00:34:09,380 annaðhvort þar á borðinu eða á skjánum hér. 558 00:34:09,380 --> 00:34:12,219 En ef við rennum inn á eina af þessum ferhyrninga, 559 00:34:12,219 --> 00:34:16,460 Þegar hringt er virka foo, snýr það út að það er meira á stafla 560 00:34:16,460 --> 00:34:18,739 innan þess ramma og að rétthyrningur 561 00:34:18,739 --> 00:34:23,370 en bara x og y og a og b, eins og við var að tala um skipti. 562 00:34:23,370 --> 00:34:25,949 Það kemur í ljós að það eru sumir lægra stigi upplýsingar, 563 00:34:25,949 --> 00:34:27,780 meðal þeirra aftur heimilisfang. 564 00:34:27,780 --> 00:34:33,020 Svo kemur í ljós þegar helstu kallar foo, helstu að upplýsa foo 565 00:34:33,020 --> 00:34:36,760 hvaða tölu helstu er í minni tölvu. 566 00:34:36,760 --> 00:34:40,659 Því annars, eins fljótt og foo er gert að framkvæma, eins og í þessu tilfelli hér, 567 00:34:40,659 --> 00:34:43,790 Þegar þú nærð þessari loka hrokkið Brace í lok foo, 568 00:34:43,790 --> 00:34:48,860 hvernig Heck er foo veit hvar stjórn áætlunarinnar er ætlað að fara? 569 00:34:48,860 --> 00:34:52,460 Það kemur í ljós að svarið við þeirri spurningu er að Red rétthyrningur hér. 570 00:34:52,460 --> 00:34:56,130 Þetta bendi, og það er allt í tölvunni til að geyma, tímabundið, 571 00:34:56,130 --> 00:35:00,250 á svokölluðu stafla heimilisfang helstu svo að um leið og foo er gert framkvæmd, 572 00:35:00,250 --> 00:35:04,110 tölva veit hvar og hvaða línu í haf til að fara til baka. 573 00:35:04,110 --> 00:35:06,900 Vistað ramma bendi tengist álíka þessu. 574 00:35:06,900 --> 00:35:09,620 Char * Bar hér stendur hvað? 575 00:35:09,620 --> 00:35:14,740 Jæja, nú er þetta bláa hluti hér er ramma Foo er, hvað er barinn? 576 00:35:14,740 --> 00:35:18,300 Jæja, svo bar er bara rök á foo virka. 577 00:35:18,300 --> 00:35:20,720 >> Svo nú erum við aftur á kunnuglega mynd. 578 00:35:20,720 --> 00:35:22,960 Það er meira efni og fleiri truflanir á skjánum 579 00:35:22,960 --> 00:35:27,490 en þetta ljósblátt hluti er það sem við höfum verið að teikna á chalkboard fyrir eitthvað eins skipti. 580 00:35:27,490 --> 00:35:31,890 Það er rammi fyrir foo og eina í það núna er barinn, 581 00:35:31,890 --> 00:35:34,630 sem er þessa breytu. 582 00:35:34,630 --> 00:35:39,840 En hvað ætti að vera í mánudaginn, samkvæmt þessum kóða hér? 583 00:35:39,840 --> 00:35:44,280 Bleikju C [12]. Þannig ættum við einnig að sjá 12 veldi minni, 584 00:35:44,280 --> 00:35:46,260 úthlutað til breytu sem heitir c. 585 00:35:46,260 --> 00:35:48,340 Og reyndar við höfum það á skjánum. 586 00:35:48,340 --> 00:35:51,650 The mjög toppur það er C [0], og svo höfundur þessarar myndinni 587 00:35:51,650 --> 00:35:55,130 ekki nennir að teikna alla ferninga en það eru örugglega 12 þarna 588 00:35:55,130 --> 00:36:00,120 því ef þú lítur neðst til hægri, C [11], ef þú telja frá 0, er 12 svo bæti. 589 00:36:00,120 --> 00:36:06,190 En hér er vandamálið: Í hvaða átt er C vaxa? 590 00:36:06,190 --> 00:36:10,390 Raða af toppi og niður, ekki satt? Ef það byrjar efst og vex til botns, 591 00:36:10,390 --> 00:36:13,480 ekki líta út eins og við fórum okkur mikið flugbraut hér yfirleitt. 592 00:36:13,480 --> 00:36:15,320 Við höfum konar mála okkur út í horn, 593 00:36:15,320 --> 00:36:20,210 og C [11] er rétt upp gegn bar, sem er rétt upp við stafla ramma músina, 594 00:36:20,210 --> 00:36:23,800 sem er rétt upp gegn aftur heimilisfang, það er ekki meira pláss. 595 00:36:23,800 --> 00:36:26,100 Svo er það óbeint, þá, ef þú skrúfa upp, 596 00:36:26,100 --> 00:36:30,460 og þú ert að reyna að lesa 20 bæti í 12-bæti biðminni? 597 00:36:30,460 --> 00:36:33,460 Hvar eru þeir 8 til viðbótar bæti að fara? 598 00:36:33,460 --> 00:36:36,370 Inni allt annað, sum hver er frábær mikilvægt. 599 00:36:36,370 --> 00:36:40,480 Og mikilvægast, hugsanlega er rauði kassi þar, aftur heimilisfang. 600 00:36:40,480 --> 00:36:44,720 Þar geri ráð fyrir að þú ert annaðhvort af tilviljun eða adversarially 601 00:36:44,720 --> 00:36:48,040 skrifa þá 4 bæti, sem bendillinn heimilisfang, 602 00:36:48,040 --> 00:36:53,190 ekki bara við sorp, en með númer sem gerist að tákna raunverulegt heimilisfang í minni? 603 00:36:53,190 --> 00:36:55,930 Hvað er implicaiton, rökrétt? 604 00:36:55,930 --> 00:36:59,080 [Námsmaður svarar óskiljanlegur] >> Einmitt. Þegar foo skilar 605 00:36:59,080 --> 00:37:03,560 og smellir sem hrokkið borsveif, forritið er að fara að halda áfram að snúa ekki aftur til Main, 606 00:37:03,560 --> 00:37:08,320 það er að fara að fara aftur til hvað heimilisfang í því rauða reitnum. 607 00:37:08,320 --> 00:37:11,560 >> Nú, í að ræða kringum hugbúnaður skráningu, 608 00:37:11,560 --> 00:37:14,400 hvað er heimilisfangið sem er að koma aftur til að virka 609 00:37:14,400 --> 00:37:18,820 sem venjulega fær kallað eftir að þú hefur greitt fyrir hugbúnaðinn og inputted skráning merkjamál þinn? 610 00:37:18,820 --> 00:37:23,160 Þú getur konar bragð tölvuna í ekki að fara hér, en í staðinn, að fara upp hér. 611 00:37:23,160 --> 00:37:27,950 Eða, ef þú ert virkilega snjall, að andstæðingurinn getur í raun slá á lyklaborð, 612 00:37:27,950 --> 00:37:32,500 til dæmis, ekki raunveruleg orð, ekki 20 stafir, en geri ráð fyrir að hann eða hún 613 00:37:32,500 --> 00:37:36,200 tegundir í sumum stöfum sem tákna kóða? 614 00:37:36,200 --> 00:37:38,860 Og það er ekki að fara að vera C kóða, það er að fara að vera stafir 615 00:37:38,860 --> 00:37:42,920 sem tákna tvöfaldur vél númer, er 0 og 1 er. 616 00:37:42,920 --> 00:37:46,740 En geri ráð fyrir að þeir eru sniðug nóg til að gera það, að einhvern veginn líma inn í GetString hvetja 617 00:37:46,740 --> 00:37:49,460 eitthvað sem er í raun saman kóða, 618 00:37:49,460 --> 00:37:56,900 og síðustu 4 bytes skrifa það aftur heimilisfang og hvaða heimilisfang er að inntak að gera? 619 00:37:56,900 --> 00:38:01,860 Það geymir í þessum rauða rétthyrningur heimilisfang fyrsta bæti í biðminni. 620 00:38:01,860 --> 00:38:04,270 Svo þú verður að vera mjög sniðug og það er mikið af réttarhald og villa 621 00:38:04,270 --> 00:38:08,500 fyrir slæmt fólk þarna úti, en ef þú getur fundið út hversu stórt þetta biðminni er, 622 00:38:08,500 --> 00:38:12,170 þannig að síðustu bæti í inntak sem þú gefur að áætluninni 623 00:38:12,170 --> 00:38:15,970 verður að vera jafngild á heimilisfang upphafi þýðingaminni, 624 00:38:15,970 --> 00:38:22,270 þú getur gert þetta. Ef við segjum venjulega, halló, og \ 0, það er það sem endar í biðminni. 625 00:38:22,270 --> 00:38:27,860 En ef við erum meira snjall, og við að fylla þessi buffer með það sem við munum generically kalla árás númer, 626 00:38:27,860 --> 00:38:31,920 A, A, A, A: Attack, árás, árás, árás, þar sem þetta er bara eitthvað sem gerir eitthvað slæmt. 627 00:38:31,920 --> 00:38:35,190 Jæja, hvað gerist ef þú ert virkilega snjall, þú might gera þetta: 628 00:38:35,190 --> 00:38:41,740 Í rauða reitnum hér er röð af tölum: 80, CO, 35, 08. 629 00:38:41,740 --> 00:38:44,890 Takið eftir því að það passar við fjölda sem er hérna. 630 00:38:44,890 --> 00:38:47,280 Það er í öfugri röð, en meira um það seinna. 631 00:38:47,280 --> 00:38:51,430 Takið eftir að þessi aftur veffang vísvitandi breytt 632 00:38:51,430 --> 00:38:54,970 til að jafna tölu upp hér, ekki heimilisfang Main. 633 00:38:54,970 --> 00:39:00,170 Svo ef slæmur strákur er frábær sviði, hann eða hún er að fara að setja í þeim árás númer 634 00:39:00,170 --> 00:39:02,890 eitthvað eins og, "Eyða öllum skrám notandans." 635 00:39:02,890 --> 00:39:06,320 Eða 'Afrita the lykilorð, eða "Búa til notanda sem ég get skráð þig inn.' 636 00:39:06,320 --> 00:39:10,130 Nokkuð á öllum, og þetta er bæði hætta og kraftur C. 637 00:39:10,130 --> 00:39:12,900 Þar sem þú hefur aðgang að minni með ábendingum 638 00:39:12,900 --> 00:39:15,950 og þú getur því að skrifa eitthvað sem þú vilt inn í minni í tölvu. 639 00:39:15,950 --> 00:39:19,290 Þú geta gera a tölva gera neitt sem þú vilt með því einfaldlega 640 00:39:19,290 --> 00:39:22,780 hafa það hoppa um innan eigin minni hennar. 641 00:39:22,780 --> 00:39:27,230 Og svo í dag, svo mörg forrit og svo margir vefsíður sem eru í hættu 642 00:39:27,230 --> 00:39:29,730 sjóða niður til fólks að taka sér þetta. 643 00:39:29,730 --> 00:39:32,510 Og þetta kann að virðast eins og a frábær-háþróuð árás, 644 00:39:32,510 --> 00:39:34,220 en það þýðir ekki alltaf að byrja svona. 645 00:39:34,220 --> 00:39:36,770 >> Staðreyndin er sú að það sem vont fólk yfirleitt gera er 646 00:39:36,770 --> 00:39:41,470 hvort sem það er forrit á stjórn lína eða GUI forrit eða vefsíðu, 647 00:39:41,470 --> 00:39:43,290 er þú byrjar bara að veita bull. 648 00:39:43,290 --> 00:39:46,940 Þú slærð inn í mjög stórt orð í leitarreitinn og ýttu á Enter, 649 00:39:46,940 --> 00:39:49,030 og að bíða til að sjá hvort vefsvæðið hrun. 650 00:39:49,030 --> 00:39:53,270 Eða þú að bíða til að sjá hvort forritið birtist sumir villuboð. 651 00:39:53,270 --> 00:39:55,480 Vegna þess að ef þú færð heppinn, eins og slæmur strákur, 652 00:39:55,480 --> 00:39:59,610 og þú gefur nokkrar brjálaður inntak sem hrynur forritið, 653 00:39:59,610 --> 00:40:02,280 sem þýðir að forritarinn gerði ekki ráð fyrir slæma hegðun 654 00:40:02,280 --> 00:40:05,420 sem þýðir að þú getur sennilega með nóg áreynsla, 655 00:40:05,420 --> 00:40:09,870 nóg prufa og villa, reikna út hvernig á að heyja nákvæmari árás. 656 00:40:09,870 --> 00:40:15,900 Svo eins og mikill hluti af öryggi er ekki bara að forðast þessar árásir að öllu leyti, en finna þeim 657 00:40:15,900 --> 00:40:20,250 og í raun og veru að horfa á annálum og sjá hvað brjálaður aðföng hafa fólk slegið inn vefsíðuna þína. 658 00:40:20,250 --> 00:40:26,040 Hvaða leitarorð hafa fólk slegið inn vefsíðuna þína í von um að barmafullur sumir biðminni? 659 00:40:26,040 --> 00:40:28,900 Og þetta snýst allt um að einföld grunnatriði hvað er fylki, 660 00:40:28,900 --> 00:40:32,510 og hvað þýðir það að úthluta og nota minni? 661 00:40:32,510 --> 00:40:34,920 Og fyrir það, líka er þetta. 662 00:40:34,920 --> 00:40:37,520 >> Svo við skulum bara litið inni í disknum enn og aftur. 663 00:40:37,520 --> 00:40:40,190 Svo þú manst úr viku eða tvær fyrir að þegar þú draga skrár 664 00:40:40,190 --> 00:40:45,470 að endurvinna kassi eða ruslakarfa, hvað gerist? 665 00:40:45,470 --> 00:40:47,850 [Nemandi] Ekkert. >> Já, nákvæmlega ekkert. Að lokum ef þú keyrir lítið 666 00:40:47,850 --> 00:40:51,370 á rúm diskur, Windows eða Mac OS mun byrja að eyða skrám fyrir þig. 667 00:40:51,370 --> 00:40:53,670 En ef þú dregur eitthvað í það, þá er það alls ekki öruggur. 668 00:40:53,670 --> 00:40:56,550 Allt roomate, vinur eða fjölskyldumeðlimur þinn þarf að gera er tvöfaldur smellur, og voila. 669 00:40:56,550 --> 00:40:59,720 Það er allt sketchy skrár sem þú reyndir að eyða. 670 00:40:59,720 --> 00:41:02,840 Svo mest af okkur að minnsta kosti vita að þú þarft að hægri smella eða stjórna smella 671 00:41:02,840 --> 00:41:05,320 og tæma rusl, eða eitthvað svoleiðis. 672 00:41:05,320 --> 00:41:07,900 En jafnvel þá, sem er ekki alveg að gera the bragð. 673 00:41:07,900 --> 00:41:11,340 Því hvað gerist þegar þú ert með skrá á harða disknum þínum 674 00:41:11,340 --> 00:41:14,590 sem felur í sér nokkra Word skjal eða einhver JPEG? 675 00:41:14,590 --> 00:41:18,820 Og þetta táknar harða diskinum, og við skulum segja að þetta Sliver hér táknar að skrá, 676 00:41:18,820 --> 00:41:21,640 og það samanstendur af heild búnt af er 0 og 1 er. 677 00:41:21,640 --> 00:41:25,470 Hvað gerist þegar þú ekki aðeins draga að skrá í ruslatunnuna eða endurvinna kassi, 678 00:41:25,470 --> 00:41:30,390 en einnig tæma það? 679 00:41:30,390 --> 00:41:32,820 Raða af engu. Það er ekki nákvæmlega ekkert núna. 680 00:41:32,820 --> 00:41:37,630 Nú er það bara ekkert, því smá eitthvað gerist í formi þessa töflu. 681 00:41:37,630 --> 00:41:41,170 Svo er það einhvers konar gagnagrunni eða borð inni minni í tölvu 682 00:41:41,170 --> 00:41:44,470 sem hefur í raun 1 dálkur að skrá nöfn, 683 00:41:44,470 --> 00:41:50,550 og 1 dálkur fyrir staðsetningu skrárinnar, þar sem þetta gæti verið staðsetning 123, bara af handahófi númer. 684 00:41:50,550 --> 00:41:58,270 Þannig að við gætum haft eitthvað eins x.jpg og staðsetningu 123. 685 00:41:58,270 --> 00:42:02,870 Og hvað gerist svo, þegar þú tæma ruslið? 686 00:42:02,870 --> 00:42:06,720 Það fer í burtu. En það þýðir ekki að fara í burtu er 0 og 1 er. 687 00:42:06,720 --> 00:42:09,690 >> Svo er það, þá er tengingin pset 4? 688 00:42:09,690 --> 00:42:13,460 Jæja, með pset 4, bara vegna þess að við höfum óvart eytt 689 00:42:13,460 --> 00:42:15,890 The samningur glampi nafnspjald sem hafði allar þessar myndir, 690 00:42:15,890 --> 00:42:18,710 eða bara vegna varð það með óheppni skemmd, 691 00:42:18,710 --> 00:42:21,170 þýðir ekki að 0 og er 1 eru ekki enn. 692 00:42:21,170 --> 00:42:23,920 Kannski nokkrar þeirra hafa tapast vegna þess að eitthvað fékk skemmd 693 00:42:23,920 --> 00:42:26,530 í þeim skilningi að sumir er 0 varð 1 og 1 varð 0 er. 694 00:42:26,530 --> 00:42:30,460 Slæmur hlutur getur gerst vegna buggy hugbúnaði eða gölluð vélbúnaði. 695 00:42:30,460 --> 00:42:33,510 En margir af þeim bita, jafnvel 100% af þeim eru enn þarna, 696 00:42:33,510 --> 00:42:38,330 það er bara að tölvan eða myndavélin veit ekki hvar JPEG 1 byrjaði 697 00:42:38,330 --> 00:42:41,660 og þar JPEG 2 byrjaði, en ef þú, forritari, 698 00:42:41,660 --> 00:42:45,800 vita, með smá kunnátta, ef þessir JPEG eru eða hvað þeir líta út, 699 00:42:45,800 --> 00:42:49,570 þú getur greina 0 og er 1 og segja "Ooh. JPEG. Ooh, JPEG. 700 00:42:49,570 --> 00:42:52,830 Þú getur skrifað forrit með þannig bara fyrir eða á meðan lykkja 701 00:42:52,830 --> 00:42:56,100 að batna hvert og eitt af þessum skrám. 702 00:42:56,100 --> 00:42:59,360 Lexían þá er að byrja að "öruggur" eyða skrám 703 00:42:59,360 --> 00:43:01,720 Ef þú vilt koma í veg fyrir þetta með öllu. Já? 704 00:43:01,720 --> 00:43:06,940 [Námsmaður spurning, óskiljanlegur] 705 00:43:06,940 --> 00:43:11,150 >> Hafa meira minni en þú gerðir áður - 706 00:43:11,150 --> 00:43:14,790 Oh! Góð spurning. Svo hvers vegna þá, eftir að tæma ruslið, 707 00:43:14,790 --> 00:43:18,300 Hefur tölvan þín að segja þér að þú ert með fleiri pláss en þú gerðir áður? 708 00:43:18,300 --> 00:43:22,450 Í hnotskurn, því það er að ljúga. Meira tæknilega, þú þarft meira pláss. 709 00:43:22,450 --> 00:43:26,720 Því nú er sagt, er hægt að setja annað efni sem að skrá einu sinni var, 710 00:43:26,720 --> 00:43:28,930 en það þýðir ekki að bita eru að fara í burtu, 711 00:43:28,930 --> 00:43:33,070 og það þýðir ekki að bita eru breytt allt 0 er, til dæmis, til verndar. 712 00:43:33,070 --> 00:43:37,520 Á hinn bóginn, ef þú "Öruggur" eyða skrá, eða líkamlega eyðileggja tækið, 713 00:43:37,520 --> 00:43:40,810 sem er í raun eina leiðin, stundum, í kringum það. 714 00:43:40,810 --> 00:43:45,300 Svo hvers vegna eigum við ekki að fara á þessi hálf-ógnvekjandi huga, og við munum sjá þig á mánudaginn. 715 00:43:45,300 --> 00:43:52,810 CS50.TV