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