1 00:00:00,000 --> 00:00:02,760 [Powered by Google Translate] [NEDĒĻA 5] 2 00:00:02,760 --> 00:00:04,760 [David J. Malan, Hārvarda universitātes] 3 00:00:04,760 --> 00:00:11,990 [Tas ir CS50.] [CS50.TV] 4 00:00:11,990 --> 00:00:17,780 [Sieviete] Viņš guļ, par ko, es nezinu. 5 00:00:17,780 --> 00:00:20,300 [Cilvēks] Tātad, ko mēs zinām? 6 00:00:20,300 --> 00:00:24,120 [Sieviete] Tas at 9:15, Ray Santoya bija pie bankomāta. 7 00:00:24,120 --> 00:00:27,420 [Cilvēks] Tātad jautājums ir, ko viņš dara pie 09:16? 8 00:00:27,420 --> 00:00:29,980 [Sieviete] šaušana 9 mm kaut ko. 9 00:00:29,980 --> 00:00:31,900 Varbūt viņš redzēja snaiperis. 10 00:00:31,900 --> 00:00:34,000 [Cilvēks] Vai viņš strādā ar viņu. 11 00:00:34,000 --> 00:00:36,330 [Sieviete] Wait. Iet atpakaļ vienu. 12 00:00:36,330 --> 00:00:38,330 [Cilvēks] Ko tu redzi? 13 00:00:38,330 --> 00:00:44,520 [♫ suspenseful mūzika ♫] 14 00:00:44,520 --> 00:00:48,320 [Sieviete] Bring savu seju uz augšu. Pilna ekrāna. 15 00:00:48,320 --> 00:00:51,230 [Man] Viņa brilles. >> Tur atspulgs. 16 00:00:51,230 --> 00:01:00,810 [♫ suspenseful mūzika ♫] 17 00:01:00,810 --> 00:01:03,580 [Cilvēks] Tas ir Nuevita s beisbola komanda. Tas ir viņu logo. 18 00:01:03,580 --> 00:01:07,790 [Sieviete] Un viņš runā, lai kurš valkā šo jaka. 19 00:01:07,790 --> 00:01:13,730 >> [Deivids Malan] Tātad, tas ir CS50 nedēļa 5, un šodien mēs sagraut mazliet televīzijas un filmu. 20 00:01:13,730 --> 00:01:16,170 Tātad, ja jūs esat skatoties izrādi, piemēram, šo vienu šeit, 21 00:01:16,170 --> 00:01:19,910 un policija saka "Vai jūs varat tīrīt, ka līdz?" vai "Uzlabot" 22 00:01:19,910 --> 00:01:21,900 nav uzlabot reālajā pasaulē. 23 00:01:21,900 --> 00:01:25,220 Patiesībā, tas, ko jūs patiešām iegūt, ir mazliet kaut kas līdzīgs šim. 24 00:01:25,220 --> 00:01:27,570 Es esmu velk uz augšu vienu no personāla fotogrāfijas no lapas. 25 00:01:27,570 --> 00:01:30,980 Šī ir programma, ko sauc Photoshop. Šis ir 1 no 2 Bowdens, 26 00:01:30,980 --> 00:01:36,300 1 no 3 Bowdens faktiski, šodien, jo mums ir Mrs Bowden šeit, kā arī, ar Rob un Pāvils. 27 00:01:36,300 --> 00:01:41,950 Bet šeit ir Rob uz ekrāna, un ja mēs tuvinātu šajā atspīdums viņš vienmēr bija viņa acīs, 28 00:01:41,950 --> 00:01:47,600 ko jūs faktiski redzēt, ir tas, ko jūs redzat ir tas, ko jūs saņemsiet. 29 00:01:47,600 --> 00:01:51,690 Šis ir "uzlabota", tādēļ "CSI" ir tā mazliet nepareizi. 30 00:01:51,690 --> 00:01:55,190 Ir viena cita klips, ja mēs varam paņemt uz "CSI" tikai mazliet ilgāk. 31 00:01:55,190 --> 00:01:58,500 Tas viens ir jauka frāze izdvest turpmāk, ja jūs vēlaties, lai 32 00:01:58,500 --> 00:02:10,280 skaņu tehnikas ar saviem draugiem, kad, tiešām, jūs sakāt absolūti neko. 33 00:02:10,280 --> 00:02:12,970 >> [Cilvēks] Par nedēļas es esmu bijis pētot važonis Killer slepkavības 34 00:02:12,970 --> 00:02:15,360 ar noteiktu slimīgu aizraušanos. 35 00:02:15,360 --> 00:02:17,160 [Sieviete # 1] Tas ir reālajā laikā. 36 00:02:17,160 --> 00:02:22,930 [Sieviete # 2] Es izveidot GUI saskarni, izmantojot Visual Basic, redzēt, ja es varētu izsekot IP adresi. 37 00:02:22,930 --> 00:02:29,570 >> [Malan] Līdz ar to audio no sinhronizācijā malā, radot GUI saskarni, izmantojot Visual Basic 38 00:02:29,570 --> 00:02:31,820 izsekot IP adrese ir pilnīgs absurds. 39 00:02:31,820 --> 00:02:33,840 Šajās dienās jūs nevarētu izmantot Visual Basic, 40 00:02:33,840 --> 00:02:38,920 tur nav GUI nepieciešamība, un IP adrese bija tehniski precīza termins. 41 00:02:38,920 --> 00:02:41,730 Lai saglabātu acu, kas paredzēti tiem, un no maniem favorītiem vienu: 42 00:02:41,730 --> 00:02:45,070 Šis viena ir nedaudz vairāk mistiskā, jo jums ir jāzina citu valodu. 43 00:02:45,070 --> 00:02:47,860 Tur valodā sauc Mērķis-C, kas ir superset C. 44 00:02:47,860 --> 00:02:51,960 Kas nozīmē, ka C plus dažas papildu funkcijas, kuru vidū objektorientētā programmēšanas. 45 00:02:51,960 --> 00:02:55,070 Un tas ir valoda, kas Apple ir popularizēts iOS plānošanu. 46 00:02:55,070 --> 00:02:58,760 Un tāpēc šeit ir klips no cita šovs pavisam, no "Numbers" 47 00:02:58,760 --> 00:03:02,450 ka, ja jūs faktiski skatīties cieši jūsu TiVo un pauzes īstajā brīdī, 48 00:03:02,450 --> 00:03:07,700 Jūs redzēsiet, ka tas, ko viņi meklē, ir ne gluži tas, kas tiek aprakstīts. 49 00:03:07,700 --> 00:03:11,170 Un ļaujiet man mēģināt citu audio savienotājs šeit un redzēt, ja mēs nevaram 50 00:03:11,170 --> 00:03:13,780 saglabāt audio sinhroni šoreiz. 51 00:03:13,780 --> 00:03:20,530 Es jums "Numbers". 52 00:03:20,530 --> 00:03:23,240 >> [Cilvēks # 1] Tas ir 32-bitu IPv4 adresi. 53 00:03:23,240 --> 00:03:38,930 [Cilvēks # 2] IP, kas ir internets. >> Privātais tīkls. Tas ir Anita privātais tīkls. 54 00:03:38,930 --> 00:03:43,810 [Malan] Labi. Tas ir mērķis-C, un tas ir par daži mazulis krāsošana programmu, 55 00:03:43,810 --> 00:03:51,140 kā jūs varat iespējams secināt no nosaukuma mainīgā tur. 56 00:03:51,140 --> 00:03:54,410 Tā ka, tad, bija "Numbers". Tāpēc šodien un šonedēļ mēs ieviest 57 00:03:54,410 --> 00:03:57,740 mazliet no pasaules kriminālistikas un ar problēmām tādēļ kontekstu. 58 00:03:57,740 --> 00:04:00,590 Šodien būs saīsināts lekcija jo tur īpašs notikums šeit 59 00:04:00,590 --> 00:04:05,530 Vēlāk, tāpēc mēs veikt palūrēt, un kaitināt gan studentiem un vecākiem līdzīgi šodien 60 00:04:05,530 --> 00:04:07,420 ar dažiem no lietām, kas ir pie horizonta. 61 00:04:07,420 --> 00:04:12,240 Starp tiem, kas pirmdien, jums būs vēl dažus klasesbiedrus. 62 00:04:12,240 --> 00:04:16,050 EDX, Harvardas un Mits jaunu tiešsaistes iniciatīva atklātu kursprogrammatūru 63 00:04:16,050 --> 00:04:19,120 un vairāk, sāk uz Hārvardas universitātes pirmdien. 64 00:04:19,120 --> 00:04:21,490 Kas nozīmē, nāk pirmdiena jums būs - kā pagājušajā skaits, 65 00:04:21,490 --> 00:04:26,210 86.000 papildu klasesbiedru tiks pēc kopā ar CS50 lekcijām 66 00:04:26,210 --> 00:04:29,170 un sekcijas un walkthroughs un problēmu komplekti. 67 00:04:29,170 --> 00:04:32,350 Un kā daļa no šī, jūs kļūtu par atklāšanas klases 68 00:04:32,350 --> 00:04:35,090 CS50 un tagad CS50x. 69 00:04:35,090 --> 00:04:39,310 >> Kā daļu no šī, tagad saprotam, ka būs daži upsides kā arī. 70 00:04:39,310 --> 00:04:43,790 Lai iegūtu gatavs, par masveida studentu skaita, 71 00:04:43,790 --> 00:04:47,180 pietiek pateikt, ka, lai gan mums ir 108 TFS un CAS, 72 00:04:47,180 --> 00:04:50,790 ne gluži labākais studentu / skolotāju attiecība, tiklīdz mēs hit 80.000 citiem studentiem. 73 00:04:50,790 --> 00:04:52,850 Tāpēc mēs nebrauksim, lai šķirošanas tik daudz problēmu kopas manuāli. 74 00:04:52,850 --> 00:04:55,920 Tāpēc ieviesa šonedēļ problēmu kopumu būs CS50 Pārbaudīt, 75 00:04:55,920 --> 00:04:58,450 kas būs komandrindas lietderība ietvaros iekārtas 76 00:04:58,450 --> 00:05:01,200 ka jūs saņemsiet, kad jūs atjaunināt to vēlāk šajā nedēļas nogalē, 77 00:05:01,200 --> 00:05:03,200 un jūs varēsiet vadīt komandu, pārbaudiet 50, 78 00:05:03,200 --> 00:05:06,500 par savu PSET, un jūs saņemsiet dažas atsauksmes par to, vai jūsu programma ir 79 00:05:06,500 --> 00:05:11,160 pareizi vai nepareizi, saskaņā ar dažādiem dizaina specifikācijām, kas mēs esam sniegta. 80 00:05:11,160 --> 00:05:13,580 Tā vairāk par to un problēmu kopums specifikācija un 81 00:05:13,580 --> 00:05:17,240 ka CS50x klasesbiedru tiks izmantojot to kā labi. 82 00:05:17,240 --> 00:05:19,230 >> Tātad problēma komplekts 4 ir visu par kriminālistiku. 83 00:05:19,230 --> 00:05:21,940 Un šis gabals iedvesmoja daži reālās dzīves sīkumi, 84 00:05:21,940 --> 00:05:24,620 kad, kad es biju absolvents skolā, es internēti uz brīdi ar 85 00:05:24,620 --> 00:05:28,650 Middlesex County District Attorney birojs dara kriminālistikas darbu 86 00:05:28,650 --> 00:05:31,650 ar savu svina kriminālistikas pētnieks, un ko tas sasniedza 87 00:05:31,650 --> 00:05:35,260 ir, es domāju, ka es teicu atrodas dažu nedēļu pagātni, ir masa Valsts policijas vai citu 88 00:05:35,260 --> 00:05:39,000 nāks, tie varētu samazināties pie lietas, piemēram cieto disku un CD un disketes 89 00:05:39,000 --> 00:05:42,340 un tamlīdzīgi, un tad par kriminālistikas biroja mērķis bija noskaidrot, vai 90 00:05:42,340 --> 00:05:44,600 tur bija vai nebija pierādījumu par sava veida. 91 00:05:44,600 --> 00:05:48,010 Tas bija Īpašā izmeklēšanas dienests, tāpēc tas bija balto apkaklīšu noziegumiem, 92 00:05:48,010 --> 00:05:52,350 tas bija vairāk nepatīkamas veida noziegumiem, 93 00:05:52,350 --> 00:05:55,990 kaut iesaistot kādu digitālo mediju, izrādās, ka nemaz tik daudz cilvēku 94 00:05:55,990 --> 00:05:59,370 rakstiet e-pastu, sakot "es to darīja." 95 00:05:59,370 --> 00:06:03,290 Tik bieži šie kriminālistikas meklējumi neieradās visu, ka daudz augļu, 96 00:06:03,290 --> 00:06:05,850 bet dažreiz cilvēki varētu rakstīt šādas vēstules. 97 00:06:05,850 --> 00:06:08,490 Tāpēc dažreiz centieni tika atalgoti. 98 00:06:08,490 --> 00:06:14,420 >> Bet novest līdz šim tiesu PSET, mēs būtu ieviest 4 PSET bitu grafiku. 99 00:06:14,420 --> 00:06:18,260 Lai jūs, iespējams veikt šīs lietas par pašsaprotamu, JPEG, GIF un piemēram, šajās dienās, 100 00:06:18,260 --> 00:06:21,640 bet, ja jūs patiešām domājat par to, attēlu, līdzīgi Rob sejā, 101 00:06:21,640 --> 00:06:24,430 varētu tikt veidota kā secību punktiņiem, vai pikseļiem. 102 00:06:24,430 --> 00:06:26,680 Tagad, ja Robs sejas, tur ir visi krāsu veidu, 103 00:06:26,680 --> 00:06:29,940 un mēs sākām redzēt atsevišķus punktus, otherwide pazīstams kā pikseļi, 104 00:06:29,940 --> 00:06:31,610 kad mēs sākām, lai tuvinātu collas 105 00:06:31,610 --> 00:06:35,590 Bet, ja mēs vienkāršotu pasauli mazliet, un tikai saka, ka tas šeit ir Rob 106 00:06:35,590 --> 00:06:40,560 melnā un baltā, labi, lai pārstāvētu melnā un baltā, mēs varam tikai izmantot bināro. 107 00:06:40,560 --> 00:06:44,960 Un, ja mēs spēsim izmantot bināro, 1 vai 0, mēs varam paust šo pašu attēlu 108 00:06:44,960 --> 00:06:51,970 of Rob s smaidošu seju ar šo modeli biti: 11000011 pārstāv 109 00:06:51,970 --> 00:06:55,160 balts, balts, melns, melns, melns, melns, balts balts. 110 00:06:55,160 --> 00:06:59,290 Un tāpēc tas nav milzīgs lēciens, tad, lai sāktu runāt par krāsainiem fotoattēliem. 111 00:06:59,290 --> 00:07:01,920 Lietas, kas jūs varētu redzēt uz Facebook vai veikt ar digitālo kameru, 112 00:07:01,920 --> 00:07:04,730 bet, protams, kad runa ir par krāsu, jums ir nepieciešams vairāk bitu. 113 00:07:04,730 --> 00:07:08,470 Un diezgan izplatīta pasaulē fotogrāfijām ir izmantot ne 1-bitu krāsu, 114 00:07:08,470 --> 00:07:12,730 jo tas liecina, bet 24-bitu krāsu, kur jūs faktiski iegūt miljoniem krāsu. 115 00:07:12,730 --> 00:07:15,430 Tā kā gadījumā, ja mēs pietuvināto par Rob acīm, 116 00:07:15,430 --> 00:07:19,270 kas bija jebkurš skaits miljoniem dažādu krāsains iespējām. 117 00:07:19,270 --> 00:07:22,260 >> Tāpēc mēs ieviest šo problēmu kopums 4, kā arī ar walkthrough, 118 00:07:22,260 --> 00:07:27,050 kas būs šodien, 03:30, nevis parasto 02:30 jo piektdienas lekciju šeit. 119 00:07:27,050 --> 00:07:29,930 Bet video būs tiešsaistē, kā parasti, rīt. 120 00:07:29,930 --> 00:07:31,880 Mēs arī jūs iepazīstināt ar citu faila formātu. 121 00:07:31,880 --> 00:07:34,150 Tātad tas ir apzināti domāts, lai apskatīt iebiedēt sākumā, 122 00:07:34,150 --> 00:07:38,980 bet tas ir tikai daži dokumenti par C struct. 123 00:07:38,980 --> 00:07:42,280 Izrādās, ka Microsoft, gadus atpakaļ, palīdzēja popularizēt šo formātu, 124 00:07:42,280 --> 00:07:46,630 sauc bitkartes failu formātā, BMP un tas bija super-vienkārša, 125 00:07:46,630 --> 00:07:50,390 krāsains grafisko failu formātu, kas tika izmantota jau ilgu laiku 126 00:07:50,390 --> 00:07:53,640 un dažreiz vēl tapetes uz galddatoriem. 127 00:07:53,640 --> 00:07:57,410 Ja jūs domājat, atpakaļ uz Windows XP un pakalniem un zilas debesis, 128 00:07:57,410 --> 00:08:00,660 ka parasti bija BMP, vai bitkartes attēlu, un bitkartes 129 00:08:00,660 --> 00:08:03,340 ir jautri mums, jo viņiem ir mazliet vairāk sarežģītību. 130 00:08:03,340 --> 00:08:05,640 Tas nav tik vienkārši, kā šo režģa 0 un 1 ir; 131 00:08:05,640 --> 00:08:10,680 Tā vietā, jums ir lietas, piemēram, galveni sākumā failu. 132 00:08:10,680 --> 00:08:15,520 Tātad citiem vārdiem sakot, iekšpusē. Bmp faila ir viss ķekars 0 un 1 s, 133 00:08:15,520 --> 00:08:18,070 bet tur ir dažas papildu 0 un 1 ir tur. 134 00:08:18,070 --> 00:08:21,450 Un izrādās, ka tas, ko mēs esam droši par pašsaprotamu gadus, 135 00:08:21,450 --> 00:08:27,040 failu formātus, piemēram,. doc vai. xls vai. mp3 vai. mp4, 136 00:08:27,040 --> 00:08:29,910 neatkarīgi no failu formāti, ka jūs esat iepazinušies ar. 137 00:08:29,910 --> 00:08:31,900 Nu, ko tas vēl nozīmē būt faila formāts? 138 00:08:31,900 --> 00:08:35,740 Jo beigās, dienā, visi šie faili mēs izmantojam ir tikai 0 un 1 s 139 00:08:35,740 --> 00:08:39,950 un varbūt tiem, 0 un 1 s pārstāvēt, b, c, izmantojot ASCII vai tamlīdzīgi, 140 00:08:39,950 --> 00:08:42,030 bet līdz beigām dienā, tas ir tikai 0 un 1 ir. 141 00:08:42,030 --> 00:08:45,300 >> Tik cilvēki tikai reizēm nolemj izgudrot jaunu faila formātu 142 00:08:45,300 --> 00:08:49,420 kur viņi standartizēt kāda modeļus bitiem būs patiesībā nozīmē. 143 00:08:49,420 --> 00:08:52,790 Un šajā gadījumā šeit, ļaudīm, kas paredzēti bitkartes failu formātu 144 00:08:52,790 --> 00:08:58,260 teica, ka pašu pirmo baitu bitkartes failu, kas apzīmēts ar 0 offset, tur, 145 00:08:58,260 --> 00:09:02,320 tur būs daži cryptically nosaukts mainīgo sauc bfType, 146 00:09:02,320 --> 00:09:06,510 kas vienkārši stāv uz bitkartes failu tipa, kāda veida bitkartes failu tas ir. 147 00:09:06,510 --> 00:09:10,780 Jūs varat secināt, varbūt, no otrās rindas, ka ofseta 2, baitu skaits 2 148 00:09:10,780 --> 00:09:15,980 ir modelis 0 un 1 ir kas pārstāv ko? 149 00:09:15,980 --> 00:09:18,320 Par kaut lielumu, un tas iet no turienes. 150 00:09:18,320 --> 00:09:20,660 Tātad problēma komplektā 4, jums tiks gāja caur kādu no šīm lietām. 151 00:09:20,660 --> 00:09:24,480 >> Mēs ne galu galā rūpes par viņiem visiem, bet pamanāt, ka tas sāk iegūt interesantu 152 00:09:24,480 --> 00:09:30,780 ap līnijai vai baits 54, rgbtBlue, zaļš un sarkans. 153 00:09:30,780 --> 00:09:35,280 Ja esat kādreiz dzirdējuši akronīms RGB, sarkans zaļš zils, tas ir atsauce uz to. 154 00:09:35,280 --> 00:09:37,840 Jo izrādās jūs varat krāsu visu varavīksnes krāsās 155 00:09:37,840 --> 00:09:41,580 ar kādu kombināciju sarkanā un zilā un zaļā. 156 00:09:41,580 --> 00:09:46,560 Un, patiesībā, telpā vecāki varētu atgādināt dažus no senākajiem projektoru. 157 00:09:46,560 --> 00:09:49,360 Šajās dienās, jūs vienkārši jāredz 1 spilgta gaisma nāk no lēcas. 158 00:09:49,360 --> 00:09:52,870 Bet atpakaļ dienā, jums bija sarkano lēcu, zilo objektīvs, un zaļo lēcas 159 00:09:52,870 --> 00:09:56,620 un kopā viņi mērķis ekrānu un veido krāsainu attēlu. 160 00:09:56,620 --> 00:09:59,590 Un diezgan bieži vidējā skolas un vidusskolas būtu šos lēcas 161 00:09:59,590 --> 00:10:02,680 arvien tā nedaudz šķībi, tāpēc jums bija sava veida redzes dubultošanās vai trīskāršā attēlus, 162 00:10:02,680 --> 00:10:07,500 bet tas bija ideja. Jums bija sarkanā un zaļā un zilā gaisma krāsošana attēlu. 163 00:10:07,500 --> 00:10:09,570 Un tas pats princips tiek izmantots datoros. 164 00:10:09,570 --> 00:10:12,000 >> Tātad starp uzdevumiem, tad, lai jums problēmu noteikts 4 165 00:10:12,000 --> 00:10:16,080 ir būs dažas lietas, viens ir faktiski mainītu attēlu. 166 00:10:16,080 --> 00:10:18,050 Veikt ar daudziem 0 un 1 s, 167 00:10:18,050 --> 00:10:22,840 skaitlis, kura gabalus 0 un 1 ir pārstāvēt ko konstrukcijā, piemēram, tas, 168 00:10:22,840 --> 00:10:26,800 un tad izdomāt, kā atkārtot pikseļi: Sarkanās, blūza, zaļumi 169 00:10:26,800 --> 00:10:32,460 iekšā tā, ka tad, kad attēls izskatās sākotnēji, kā varētu izskatīties šis vietā pēc tam. 170 00:10:32,460 --> 00:10:35,590 Starp citām problēmām, arī būs, ka jums tiks nodota 171 00:10:35,590 --> 00:10:38,900 kriminālistikas tēlu faktisko failu no digitālās kameras 172 00:10:38,900 --> 00:10:42,410 un par šo kameru, reiz bija viss ķekars fotogrāfijas. 173 00:10:42,410 --> 00:10:47,030 Problēma ir, mēs nejauši izdzēsti vai bija attēla bojāts kaut kā. 174 00:10:47,030 --> 00:10:51,040 Sliktas lietas notiek ar digitālo kameru, un tāpēc mēs ātri nokopēt visi 0 un 1 s 175 00:10:51,040 --> 00:10:55,410 off šo karti, lai jūs, saglabāt tos visus 1 lielā failā, un tad mēs nodot tos jums 176 00:10:55,410 --> 00:11:00,000 jo problēma noteikti 4, lai jūs varētu uzrakstīt programmu C, ar kuru atgūt 177 00:11:00,000 --> 00:11:02,660 visus šos JPEG, ideāli. 178 00:11:02,660 --> 00:11:06,280 Un izrādās, ka JPEG, pat ja viņi nedaudz par sarežģītu faila formātā, 179 00:11:06,280 --> 00:11:09,580 viņi daudz sarežģītāka nekā šajā smaidošas sejas šeit. 180 00:11:09,580 --> 00:11:14,320 Izrādās, ka katrs JPEG sākas ar tiem pašiem modeļiem 0 un 1 ir. 181 00:11:14,320 --> 00:11:18,820 Tātad, izmantojot kamēr cilpa, vai par cilpas vai līdzīgu, 182 00:11:18,820 --> 00:11:22,350 Jūs varat atkārtot pār visu 0 un 1 ir šajā kriminālistikas tēlu 183 00:11:22,350 --> 00:11:26,670 un katru reizi, kad jūs redzēt īpašu modeli, kas ir definēta šī problēma set specifikācijai, 184 00:11:26,670 --> 00:11:29,770 Jūs varat pieņemt, "Ak, šeit ir, ar ļoti lielu varbūtību, 185 00:11:29,770 --> 00:11:33,520 sākums JPEG, "un, tiklīdz jūs atrast pats modelis, 186 00:11:33,520 --> 00:11:36,050 daži baitu skaits vai kilobaiti vai megabaitiem vēlāk, 187 00:11:36,050 --> 00:11:40,550 Jūs varat pieņemt, "Ooh! Šeit ir otrais JPEG foto man bija pēc pirmā. 188 00:11:40,550 --> 00:11:44,720 Ļaujiet man apstāties lasot šo pirmo failu, sāciet rakstīt šo jaunu. " 189 00:11:44,720 --> 00:11:49,980 Un jūsu programmas 4 PSET produkcija būs tik daudz kā 50 JPEG. 190 00:11:49,980 --> 00:11:52,400 Un, ja tas nav 50 JPEG, jums ir mazliet cilpu. 191 00:11:52,400 --> 00:11:55,580 Ja Jums ir bezgalīgs skaits JPEG, Jums ir bezgalīgs cilpa. 192 00:11:55,580 --> 00:11:58,280 Tā ka, arī būs diezgan izplatīta lieta. 193 00:11:58,280 --> 00:12:00,280 Tas, ko ir pie horizonta. 194 00:12:00,280 --> 00:12:03,740 >> Viktorīna 0, aiz mums. Realizēt, katru manu e, ka vienmēr tur ir ļaudis 195 00:12:03,740 --> 00:12:06,820 kuri abi ir laimīgi, neitrāls, un skumji ap viktorīnā 0 Time. 196 00:12:06,820 --> 00:12:10,160 Un, lūdzu, vērsties pie manis, tad galvas TFS, Zamyla, savu TF 197 00:12:10,160 --> 00:12:14,120 vai viens no CA, ka jūs zināt, ja jūs vēlētos, lai apspriestu, kā lietas gāja. 198 00:12:14,120 --> 00:12:16,460 >> Tātad, lai ieskaidrot vecākiem šeit telpā, 199 00:12:16,460 --> 00:12:23,990 kāda ir CS50 bibliotēka? Labs darbs. 200 00:12:23,990 --> 00:12:32,280 Kas CS50 bibliotēka? Yeah? [Studentu atbildes, nesaprotami] 201 00:12:32,280 --> 00:12:35,730 >> Labi, labi. Tātad, tas ir iepriekš uzrakstīta kopa koda ka mēs, darbinieki, rakstīja, 202 00:12:35,730 --> 00:12:38,460 mēs piedāvājam Jums, lai sniegtu dažas kopējas funkcijas. 203 00:12:38,460 --> 00:12:42,290 Sīkumi, piemēram, saņemt man virkni; saņemt mani int, visas funkcijas, kas ir uzskaitītas šeit. 204 00:12:42,290 --> 00:12:45,260 Sākot no šī brīža, mēs sākam, lai patiesi ņemtu šos mācību riteņiem off. 205 00:12:45,260 --> 00:12:48,230 Tāpēc mēs esam gatavojas sākt atņemt "string" no jums, 206 00:12:48,230 --> 00:12:52,790 kas, atceraties, bija tikai sinonīms kāda faktiskā datu tips? char *. 207 00:12:52,790 --> 00:12:57,020 Tātad vecākiem, kas, iespējams, bija - tas ir labi, tāpēc char * mēs sāksim redzēt 208 00:12:57,020 --> 00:13:00,810 uz ekrāna vēl jo mēs noņemt "string" no mūsu leksikas, 209 00:13:00,810 --> 00:13:02,760 vismaz ja runa ir faktiski rakstot kodu. 210 00:13:02,760 --> 00:13:06,240 Tāpat, mēs pārtraukt izmantot kādu no šīm funkcijām tik daudz, 211 00:13:06,240 --> 00:13:08,390 jo mūsu programmas ir gatavojas saņemt sarežģītākas 212 00:13:08,390 --> 00:13:11,370 nevis vienkārši uzrakstīt programmu, kas sēž tur ar ātru mirgo, 213 00:13:11,370 --> 00:13:13,580 gaida, lai lietotājs varētu rakstīt kaut ko iekšā 214 00:13:13,580 --> 00:13:15,220 Jūs saņemsiet savu ieguldījumu no citurienes. 215 00:13:15,220 --> 00:13:18,720 Piemēram, jūs saņemsiet tos no vairākiem bitiem uz vietējo cieto disku. 216 00:13:18,720 --> 00:13:23,340 Jūs tā vietā saņemt tos nākotnē no tīkla savienojumu, daži mājas kaut kur. 217 00:13:23,340 --> 00:13:27,460 Tāpēc pieņemsim Noņemiet šo slāni pirmo reizi, un uzvilkt CS50 ierīci 218 00:13:27,460 --> 00:13:32,300 un šo failu sauc CS50.h, kurā jūs esat bijis straujš tostarp nedēļas. 219 00:13:32,300 --> 00:13:34,380 >> Bet pieņemsim patiesībā redzēt, kas ir iekšā šo. 220 00:13:34,380 --> 00:13:38,250 Tātad no faila zilā top ir tikai viss ķekars komentārus, 221 00:13:38,250 --> 00:13:41,340 garantijas informācija un licencēšanu. Tas ir sava veida kopīgu paradigmas 222 00:13:41,340 --> 00:13:44,600 programmatūru, jo programmatūras daudz šajās dienās ir tas, ko sauc par "atvērtā koda" 223 00:13:44,600 --> 00:13:46,940 kas nozīmē, ka kāds ir uzrakstījis kodu 224 00:13:46,940 --> 00:13:50,060 un dara to brīvi pieejamu, ne tikai palaist un izmantot, 225 00:13:50,060 --> 00:13:53,660 bet faktiski lasīt un mainīt un integrēt savu darbu. 226 00:13:53,660 --> 00:13:55,790 Tātad tas, ko jūs esat, izmantojot, atvērtā koda programmatūru, 227 00:13:55,790 --> 00:13:58,030 kaut arī ļoti nelielā formā. 228 00:13:58,030 --> 00:14:01,860 Ja es ritiniet uz leju pagātnes komentāriem, lai gan, mēs sāksim redzēt vēl daži pazīstami lietas. 229 00:14:01,860 --> 00:14:08,090 Tātad paziņojums augšā šeit, ka CS50.h fails ietver visu ķekars header failus. 230 00:14:08,090 --> 00:14:11,160 Tagad lielākā daļa no šiem mēs esam nav redzējis, bet viens ir 231 00:14:11,160 --> 00:14:15,640 pazīstams; kurš no šiem mēs esam redzējuši, kaut arī īsi, līdz šim? 232 00:14:15,640 --> 00:14:18,720 Jā, standarta bibliotēkas. Stdlib.h ir malloc, 233 00:14:18,720 --> 00:14:21,590 tāpēc tiklīdz mēs sākām runāt par dinamisku atmiņas sadalījumu, 234 00:14:21,590 --> 00:14:24,960 kas mēs būsim atpakaļ uz nākamo nedēļu, kā arī, mēs sākām ieskaitot šo failu. 235 00:14:24,960 --> 00:14:29,660 Izrādās, ka loģiska un patiesa un viltus nav faktiski nepastāv C, per se, 236 00:14:29,660 --> 00:14:32,460 ja jūs iekļaut šo failu šeit. 237 00:14:32,460 --> 00:14:35,770 Tāpēc mēs esam, lai nedēļas, tika arī standarta bool.h 238 00:14:35,770 --> 00:14:39,020 lai jūs varētu izmantot jēdzienu bool, patiess vai nepatiess. 239 00:14:39,020 --> 00:14:41,830 Bez tam, jums būtu sava veida viltus to un izmantot int 240 00:14:41,830 --> 00:14:45,920 un tikai patvaļīgi pieņemt, ka 0 ir nepatiess un 1 ir taisnība. 241 00:14:45,920 --> 00:14:49,980 >> Tagad, ja mēs ritiniet uz leju tālāk, šeit ir mūsu definīcija virknes. 242 00:14:49,980 --> 00:14:54,820 Izrādās, jo mēs esam teica pirms, ka, ja tas * ir nav īsti jautājumu. 243 00:14:54,820 --> 00:14:56,750 Jūs pat varat būt vietas visapkārt. 244 00:14:56,750 --> 00:15:01,550 Mēs, šajā semestrī, ir veicināt to, jo tas, lai skaidrs, ka * ir saistīts ar veidu. 245 00:15:01,550 --> 00:15:05,370 Bet saprast, tāpat kā bieži, ja ne mazliet biežāk, ir likt to tur 246 00:15:05,370 --> 00:15:07,480 bet funkcionāli tas pats. 247 00:15:07,480 --> 00:15:11,070 Bet tagad, ja mēs lasām, kas tālāk, pieņemsim to apskatīt teikt, GetInt, 248 00:15:11,070 --> 00:15:15,350 jo mēs izmantojām, ka, iespējams, pirms kaut kas cits šajā pusgadā. 249 00:15:15,350 --> 00:15:19,620 Un šeit ir GetInt. Tas ir tas, ko? 250 00:15:19,620 --> 00:15:24,650 Tas ir prototips. Tik bieži mēs esam prototipus pie mūsu galotnēm. C failus, 251 00:15:24,650 --> 00:15:28,190 bet jūs varat arī nodot prototipus header failus. h failus, 252 00:15:28,190 --> 00:15:32,110 piemēram, šo vienu šeit, lai tad, kad jūs uzrakstīt dažas funkcijas 253 00:15:32,110 --> 00:15:36,790 ka jūs vēlaties citiem cilvēkiem, lai varētu izmantot, kas ir tieši gadījumā ar CS50 bibliotēku, 254 00:15:36,790 --> 00:15:40,900 Jūs ne tikai īstenot savas funkcijas kaut ko līdzīgu CS50.c, 255 00:15:40,900 --> 00:15:46,720 Jūs arī nodot prototipu nav augšpusē šo failu, bet augšpusē galvenes failu, 256 00:15:46,720 --> 00:15:50,810 tad header fails ir kādi draugi un kolēģi arī, 257 00:15:50,810 --> 00:15:52,800 ar asu iekļaut savu kodu. 258 00:15:52,800 --> 00:15:55,440 Tātad visu šo laiku jūs esat, ieskaitot visus šo prototipu 259 00:15:55,440 --> 00:15:59,870 efektīvi augšpusē jūsu failu, bet ceļā uz to asu ietver mehānisms 260 00:15:59,870 --> 00:16:03,320 ka būtībā kopijas un pastas šo failu savā dzimtajā. 261 00:16:03,320 --> 00:16:06,400 Tagad, šeit ir daži diezgan detalizētu dokumentāciju. 262 00:16:06,400 --> 00:16:08,880 >> Mēs esam diezgan daudz par pašsaprotamu, ka GetInt izpaužas int, 263 00:16:08,880 --> 00:16:10,740 bet izrādās tur ir daži stūra gadījumi, labi? 264 00:16:10,740 --> 00:16:14,320 Ko darīt, ja lietotājs veidiem vairākās kas ir pārāk liels? 265 00:16:14,320 --> 00:16:17,350 Quintillion, kas vienkārši nevar ielikt no int? 266 00:16:17,350 --> 00:16:21,180 Kāda ir paredzamā rīcība? Nu, ideāli, tas ir prognozējama. 267 00:16:21,180 --> 00:16:23,460 Tātad šajā gadījumā, ja jūs faktiski lasīt smalka drukāt, 268 00:16:23,460 --> 00:16:27,850 Jūs redzēsiet, ka, ja līnija nav iespējams izlasīt, šī atgriešanās INT_MAX. 269 00:16:27,850 --> 00:16:30,800 Mēs nekad par to runāja, bet gan balstoties uz tās kapitalizācijas, 270 00:16:30,800 --> 00:16:33,030 kas tas ir, iespējams? 271 00:16:33,030 --> 00:16:36,610 Tas ir nemainīgs, tāpēc tas ir dažas īpašas konstante, kas ir iespējams, paziņoja 272 00:16:36,610 --> 00:16:39,460 Kādā no šīm header failus, kas ir līdz lielāks failu, 273 00:16:39,460 --> 00:16:43,400 un INT_MAX ir iespējams kaut kas līdzīgs, apmēram, 2 miljardus. 274 00:16:43,400 --> 00:16:48,160 Ideja ir tāda, ka, jo mums ir nepieciešams, lai kaut kā neizsaka ka kaut kas nogāja greizi, 275 00:16:48,160 --> 00:16:51,090 mēs, jā, ir 4000000000 skaitļus mūsu rīcībā, 276 00:16:51,090 --> 00:16:53,980 negatīvs 2 miljardus līdz 2 miljardiem, sniegt vai pieņemt. 277 00:16:53,980 --> 00:16:58,030 Nu, kāda ir izplatīta programmēšanas ir jums nozagt tikai vienu no šiem skaitļiem. 278 00:16:58,030 --> 00:17:02,250 Varbūt 0, varbūt 2 miljardus, varbūt negatīvs 2 miljardiem. 279 00:17:02,250 --> 00:17:06,720 Tātad jūs pavadīt kādu no saviem iespējamo vērtību, lai jūs varētu izdarīt uz pasauli 280 00:17:06,720 --> 00:17:10,089 ka, ja kaut kas noiet greizi, es atgriezīšos šo super-liela vērtība. 281 00:17:10,089 --> 00:17:13,329 Bet jūs nevēlaties lietotājs rakstīt kaut noslēpumains līdzīgu "2, 3, 4 ..." 282 00:17:13,329 --> 00:17:17,079 par patiešām lielu skaitu, ja jūs vispārināt vietā kā nemainīgu. 283 00:17:17,079 --> 00:17:19,380 Tik tiešām, ja jūs to anālo pēdējo nedēļu, 284 00:17:19,380 --> 00:17:23,800 jebkurā laikā jūs aicinu GetInt, jums vajadzētu būt pārbaudei ar IF stāvoklī. 285 00:17:23,800 --> 00:17:27,109 Darīja lietotāja tipu, kas INT_MAX, vai precīzāk, 286 00:17:27,109 --> 00:17:29,900 darīja GetInt atgriezties INT_MAX? Jo, ja tā notiktu, 287 00:17:29,900 --> 00:17:35,140 kas faktiski nozīmē, ka tie nav ierakstiet to, kaut kas nogāja greizi šajā lietā. 288 00:17:35,140 --> 00:17:38,970 Tātad tas ir tas, ko parasti sauc par "Sentinel" vērtība, kas nozīmē tikai to īpašu. 289 00:17:38,970 --> 00:17:41,020 >> Nu, pieņemsim tagad vērsties pie. C failus. 290 00:17:41,020 --> 00:17:44,500 C fails pastāvējis ierīces kādu laiku, 291 00:17:44,500 --> 00:17:47,540 un, patiesībā, ierīce ir tas kompilētu jums 292 00:17:47,540 --> 00:17:49,720 vērā, ka lieta, ko mēs sauc par "objekta kodu" 293 00:17:49,720 --> 00:17:52,940 bet tas vienkārši nav svarīgi, lai jūs, ja tas ir tāpēc sistēma zina, 294 00:17:52,940 --> 00:17:54,780 Šajā gadījumā, ja tā ir, ierīce. 295 00:17:54,780 --> 00:18:00,620 Bet pieņemsim ritiniet tagad GetInt, un redzēt, kā GetInt ir strādājusi visu šo laiku. 296 00:18:00,620 --> 00:18:02,380 Tātad šeit mums ir līdzīgas komentārus pirms tam. 297 00:18:02,380 --> 00:18:04,930 Ļaujiet man tuvinātu tikai koda daļu, 298 00:18:04,930 --> 00:18:07,410 un ko mēs esam par GetInt ir šādi. 299 00:18:07,410 --> 00:18:12,770 Tas aizņem nav ievadi un tas atgriež int, kamēr (patiess), tāpēc mums ir tīšu bezgalīgu cilpu 300 00:18:12,770 --> 00:18:16,560 bet, domājams, mēs izkļūt no šīs kaut vai atgriezties no šī. 301 00:18:16,560 --> 00:18:19,890 Tātad, pieņemsim redzēt, kā tas darbojas. Nu, mēs, šķiet, izmantojot GetString 302 00:18:19,890 --> 00:18:22,550 Šajā pirmajā rindā iekšpusē cilpa, 166. 303 00:18:22,550 --> 00:18:25,320 Tagad tas ir laba prakse, jo kādos apstākļos 304 00:18:25,320 --> 00:18:30,820 varētu GetString atgriezties šo īpašo atslēgvārdu, null? 305 00:18:30,820 --> 00:18:38,460 Ja kaut kas noiet greizi. Kas varētu iet nepareizi, ja jūs zvanīt kaut kas līdzīgs GetString? 306 00:18:38,460 --> 00:18:42,550 Yeah? [Studentu atbilde, nesaprotami] >> Jā. Tāpēc varbūt malloc neizdodas. 307 00:18:42,550 --> 00:18:45,310 Kaut kur zem pārsega GetString zvana malloc, 308 00:18:45,310 --> 00:18:48,210 kas piešķir atmiņu, kas ļauj datoru veikals 309 00:18:48,210 --> 00:18:50,950 visas rakstzīmes, ka lietotājs uz klaviatūras. 310 00:18:50,950 --> 00:18:53,270 Un pieņemsim, lietotājs bija visai daudz brīva laika 311 00:18:53,270 --> 00:18:56,470 un drukāti vairāk, piemēram, nekā 2 miljardiem rakstzīmes. 312 00:18:56,470 --> 00:18:59,600 Vairāk zīmēm nekā datora pat ir RAM. 313 00:18:59,600 --> 00:19:02,350 Nu, GetString ir jāspēj apliecina, ka ar jums, 314 00:19:02,350 --> 00:19:05,650 pat ja tas ir super, super retāk stūra gadījums. 315 00:19:05,650 --> 00:19:08,490 Tas ir kaut kā jāspēj rīkoties ar šo, un tā GetString, 316 00:19:08,490 --> 00:19:11,850 ja mēs ejam atpakaļ un lasīt tās dokumentāciju, tas, patiesībā, atgriezties null. 317 00:19:11,850 --> 00:19:16,150 Tagad, ja GetString neizdodas, atgriežoties null, GetInt gatavojas neveiksmei 318 00:19:16,150 --> 00:19:19,370 , atgriežoties INT_MAX, tāpat kā Sentinel. 319 00:19:19,370 --> 00:19:22,650 Šie ir tikai cilvēka konvencijas. Vienīgais veids, kā jūs varētu zināt, tas ir gadījums 320 00:19:22,650 --> 00:19:24,840 ir, lasot dokumentus. 321 00:19:24,840 --> 00:19:28,200 Tāpēc pieņemsim ritiniet uz leju, kur int ir faktiski GotInt. 322 00:19:28,200 --> 00:19:34,220 >> Tātad, ja es ritiniet uz leju mazliet tālāk, 170 līnija mums ir komentāru virs šīm līnijām. 323 00:19:34,220 --> 00:19:38,470 Tātad mēs paziņojam, 172, int n un char C, un tad šī jaunā funkcija 324 00:19:38,470 --> 00:19:41,870 ko daži no jums ir stumbled pāri pirms, bet sscanf. 325 00:19:41,870 --> 00:19:44,190 Tas nozīmē stīgu skenēšanas f. 326 00:19:44,190 --> 00:19:48,580 Citiem vārdiem sakot, man stīgu un es skenēt to informācijas daļas interesi. 327 00:19:48,580 --> 00:19:53,820 Tātad, ko tas nozīmē? Nu, pieņemsim, ka es rakstīt, burtiski, 1 2 3 pie klaviatūras, 328 00:19:53,820 --> 00:19:59,730 un tad hit ienākt. Kas ir datu tips 1 2 3 kad atgriezās ar GetString? 329 00:19:59,730 --> 00:20:05,010 Tas acīmredzot virkne, labi? Man virkni, lai 1 2 3 ir patiešām "1 2 3" 330 00:20:05,010 --> 00:20:07,260 ar \ 0 beigās tā. Tas nav int. 331 00:20:07,260 --> 00:20:10,420 Tas nav skaitlis. Tas izskatās numuru, bet tas nav reāli. 332 00:20:10,420 --> 00:20:14,680 Tātad, ko tas GetInt jādara? Tā ir skenēšanas, ka virkne no kreisās uz labo 333 00:20:14,680 --> 00:20:19,010 1 2 3 \ 0, un kaut kā pārvērst to faktisko skaitlim. 334 00:20:19,010 --> 00:20:21,010 Tagad jūs varētu izdomāt, kā to izdarīt. 335 00:20:21,010 --> 00:20:24,240 Ja jūs domājat, atpakaļ uz 2 PSET, jums, iespējams, ieguvuši nedaudz ērts 336 00:20:24,240 --> 00:20:26,810 ar ķeizaru vai vigenere lai jūs varētu atkārtot pār virkni, 337 00:20:26,810 --> 00:20:29,800 Jūs varat pārvērst chars uz Ints ar pick. Tas ir visai daudz darba. 338 00:20:29,800 --> 00:20:32,800 Kāpēc ne zvanu funkciju, piemēram sscanf ka tas, ka jums? 339 00:20:32,800 --> 00:20:37,520 Tātad sscanf sagaida argumentu, kas šajā gadījumā sauc līnija, kas ir virkne. 340 00:20:37,520 --> 00:20:41,310 Jūs tad norādiet, pēdiņās, ir ļoti līdzīgi printf, 341 00:20:41,310 --> 00:20:44,960 ko jūs gaidīt, lai redzētu šo string? 342 00:20:44,960 --> 00:20:52,980 Ko es saku šeit ir, es gaidīt, lai redzētu decimālskaitlis un varbūt raksturu. 343 00:20:52,980 --> 00:20:54,990 Un mēs redzēsim, kāpēc tas tā ir tikai brīdi. 344 00:20:54,990 --> 00:20:58,440 Izrādās, ka šis apzīmējums ir tagad atgādina sīkumi 345 00:20:58,440 --> 00:21:00,840 Mēs sākām runāt par nedaudz vairāk nekā pirms nedēļas. 346 00:21:00,840 --> 00:21:05,430 >> Kas ir & N un & c darot mums šeit? [Studentu atbildes, nesaprotami] 347 00:21:05,430 --> 00:21:07,610 >> Jā. Tas dod man adresi n un adrese c. 348 00:21:07,610 --> 00:21:10,440 Tagad, kāpēc ir tik svarīgi? Nu, jūs zināt, ka ar funkcijām C 349 00:21:10,440 --> 00:21:13,440 Jūs vienmēr varat atgriezties vērtību vai nav vērtības. 350 00:21:13,440 --> 00:21:16,630 Jūs varat atgriezties int, virkne, pludiņa, char, neatkarīgi. 351 00:21:16,630 --> 00:21:21,150 Vai jūs varat atgriezties tukšumu, bet jūs varat atgriezties tikai 1 lieta maksimāli. 352 00:21:21,150 --> 00:21:26,100 Bet šeit mēs vēlamies sscanf atgriezties man varbūt int, decimālskaitlis, 353 00:21:26,100 --> 00:21:29,240 un arī palija, un es paskaidrošu, kāpēc CHAR brīdi. 354 00:21:29,240 --> 00:21:34,250 Tātad jūs faktiski vēlaties f atgriezties 2 lietas, tas vienkārši nav iespējams C. 355 00:21:34,250 --> 00:21:38,460 Tātad jūs varat strādāt ap ka, laižot 2 adreses, 356 00:21:38,460 --> 00:21:43,710 jo tiklīdz jūs nodot funkciju 2 adreses, ko var šo funkciju darīt ar viņiem? 357 00:21:43,710 --> 00:21:49,880 Tā var rakstīt uz šīm adresēm. Jūs varat izmantot * operāciju un "iet tur" katrai no šīm adresēm. 358 00:21:49,880 --> 00:21:54,320 Tas ir sava veida šo backdoor mehānismu, bet ļoti bieži mainot mainīgo lielumu vērtības 359 00:21:54,320 --> 00:21:58,020 vairāk nekā tikai 1 vietu, šajā gadījumā 2. 360 00:21:58,020 --> 00:22:04,590 Tagad, ievērosiet, es esmu pārbaudot ar1 ==, un pēc tam atgriežas n ja tas patiesībā novērtē taisnība. 361 00:22:04,590 --> 00:22:09,340 Tātad, kas notiek? Nu, tehniski, visi mēs patiešām vēlamies, lai notiktu, GetInt tas ir. 362 00:22:09,340 --> 00:22:12,340 Mēs vēlamies, lai parsēt, tā sakot, mēs vēlamies, lai izlasītu string 363 00:22:12,340 --> 00:22:16,210 "1 2 3", un, ja izskatās, ka tur ir vairāki tur, 364 00:22:16,210 --> 00:22:21,360 ko mēs esam spēcīgi sscanf darīt, ir nodot šo numuru, 1 2 3, šajā mainīgā n par mani. 365 00:22:21,360 --> 00:22:26,060 Kāpēc tad tomēr man ir tas, kā arī? 366 00:22:26,060 --> 00:22:33,750 Kāds ir arī sakot, sscanf, jūs varētu arī saņemt raksturs šeit loma. 367 00:22:33,750 --> 00:22:36,890 [Studentu runājot, nesaprotami] >> Nav - decimālais punkts varētu darboties. 368 00:22:36,890 --> 00:22:40,650 Pieņemsim turēt kas domāja par brīdi. Kas vēl? 369 00:22:40,650 --> 00:22:42,570 [Studentu, nesaprotami] >> Tātad, laba doma, tas varētu būt NULL raksturs. 370 00:22:42,570 --> 00:22:44,970 Tas tiešām nav, šajā gadījumā. Yeah? [Studentu, nesaprotami] 371 00:22:44,970 --> 00:22:47,100 >> >> ASCII. Vai arī ļaujiet man vispārināt vēl vairāk. 372 00:22:47,100 --> 00:22:49,670 Lielāks% c tur ir tikai kļūdu labošanas. 373 00:22:49,670 --> 00:22:52,510 Mēs negribam, lai būtu varonis pēc skaita, 374 00:22:52,510 --> 00:22:54,980 bet ko tas man ļauj to darīt, ir šādi: 375 00:22:54,980 --> 00:23:01,270 Izrādās, ka sscanf papildus uzglabāšanai vērtības n un C, šajā piemērā šeit, 376 00:23:01,270 --> 00:23:08,170 ko tas arī ir tas atgriež skaitu mainīgo tas likts vērtības iekšā 377 00:23:08,170 --> 00:23:13,330 Tātad, ja jūs tikai rakstīt 1 2 3, tad tikai% d gatavojas, lai atbilstu 378 00:23:13,330 --> 00:23:18,830 un tikai n izpaužas uzglabā ar vērtību, piemēram, 1 2 3 un nekas izpaužas likts C; 379 00:23:18,830 --> 00:23:20,870 c paliek atkritumu vērtību, lai runāt. 380 00:23:20,870 --> 00:23:23,550 Atkritumu jo tas nekad nav bijis inicializēta par kādu vērtību. 381 00:23:23,550 --> 00:23:29,390 Tātad šajā gadījumā, sscanf atgriež 1, jo es apdzīvo vienu no šiem norādes, 382 00:23:29,390 --> 00:23:33,650 tādā gadījumā, lieliski. Man ir int, tāpēc es atbrīvotu līniju, lai atbrīvotu atmiņu 383 00:23:33,650 --> 00:23:37,150 ka GetString faktiski piešķirti, un tad es atgriezties n. 384 00:23:37,150 --> 00:23:42,210 Cits, ja jums kādreiz prātoju, kur tas retry paziņojums nāk no, nāk tieši no šīs vietas. 385 00:23:42,210 --> 00:23:45,770 Ja turpretim, es rakstīt 1 2 3 foo, 386 00:23:45,770 --> 00:23:48,640 tikai daži izlases secību teksta, sscanf gatavojas redzēt, 387 00:23:48,640 --> 00:23:51,500 ooh, numuru, ooh, numuru, ooh, numuru, Ooh - f. 388 00:23:51,500 --> 00:23:54,190 Un tas notiek, lai likt 1 2 3 in n. 389 00:23:54,190 --> 00:23:59,970 Tas notiek, lai likt f C, un pēc tam atgriezties 2. 390 00:23:59,970 --> 00:24:02,980 Tātad mums ir, tikai izmantojot pamata definīciju scanf uzvedību, 391 00:24:02,980 --> 00:24:06,170 ļoti vienkāršs veids - labi, komplekss pēc pirmā acu uzmetiena, bet beigās, dienā, 392 00:24:06,170 --> 00:24:11,460 diezgan vienkāršs mehānisms sakot, ir tur int, un, ja tā, ka vienīgā lieta, ka es atklāju? 393 00:24:11,460 --> 00:24:14,950 Un baltā telpa šeit ir apzināta. Ja jūs lasīt dokumentāciju sscanf, 394 00:24:14,950 --> 00:24:18,690 tā stāsta, ka, ja jūs iekļaut kādu balto laukumu sākumā vai beigās, 395 00:24:18,690 --> 00:24:24,990 sscanf pārāk ļaus lietotājam, kāda iemesla dēļ, lai sasniegtu spacebar 1 2 3, un tas būs likumīgs. 396 00:24:24,990 --> 00:24:28,310 Tas nebūs bļaut lietotājam tikai tāpēc, ka tie skāra spacebar sākumā vai beigās, 397 00:24:28,310 --> 00:24:32,160 kas ir tikai nedaudz vairāk lietotājam draudzīgu. 398 00:24:32,160 --> 00:24:34,160 >> Kādi jautājumi, tad, uz GetInts? Yeah? 399 00:24:34,160 --> 00:24:36,820 [Studentu jautājums, nesaprotami] 400 00:24:36,820 --> 00:24:40,740 >> Labs jautājums. Ko darīt, ja jūs vienkārši ierakstījāt palija, piemēram F un hit ienākt 401 00:24:40,740 --> 00:24:47,830 nekad ierakstot 1 2 3; ko jūs domājat par šo līniju kodu uzvedība tad ir? 402 00:24:47,830 --> 00:24:50,500 Tātad sscanf var aptvert, ka pārāk, jo šajā gadījumā, 403 00:24:50,500 --> 00:24:56,280 tas nav gatavojas aizpildīt n vai c, tas notiek, lai vietā atgriezties 0. 404 00:24:56,280 --> 00:25:01,540 Tādā gadījumā, es esmu iepatikusies arī šo scenāriju, jo paredzamā vērtība es gribu ir 1. 405 00:25:01,540 --> 00:25:07,310 Es tikai gribu 1, un tikai 1 lieta jāaizpilda. Labs jautājums. Citi? 406 00:25:07,310 --> 00:25:09,610 >> Visiem labi, tāpēc pieņemsim nav iet caur visu, kas šeit funkcijām, 407 00:25:09,610 --> 00:25:11,820 bet viens, kas, šķiet, ir, iespējams, par atlikušo procentu 408 00:25:11,820 --> 00:25:14,530 ir GetString jo izrādās, ka GetFloat, GetInt, 409 00:25:14,530 --> 00:25:19,490 GetDouble, GetLongLong visu Punt daudz to funkcionalitāti GetString. 410 00:25:19,490 --> 00:25:22,860 Tātad, pieņemsim to apskatīt, kā viņš tiek īstenota šeit. 411 00:25:22,860 --> 00:25:27,040 Tas viens izskatās mazliet sarežģīti, bet tas izmanto tos pašus pamatus 412 00:25:27,040 --> 00:25:29,680 ka mēs sākām runāt par pagājušajā nedēļā. Tātad GetString, 413 00:25:29,680 --> 00:25:32,670 kas neņem argumentu kā vienu tukšumā šeit, 414 00:25:32,670 --> 00:25:37,110 un tas atgriež virkni, tāpēc es esmu deklarējot virkni sauc buferis. 415 00:25:37,110 --> 00:25:39,670 Man nav īsti zināt, ko tas notiek, lai izmantot vēl, bet mēs redzēsim. 416 00:25:39,670 --> 00:25:42,950 Izskatās, jauda ir, pēc noklusējuma, 0; nav gluži pārliecināts, kur tas notiek. 417 00:25:42,950 --> 00:25:44,920 Nav pārliecināts, ko n gatavojas izmantot vēl. 418 00:25:44,920 --> 00:25:47,860 Bet tagad tas kļūst nedaudz vairāk interesants, lai 243 rindā, 419 00:25:47,860 --> 00:25:51,760 mēs paziņojam int c, tas ir sava veida stulba detaļām. 420 00:25:51,760 --> 00:25:58,080 Char ir 8 biti, un 8 biti var uzglabāt cik atšķirīgas vērtības? 421 00:25:58,080 --> 00:26:03,310 256. Problēma ir, ja jūs vēlaties, lai ir 256 dažādas ASCII rakstzīmes, 422 00:26:03,310 --> 00:26:06,210 kas ir, ja jūs domājat atpakaļ, un tas nav kaut iegaumēt. 423 00:26:06,210 --> 00:26:09,100 Bet, ja jūs domājat atpakaļ uz šo lielo ASCII topā mums bija nedēļas atpakaļ, 424 00:26:09,100 --> 00:26:13,780 tur bija, jo šajā gadījumā, 128 vai 256 ASCII rakstzīmes. 425 00:26:13,780 --> 00:26:16,220 Mēs izmantojām visus modeļus 0 un 1 ir atkarīgs. 426 00:26:16,220 --> 00:26:19,410 Tas ir problēma, ja jūs vēlaties, lai varētu konstatēt kļūdas. 427 00:26:19,410 --> 00:26:23,290 Jo, ja jūs esat jau izmanto 256 vērtības jūsu rakstzīmes, 428 00:26:23,290 --> 00:26:26,390 Jums nav īsti plānot uz priekšu, jo tagad jums nav veids, kā pateikt, 429 00:26:26,390 --> 00:26:29,750 "Tas nav legit raksturs, tas ir daži kļūdains ziņa." 430 00:26:29,750 --> 00:26:32,430 Tātad, ko pasaule dara, ir, viņi izmanto nākamo lielāko vērtību, 431 00:26:32,430 --> 00:26:35,790 kaut kā int, lai jums ir traks bitu skaitu, 432 00:26:35,790 --> 00:26:39,610 32 4000000000 iespējamo vērtību, lai jūs varat vienkārši galu galā, izmantojot, 433 00:26:39,610 --> 00:26:44,800 būtībā, 257 no tām, kura 1 ir dažas īpaša nozīme kā kļūda. 434 00:26:44,800 --> 00:26:49,190 >> Tātad, pieņemsim redzēt, kā tas darbojas. 246 rindā, man ir šī lielā kamēr cilpa 435 00:26:49,190 --> 00:26:54,530 kas zvana fgetc; f nozīmē failu, getc, un tad stdin. 436 00:26:54,530 --> 00:26:59,030 Izrādās tas ir tikai precīzāk veids, kā pateikt "lasīt ievadi no klaviatūras." 437 00:26:59,030 --> 00:27:02,730 Standarta patēriņš ir klaviatūra, standarta produkcija ir ekrāns, 438 00:27:02,730 --> 00:27:06,920 un standarta kļūda, ko mēs redzēsim 4 PSET, nozīmē ekrānu, 439 00:27:06,920 --> 00:27:09,670 bet īpašu daļu no ekrāna, lai tas nav nesaista 440 00:27:09,670 --> 00:27:13,760 ar faktisko produkciju, kas jums paredzēts drukāt, bet vairāk par to nākotnē. 441 00:27:13,760 --> 00:27:19,430 Tik fgetc nozīmē tikai lasīt vienu rakstzīmi no klaviatūras, un uzglabāt to, kur? 442 00:27:19,430 --> 00:27:24,000 Uzglabāt to C, un pēc tam pārbaudiet, tāpēc es esmu tikai izmantojot dažas boolean saikļi šeit, 443 00:27:24,000 --> 00:27:28,430 pārbaudiet, vai tas nav vienāds \ n, tāpēc lietotājs ir hit ienākt. 444 00:27:28,430 --> 00:27:31,510 Mēs vēlamies, lai apturētu šajā punktā, gala no cilpas, un mēs arī vēlamies, lai pārbaudītu 445 00:27:31,510 --> 00:27:36,170 par īpašu nemainīgs, EOF, kas, ja jūs zināt vai uzminēt - ko tas kandidēt? 446 00:27:36,170 --> 00:27:39,860 Faila beigas. Tātad tas ir sava veida muļķīgi, jo, ja es esmu mašīnrakstīšanu pie klaviatūras, 447 00:27:39,860 --> 00:27:41,900 tur tiešām nav failu iesaistīts šajā, 448 00:27:41,900 --> 00:27:44,330 bet tas ir tikai sava veida vispārējs termins, ko izmanto, lai apzīmētu 449 00:27:44,330 --> 00:27:50,320 ka nekas cits nāk no cilvēka pirkstiem. EOF. Faila beigas. 450 00:27:50,320 --> 00:27:52,600 Kā malā, ja jūs esat kādreiz hit kontroles D pie tastatūras, 451 00:27:52,600 --> 00:27:54,680 nav, ka jums būtu vēl, jūs esat hit kontroles c. 452 00:27:54,680 --> 00:27:57,920 Bet kontrole d nosūta šo īpašo nemainīgu sauc EOF. 453 00:27:57,920 --> 00:28:03,100 >> Tāpēc tagad mums vienkārši ir dažas dinamisku atmiņas sadalījumu. 454 00:28:03,100 --> 00:28:06,460 Tātad, ja n 1> tilpums, tagad es ņemšu izskaidrot n. 455 00:28:06,460 --> 00:28:09,380 n cik daudz baitu pašlaik buferī, 456 00:28:09,380 --> 00:28:11,970 virkne, kas jūs pašlaik veidojot no lietotāja. 457 00:28:11,970 --> 00:28:16,240 Ja jums ir vairāk rakstzīmes jūsu bufera nekā jums ir spējas buferi, 458 00:28:16,240 --> 00:28:20,760 intuitīvi, kas mums ir jādara, tad ir piešķirt vairāk jaudas. 459 00:28:20,760 --> 00:28:24,490 Es esmu gatavojas iziet vairāk nekā daži no aritmētiskā šeit 460 00:28:24,490 --> 00:28:26,900 un koncentrēties tikai uz šo funkciju šeit. 461 00:28:26,900 --> 00:28:29,170 Jūs zināt, ko malloc ir, vai vismaz vispār pazīstami. 462 00:28:29,170 --> 00:28:32,380 Veikt uzminēt ko realloc dara. [Studentu atbilde, nesaprotami] 463 00:28:32,380 --> 00:28:35,690 >> Jā. Un tas nav gluži pievienojot atmiņas, tas pārvieto atmiņu šādi: 464 00:28:35,690 --> 00:28:40,530 Ja tur vēl iespējams beigās virknes, lai dotu jums vairāk, ka atmiņas 465 00:28:40,530 --> 00:28:43,370 nekā tas sākotnēji dod jums, tad jūs saņemsiet, ka papildu atmiņu. 466 00:28:43,370 --> 00:28:46,640 Tātad jūs varat vienkārši liekot stīgas rakstzīmes atpakaļ atpakaļ atpakaļ atpakaļ. 467 00:28:46,640 --> 00:28:49,290 Bet, ja tas nav gadījums, jo jūs gaidīja pārāk ilgi 468 00:28:49,290 --> 00:28:51,700 un kaut izlases ieguva plopped atmiņā tur, bet tur ir papildu 469 00:28:51,700 --> 00:28:56,480 atmiņa šeit lejā, tas ir labi. Realloc gatavojas darīt visu smago celšanas jums, 470 00:28:56,480 --> 00:28:58,810 pārvietot string esat lasījuši līdz šim no šejienes, 471 00:28:58,810 --> 00:29:02,550 likt to tur lejā, un pēc tam sniedz jums dažas vairāk skrejceļu tajā brīdī. 472 00:29:02,550 --> 00:29:05,610 Tātad ar viļņa rokas, ļaujiet man teikt, ka tas, ko GetString dara 473 00:29:05,610 --> 00:29:09,540 ir tas sāk ar mazu buferi, varbūt 1 vienu rakstzīmi, 474 00:29:09,540 --> 00:29:12,300 un ja lietotājs veidiem 2 burtiem, GetString nonāks 475 00:29:12,300 --> 00:29:15,210 zvana realloc un saka, "Ooh, 1 raksturs nebija pietiekami. 476 00:29:15,210 --> 00:29:18,480 Dodiet man 2 rakstzīmes. " Tad, ja jūs izlasīt loģikas cilpas, 477 00:29:18,480 --> 00:29:21,070 tas būs teikt, "Ooh, lietotājs drukāti 3 burtiem. 478 00:29:21,070 --> 00:29:25,690 Dodiet man tagad nav 2, bet 4 rakstzīmes, tad dod man 8, tad dod man 16 un 32. " 479 00:29:25,690 --> 00:29:28,180 Fakts, ka es esmu Apjoma divkāršošana katru reizi 480 00:29:28,180 --> 00:29:30,320 nozīmē, ka bufera nav dodas uz aug lēni. 481 00:29:30,320 --> 00:29:35,870 Tas notiek, lai augt super ātri, un kādi varētu būt priekšrocība, ka? 482 00:29:35,870 --> 00:29:38,540 Kāpēc man divkāršojot buferi, lai gan lietotājs 483 00:29:38,540 --> 00:29:41,450 varētu vienkārši vajag 1 papildus raksturs no klaviatūras? 484 00:29:41,450 --> 00:29:44,830 [Studentu atbilde, nesaprotami]. >> Kas tas ir? 485 00:29:44,830 --> 00:29:46,750 Tieši tā. Jums nav augt to tik bieži. 486 00:29:46,750 --> 00:29:48,870 Un tas ir tikai sava veida - jūs esat nokļuvis hedžēšanas savas likmes šeit. 487 00:29:48,870 --> 00:29:54,150 Ideja ir, ka jūs nevēlaties, lai izsauktu realloc daudz, jo tā mēdz būt lēns. 488 00:29:54,150 --> 00:29:56,840 Jebkurā laikā jūs lūgt operētājsistēmu atmiņas, kā jūs drīz redzēt 489 00:29:56,840 --> 00:30:00,620 turpmākajā problēmu kopumu, tai ir tendence ņemt kādu laiku. 490 00:30:00,620 --> 00:30:04,980 Tādējādi samazinot šo laiku, pat ja jūs izšķērdēt dažas vietas, mēdz būt laba lieta. 491 00:30:04,980 --> 00:30:07,250 >> Bet, ja mēs lasām cauri pēdējo daļu GetString šeit, 492 00:30:07,250 --> 00:30:10,880 un atkal, izprotot katru rindiņu šeit nav tik svarīgi šodien. 493 00:30:10,880 --> 00:30:14,830 Bet paziņo, ka tas beidzot aicina malloc atkal, un tā piešķir 494 00:30:14,830 --> 00:30:16,980 tieši tā, kā daudzi baitus, jo tai ir par virkni 495 00:30:16,980 --> 00:30:21,620 un tad met prom, piezvanot bez maksas, pārāk liels buferis, 496 00:30:21,620 --> 00:30:23,510 ja tas tiešām got dubultojās pārāk daudz reižu. 497 00:30:23,510 --> 00:30:25,970 Īsi sakot, tas ir kā GetString ir strādājusi visu šo laiku. 498 00:30:25,970 --> 00:30:30,100 Viss tas ir lasīt vienu rakstzīmi laikā atkal un atkal un atkal 499 00:30:30,100 --> 00:30:37,930 un katru reizi, ir vajadzīgas dažas papildu atmiņu, tā lūdz operētājsistēmu par to, zvanot realloc. 500 00:30:37,930 --> 00:30:41,660 Kādi jautājumi? Labi. 501 00:30:41,660 --> 00:30:45,220 >> Uzbrukums. Tagad, kad mēs saprotam norādes, vai vismaz 502 00:30:45,220 --> 00:30:47,560 arvien iepazinušies ar norādes, 503 00:30:47,560 --> 00:30:50,020 pieņemsim apsvērt, kā visa pasaule sāk sabrukt 504 00:30:50,020 --> 00:30:53,160 ja jums nav gluži aizstāvēt pret sacīkstes lietotājiem, 505 00:30:53,160 --> 00:30:55,180 cilvēki, kas cenšas kapāt jūsu sistēmā. 506 00:30:55,180 --> 00:31:00,260 Cilvēki, kas cenšas nozagt jūsu programmatūru, apejot kādu reģistrācijas kodu 507 00:31:00,260 --> 00:31:02,150 ka viņi citādi varētu būt rakstīt collas 508 00:31:02,150 --> 00:31:04,860 Veikt apskatīt šo piemēru šeit, kas ir tikai C kodu 509 00:31:04,860 --> 00:31:07,920 kas ir funkcija galvenais apakšā, kas izsauc funkciju foo, 510 00:31:07,920 --> 00:31:12,100 un kāda ir tā iet uz foo? [Studentu] viena arguments. 511 00:31:12,100 --> 00:31:15,660 >> Vienu argumentu. Tātad argv [1], kas nozīmē pirmo vārdu lietotājs drukāti 512 00:31:15,660 --> 00:31:19,150 pie komandrindas pēc a.out vai kāds programmu sauc. 513 00:31:19,150 --> 00:31:24,920 Tātad foo, augšā, veic, char *, bet char * ir tieši tas, ko? 514 00:31:24,920 --> 00:31:28,860 Stīgu. Nav nekas jauns šeit, un ka virkne ir patvaļīgi tiek saukta bārs. 515 00:31:28,860 --> 00:31:36,090 Šajā rindā šeit, char c [12], kas veida daļēji tehniskās angļu, kas ir šī līnija dara? 516 00:31:36,090 --> 00:31:40,640 Masīvs -? Rakstzīmes. Dodiet man masīvu 12 rakstzīmes. 517 00:31:40,640 --> 00:31:44,970 Lai mēs varētu nosaukt šo buferi. Tas ir tehniski sauc c, bet programmēšanā buferis 518 00:31:44,970 --> 00:31:47,890 nozīmē tikai ķekars kosmosa, ka jums var likt dažus stuff iekšā 519 00:31:47,890 --> 00:31:49,940 >> Tad visbeidzot, memcpy, mēs esam nav izmantots agrāk. 520 00:31:49,940 --> 00:31:52,380 Bet jūs varat droši uzminēt, ko tā dara. Tā kopijas atmiņu. 521 00:31:52,380 --> 00:31:58,790 Ko tas dod? Nu, tas acīmredzot kopē bārs, tās ieejas, uz C, 522 00:31:58,790 --> 00:32:03,420 bet tikai līdz garumu joslas. 523 00:32:03,420 --> 00:32:07,440 Bet tur ir kļūda šeit. 524 00:32:07,440 --> 00:32:14,500 Labi, tāpēc tehniski mums patiešām vajadzētu darīt, strlen (bar) x sizeof (char), kas ir pareizs. 525 00:32:14,500 --> 00:32:17,920 Bet sliktākajā gadījumā šeit, pieņemsim, ka That - tik, labi. 526 00:32:17,920 --> 00:32:23,760 Tad tur ir 2 kļūdas. Tātad sizeof (char), labi, pieņemsim, tas mazliet plašāks. 527 00:32:23,760 --> 00:32:28,860 Tāpēc tagad tur ir vēl kļūda, kas ir tas, ko? 528 00:32:28,860 --> 00:32:31,630 [Studentu atbilde, nesaprotami] >> Pārbaudīt par ko? Labi, lai mēs būtu pārbaudei 529 00:32:31,630 --> 00:32:35,010 for null, jo sliktas lietas notiek, ja jūsu rādītājs ir NULL, 530 00:32:35,010 --> 00:32:38,490 Jo jūs varētu galu galā iet tur, un jums nevajadzētu kādreiz ir iet uz NULL 531 00:32:38,490 --> 00:32:40,890 ar dereferencing to ar * operatoru. 532 00:32:40,890 --> 00:32:45,250 Tā ka ir labs, un ko vēl mēs darām? Loģiski tur plaisāt arī šeit. 533 00:32:45,250 --> 00:32:47,650 [Studentu atbilde, nesaprotami] 534 00:32:47,650 --> 00:32:51,340 >> Tāpēc pārbaudiet, ja argc ≥ 2? 535 00:32:51,340 --> 00:32:54,130 Labi, tāpēc tur ir 3 bugs šajā programmā šeit. 536 00:32:54,130 --> 00:33:00,080 Mēs esam ne pārbaude, ja lietotājs faktiski drukāti jebko ARGV [1], labā. 537 00:33:00,080 --> 00:33:02,240 Tātad, kāda ir trešā kļūda? Yeah? 538 00:33:02,240 --> 00:33:04,420 [Studentu atbilde, nesaprotami] >> Labi. 539 00:33:04,420 --> 00:33:09,590 Tāpēc mēs pārbaudījām vienu scenāriju. Mēs netieši jāpārbauda nav kopēt vairāk atmiņas 540 00:33:09,590 --> 00:33:12,800 nekā tas būtu ilgāks par bāru. 541 00:33:12,800 --> 00:33:15,720 Tātad, ja virkne lietotājs drukāti ir 10 rakstzīmes garš, 542 00:33:15,720 --> 00:33:18,260 tas saka, "Tikai kopēt 10 rakstzīmes." 543 00:33:18,260 --> 00:33:21,140 Un tas ir labi, bet kas notiks, ja lietotājs drukāti vārdu uzvednē 544 00:33:21,140 --> 00:33:29,360 piemēram, 20 rakstzīmju vārdu, tas ir, sakot kopēt 20 rakstzīmes no bāra uz ko? 545 00:33:29,360 --> 00:33:32,840 c, citādi zināma kā mūsu buferis, kas nozīmē, ka jūs tikko rakstīja datus 546 00:33:32,840 --> 00:33:35,950 līdz 8 baitu vietām, kas jums nepieder, 547 00:33:35,950 --> 00:33:38,320 un jums nepieder viņiem tādā nozīmē, ka jūs nekad piešķirtā tos. 548 00:33:38,320 --> 00:33:41,190 Tātad tas ir tas, ko parasti sauc par bufera pārpildes uzbrukumu, 549 00:33:41,190 --> 00:33:46,650 vai buferis pārsniegts uzbrukumu, un tas ir uzbrukums, kas nozīmē, ka, ja lietotājs 550 00:33:46,650 --> 00:33:50,650 vai programma, kas zvana savu funkciju dara to ļaunprātīgi, 551 00:33:50,650 --> 00:33:53,780 kas patiesībā notiek tālāk varētu būt diezgan slikti. 552 00:33:53,780 --> 00:33:55,690 >> Pieņemsim to apskatīt šo attēlu šeit. 553 00:33:55,690 --> 00:33:59,070 Šis attēls atspoguļo jūsu kaudze atmiņas. 554 00:33:59,070 --> 00:34:01,050 Un atcerēties, ka katru reizi, kad jūs zvanu funkciju, 555 00:34:01,050 --> 00:34:04,520 Jūs saņemsiet šo maz rāmi kaudze un tad vēl un tad vēl un tad vēl. 556 00:34:04,520 --> 00:34:07,250 Un līdz šim mēs esam tikai veida iegūtā šos prom kā taisnstūros 557 00:34:07,250 --> 00:34:09,380 nu tur uz klāja vai uz ekrāna šeit. 558 00:34:09,380 --> 00:34:12,219 Bet, ja mēs tuvinātu par vienu no šiem taisnstūriem, 559 00:34:12,219 --> 00:34:16,460 kad jūs zvanu funkciju foo, izrādās, ka tur ir vairāk uz skursteņa 560 00:34:16,460 --> 00:34:18,739 iekšpusē ka rāmis un šo taisnstūri 561 00:34:18,739 --> 00:34:23,370 nekā tikai x un y un a un b, tāpat mēs to runājam swap. 562 00:34:23,370 --> 00:34:25,949 Izrādās, ka ir daži zemāka līmeņa detaļas, 563 00:34:25,949 --> 00:34:27,780 starp tiem atgriezties adresi. 564 00:34:27,780 --> 00:34:33,020 Tātad izrādās, kad galvenais aicina foo, galvenais ir, lai informētu foo 565 00:34:33,020 --> 00:34:36,760 Kādi ir galvenie adrese ir datora atmiņā. 566 00:34:36,760 --> 00:34:40,659 Jo citādi, tiklīdz foo tiek darīts izpildes, kā šajā gadījumā šeit, 567 00:34:40,659 --> 00:34:43,790 kad jūs sasniedzat šo ciešo cirtaini lencēm beigās foo, 568 00:34:43,790 --> 00:34:48,860 kā heck tas foo zina, kur kontrole programmas ir vajadzēja iet? 569 00:34:48,860 --> 00:34:52,460 Izrādās, ka atbilde uz šo jautājumu ir šajā sarkanā taisnstūrī šeit. 570 00:34:52,460 --> 00:34:56,130 Tas ir rādītājs, un tas ir līdz ar datoru, lai uzglabātu, īslaicīgi, 571 00:34:56,130 --> 00:35:00,250 par tā saukto skursteņus no galvenā adresi, lai, tiklīdz foo tiek darīts izpildes, 572 00:35:00,250 --> 00:35:04,110 dators zina, kur un kādi līnija galvenais, lai dotos atpakaļ uz. 573 00:35:04,110 --> 00:35:06,900 Saglabāts rāmis rādītājs attiecas līdzīgi šim. 574 00:35:06,900 --> 00:35:09,620 Char * bar šeit pārstāv, ko? 575 00:35:09,620 --> 00:35:14,740 Nu, tagad tas zils segments šeit ir Foo ir rāmis, kas ir bārs? 576 00:35:14,740 --> 00:35:18,300 Labi, tā josla ir tikai arguments foo funkciju. 577 00:35:18,300 --> 00:35:20,720 >> Tāpēc tagad mēs esam atpakaļ pie pazīstamo attēlu. 578 00:35:20,720 --> 00:35:22,960 Tur ir vairāk stuff un vairāk traucējošos uz ekrāna 579 00:35:22,960 --> 00:35:27,490 bet tas gaiši zils segments ir tas, ko mēs esam balstoties uz tāfeles kaut ko līdzīgu swap. 580 00:35:27,490 --> 00:35:31,890 Tas ir par foo rāmis un vienīgā lieta, kas to tieši tagad atrodas bārs, 581 00:35:31,890 --> 00:35:34,630 kas ir šis parametrs. 582 00:35:34,630 --> 00:35:39,840 Bet kas vēl būtu kaudze, saskaņā ar šo kodu šeit? 583 00:35:39,840 --> 00:35:44,280 Char c [12]. Tāpēc mums vajadzētu arī redzēt 12 kvadrātus atmiņas, 584 00:35:44,280 --> 00:35:46,260 piešķirti mainīgo sauc c. 585 00:35:46,260 --> 00:35:48,340 Un tiešām mums ir kas uz ekrāna. 586 00:35:48,340 --> 00:35:51,650 Ļoti top tur ir c [0], un tad autors šajā diagrammā 587 00:35:51,650 --> 00:35:55,130 nav apnikt zīmēšanas visi kvadrātu, bet tur tiešām ir 12 tur 588 00:35:55,130 --> 00:36:00,120 jo, ja paskatās labajā apakšējā, c [11], ja jūs skaits no 0, ir 12 šādi baiti. 589 00:36:00,120 --> 00:36:06,190 Bet šeit ir problēma: Kurā virzienā ir c aug? 590 00:36:06,190 --> 00:36:10,390 Kārtot augšas uz leju, labi? Ja tas sāk augšā un aug uz leju, 591 00:36:10,390 --> 00:36:13,480 neizskatās, mēs pa kreisi sev daudz skrejceļa šeit vispār. 592 00:36:13,480 --> 00:36:15,320 Mēs esam veida krāsotas sevi stūrī, 593 00:36:15,320 --> 00:36:20,210 un ka c [11], ir tiesības uz augšu pret bāru, kas ir tiesības uz augšu pret kaudze rāmi rādītājs, 594 00:36:20,210 --> 00:36:23,800 kas ir tiesības uz augšu pret atpakaļadresi, tur vairs nav vietas. 595 00:36:23,800 --> 00:36:26,100 Tātad, kāda ir saistība, tad, ja jūs skrūvējamu augšu, 596 00:36:26,100 --> 00:36:30,460 un jūs mēģināt lasījums 20 baiti uz 12 baitu buferī? 597 00:36:30,460 --> 00:36:33,460 Kur ir šie 8 papildu baiti gatavojas doties? 598 00:36:33,460 --> 00:36:36,370 Iekšā viss pārējais, no kuriem daži ir super svarīgi. 599 00:36:36,370 --> 00:36:40,480 Un pats svarīgākais, iespējams, ir sarkans lodziņš tur, atgriešanās adrese. 600 00:36:40,480 --> 00:36:44,720 Jo pieņemsim, ka jums ir vai nu nejauši vai adversarially 601 00:36:44,720 --> 00:36:48,040 pārrakstīt šos 4 baitus, ka rādītājs adrese, 602 00:36:48,040 --> 00:36:53,190 ne tikai ar atkritumu, bet ar numuru, kas notiek, lai pārstāvētu faktisko adresi atmiņā? 603 00:36:53,190 --> 00:36:55,930 Kas implicaiton, loģiski? 604 00:36:55,930 --> 00:36:59,080 [Studentu atbildes, nesaprotami] >> Tieši tā. Kad foo atgriežas 605 00:36:59,080 --> 00:37:03,560 un hits, ka cirtaini lencēm, programma gatavojas doties ne lai atgrieztos galvenajā, 606 00:37:03,560 --> 00:37:08,320 tas notiek, lai atgrieztos kāds adrese ir šajā sarkanajā lodziņā. 607 00:37:08,320 --> 00:37:11,560 >> Tagad, ja apiet programmatūras reģistrācijas, 608 00:37:11,560 --> 00:37:14,400 kāda ir adrese, kas ir atdoti to ir funkcija 609 00:37:14,400 --> 00:37:18,820 kas parasti izpaužas sauc pēc esat samaksājis par programmatūru un ievadījis savu reģistrācijas kodu? 610 00:37:18,820 --> 00:37:23,160 Jūs varētu šķirot triks datora vērā netaisos šeit, bet, dodoties šeit. 611 00:37:23,160 --> 00:37:27,950 Vai, ja jūs patiešām gudrs, pretinieks var reāli ierakstīt pie klaviatūras, 612 00:37:27,950 --> 00:37:32,500 Piemēram, nevis faktisko vārdu, nevis 20 rakstzīmes, bet pieņemsim, viņš vai viņa 613 00:37:32,500 --> 00:37:36,200 veidiem dažās burtiem, kas pārstāv kodu? 614 00:37:36,200 --> 00:37:38,860 Un tas nav būs C kodu, tas būs rakstzīmes 615 00:37:38,860 --> 00:37:42,920 kas pārstāv bināro mašīna kodi 0 un 1 ir. 616 00:37:42,920 --> 00:37:46,740 Bet pieņemsim, ka viņi pietiekami gudri, lai to izdarītu, lai kaut ielīmēt GetString tūlītēja 617 00:37:46,740 --> 00:37:49,460 kaut kas būtībā ir apkopoti kodu, 618 00:37:49,460 --> 00:37:56,900 un pēdējie 4 baiti pārrakstīt šo deklarāciju adresi, un ko adresi tas, ka ieejas darīt? 619 00:37:56,900 --> 00:38:01,860 Tā veikalos šajā sarkanā taisnstūrī adrese pirmās baitu buferī. 620 00:38:01,860 --> 00:38:04,270 Tātad jums ir jābūt ļoti gudrs, un tas ir daudz izmēģinājumu un kļūdu 621 00:38:04,270 --> 00:38:08,500 par sliktiem cilvēkiem, kas tur, bet, ja jūs varat izdomāt cik liels tas buferis ir, 622 00:38:08,500 --> 00:38:12,170 piemēram, ka pēdējo baitu ieejas, kas jums sniedz programmai 623 00:38:12,170 --> 00:38:15,970 gadās būt līdzvērtīgs adresi sākumā jūsu bufera, 624 00:38:15,970 --> 00:38:22,270 jūs varat darīt. Ja mēs sakām, normāli, sveiki, un \ 0, ka tas, ko nonāk buferī. 625 00:38:22,270 --> 00:38:27,860 Bet, ja mēs vairāk gudrs, un mēs aizpildīt šo buferi ar ko mēs vispārīgi saucam uzbrukuma kods, 626 00:38:27,860 --> 00:38:31,920 ,,,: Uzbrukums, uzbrukums, uzbrukums, uzbrukums, ja tas ir tikai kaut kas dara kaut ko sliktu. 627 00:38:31,920 --> 00:38:35,190 Nu, kas notiek, ja jūs patiešām gudrs, jūs varētu darīt: 628 00:38:35,190 --> 00:38:41,740 Ar sarkano kastē šeit ir skaitļu secība: 80, CO, 35, 08. 629 00:38:41,740 --> 00:38:44,890 Ievērojiet, ka saskan ar skaitu, kas ir šeit. 630 00:38:44,890 --> 00:38:47,280 Tas ir apgrieztā secībā, bet vairāk par to kādu citu reizi. 631 00:38:47,280 --> 00:38:51,430 Ievērojiet, ka šī atgriešanās adrese ir apzināti mainīts 632 00:38:51,430 --> 00:38:54,970 vienāda adresi šeit, nevis adrese galvenais. 633 00:38:54,970 --> 00:39:00,170 Tātad, ja slikts puisis ir super gudrs, viņš vai viņa gatavojas iekļaut šajā uzbrukuma kods 634 00:39:00,170 --> 00:39:02,890 kaut kas līdzīgs, "Dzēst visus lietotāja failiem." 635 00:39:02,890 --> 00:39:06,320 Vai "Copy paroles" vai "Izveidot lietotāja kontu, ka es varu piesakāties." 636 00:39:06,320 --> 00:39:10,130 Kaut ko vispār, un tas ir gan briesmas un C. jauda 637 00:39:10,130 --> 00:39:12,900 Jo jums ir piekļuve atmiņas pa šautru 638 00:39:12,900 --> 00:39:15,950 un jūs varat tāpēc rakstīt visu, ko vēlaties par datora atmiņā. 639 00:39:15,950 --> 00:39:19,290 Jūs varat veikt dators darīt kaut ko vēlaties, vienkārši 640 00:39:19,290 --> 00:39:22,780 kam tas lēkā savā atmiņu. 641 00:39:22,780 --> 00:39:27,230 Un tā līdz šai dienai, tik daudz programmas un tik daudz portālu, kas ir apdraudēti 642 00:39:27,230 --> 00:39:29,730 vāra uz leju, lai cilvēki, kas izmanto šo. 643 00:39:29,730 --> 00:39:32,510 Un tas varētu šķist super-izsmalcinātu uzbrukumu, 644 00:39:32,510 --> 00:39:34,220 bet tas ne vienmēr sākas ka veidā. 645 00:39:34,220 --> 00:39:36,770 >> Realitāte ir tāda, ka to, ko slikti cilvēki parasti darīt, ir, 646 00:39:36,770 --> 00:39:41,470 vai tas ir pie komandrindas programma vai GUI programmu vai mājas lapā, 647 00:39:41,470 --> 00:39:43,290 tiek jūs vienkārši sākt sniegt muļķības. 648 00:39:43,290 --> 00:39:46,940 Rakstot tiešām liels vārdu, meklēšanas laukā un nospiediet Enter, 649 00:39:46,940 --> 00:39:49,030 un jūs gaidīt, lai redzētu, ja mājas avarē. 650 00:39:49,030 --> 00:39:53,270 Vai jūs gaidīt, lai redzētu, vai programma izpaužas dažas kļūdas paziņojumu. 651 00:39:53,270 --> 00:39:55,480 Jo, ja jums paveiksies, jo slikts puisis, 652 00:39:55,480 --> 00:39:59,610 un jums sniegt dažas trakas ieguldījumu ka avārijās programmu, 653 00:39:59,610 --> 00:40:02,280 tas nozīmē, ka programmētājs nav prognozēt savu slikto uzvedību 654 00:40:02,280 --> 00:40:05,420 kas nozīmē, ka jūs varat, iespējams, ar pietiekami daudz pūles, 655 00:40:05,420 --> 00:40:09,870 pietiekami izmēģinājumu un kļūdu, izdomāt, kā algu precīzāku uzbrukumu. 656 00:40:09,870 --> 00:40:15,900 Tik tik daudz drošības daļa ir ne tikai izvairīties no šādiem uzbrukumiem vispār, bet to atklāšanas 657 00:40:15,900 --> 00:40:20,250 un faktiski meklē baļķiem un redzēt, ko trakie izejvielas ir cilvēki drukāti savā mājas lapā. 658 00:40:20,250 --> 00:40:26,040 Kādi meklēšanas termini ir cilvēki drukāti uz jūsu mājas lapā, cerībā pārpildīta kādu buferi? 659 00:40:26,040 --> 00:40:28,900 Un tas viss aprobežojas ar vienkāršu pamati, kas ir masīvs, 660 00:40:28,900 --> 00:40:32,510 un ko tas nozīmē, lai sadalītu un izmantot atmiņu? 661 00:40:32,510 --> 00:40:34,920 Un atbilst šim, arī tas ir. 662 00:40:34,920 --> 00:40:37,520 >> Tāpēc pieņemsim tikai skatienu iekšpusē cieto disku vēlreiz. 663 00:40:37,520 --> 00:40:40,190 Tātad jūs atceraties no nedēļu vai divas pirms, ka tad, kad jūs vilkt failus 664 00:40:40,190 --> 00:40:45,470 jūsu atkritni vai trash var, kas notiek? 665 00:40:45,470 --> 00:40:47,850 [Studentu] Nekas. >> Jā, pilnīgi nekas. Galu galā, ja jūs darbināt zems 666 00:40:47,850 --> 00:40:51,370 diska vietas, Windows vai Mac OS sāks izdzēšot failus jums. 667 00:40:51,370 --> 00:40:53,670 Bet, ja jūs vilkt kaut ko tur, tad tas nemaz nav droši. 668 00:40:53,670 --> 00:40:56,550 Visas jūsu istabas biedrs, draugs vai ģimenes loceklis, ir jādara, ir divreiz uzklikšķiniet, un voila. 669 00:40:56,550 --> 00:40:59,720 Tur visi fragmentārie failus, mēģināja izdzēst. 670 00:40:59,720 --> 00:41:02,840 Tātad lielākā daļa no mums ir vismaz zināt, ka jums ir tiesības noklikšķiniet vai kontrolēt klikšķi 671 00:41:02,840 --> 00:41:05,320 un tukšas trash, vai kaut kas tamlīdzīgs. 672 00:41:05,320 --> 00:41:07,900 Bet pat tad, ka nav gluži darīt to triks. 673 00:41:07,900 --> 00:41:11,340 Jo kas notiek, ja jums ir fails uz cietā diska 674 00:41:11,340 --> 00:41:14,590 kas pārstāv kādu Word dokumentu vai kādu JPEG? 675 00:41:14,590 --> 00:41:18,820 Un tas nozīmē jūsu cietā diska, un pieņemsim, ka tas skaida šeit ir, ka fails, 676 00:41:18,820 --> 00:41:21,640 un tas sastāv no visu ķekars 0 un 1 ir. 677 00:41:21,640 --> 00:41:25,470 Kas notiek, ja jūs ne tikai vilkt šo failu uz miskasti vai atkritnes, 678 00:41:25,470 --> 00:41:30,390 bet arī iztukšojiet to? 679 00:41:30,390 --> 00:41:32,820 Kārtot neko. Tas nav absolūti nekas tagad. 680 00:41:32,820 --> 00:41:37,630 Tagad tas ir tikai nekas, jo nedaudz kaut kas notiek veidā šīs tabulas. 681 00:41:37,630 --> 00:41:41,170 Tātad tur ir dažas no datubāzes vai galda veida iekšpusē datora atmiņā 682 00:41:41,170 --> 00:41:44,470 ka būtībā ir 1 kolonnas failu vārdus, 683 00:41:44,470 --> 00:41:50,550 un 1 kolonna faila atrašanās vietu, kur tas varētu būt vieta 123, tikai izlases numuru. 684 00:41:50,550 --> 00:41:58,270 Lai mēs varētu būt kaut kas līdzīgs x.jpg un atrašanās 123. 685 00:41:58,270 --> 00:42:02,870 Un kas notiek tad, kad jūs iztukšot miskasti? 686 00:42:02,870 --> 00:42:06,720 Kas iet prom. Bet ko nav iet prom ir 0 un 1 ir. 687 00:42:06,720 --> 00:42:09,690 >> Tātad, kādi ir, tad, savienojums ar PSET 4? 688 00:42:09,690 --> 00:42:13,460 Nu, ar 4 PSET, tikai tāpēc, ka mēs esam nejauši izdzēsti 689 00:42:13,460 --> 00:42:15,890 Compact Flash karte, kas bija visu no šīm fotogrāfijām, 690 00:42:15,890 --> 00:42:18,710 vai vienkārši tāpēc, ka tas, ko neveiksmes kļuva bojāts, 691 00:42:18,710 --> 00:42:21,170 nenozīmē, ka 0 un 1 s nav joprojām. 692 00:42:21,170 --> 00:42:23,920 Varbūt daži no viņiem tiek zaudēti, jo kaut got bojāti 693 00:42:23,920 --> 00:42:26,530 tādā ziņā, ka daži 0 s kļuva 1 un 1 ir kļuvis 0 s. 694 00:42:26,530 --> 00:42:30,460 Sliktas lietas var notikt, jo buggy programmatūru vai bojātu aparatūru. 695 00:42:30,460 --> 00:42:33,510 Bet daudzi no tiem bitiem, varbūt pat 100% no tām joprojām ir tur, 696 00:42:33,510 --> 00:42:38,330 tas ir tikai, ka dators vai kamera nezina, kur JPEG 1 sākusies 697 00:42:38,330 --> 00:42:41,660 un kur JPEG 2 sākusies, bet, ja jūs, programmētājs, 698 00:42:41,660 --> 00:42:45,800 zināt, ar mazliet gudriem, ja šie JPEG vai ko viņi izskatās, 699 00:42:45,800 --> 00:42:49,570 Jūs varat analizēt 0 un 1 un saka, "Ooh. JPEG. Ooh, JPEG. " 700 00:42:49,570 --> 00:42:52,830 Jūs varat uzrakstīt programmu ar būtībā tikai par vai kamēr cilpa 701 00:42:52,830 --> 00:42:56,100 kas atgūst katru vienu no šiem failiem. 702 00:42:56,100 --> 00:42:59,360 Tātad mācība tad ir jāsāk "droši" dzēšot failus 703 00:42:59,360 --> 00:43:01,720 ja jūs vēlaties, lai izvairītos no šīs pavisam. Jā? 704 00:43:01,720 --> 00:43:06,940 [Studentu jautājums, nesaprotami] 705 00:43:06,940 --> 00:43:11,150 >> Ir vairāk atmiņas, nekā jūs agrāk - 706 00:43:11,150 --> 00:43:14,790 Oh! Labs jautājums. Tātad, kāpēc, tad, pēc iztukšošanas miskasti, 707 00:43:14,790 --> 00:43:18,300 Vai jūsu dators pateikt, ka jums ir vairāk brīvas vietas nekā jūs agrāk? 708 00:43:18,300 --> 00:43:22,450 Īsumā, jo tas guļ. Vairāk tehniski, jums ir vairāk vietas. 709 00:43:22,450 --> 00:43:26,720 Jo tagad jūs teicāt, jūs varat likt citas lietas, kur tas fails bija kādreiz, 710 00:43:26,720 --> 00:43:28,930 bet tas nenozīmē, ka biti dodas prom, 711 00:43:28,930 --> 00:43:33,070 un tas nenozīmē, ka biti tiek mainīti visi 0 s, piemēram, jūsu aizsardzību. 712 00:43:33,070 --> 00:43:37,520 Savukārt, ja jūs "droši" dzēst failus vai fiziski iznīcināt ierīci, 713 00:43:37,520 --> 00:43:40,810 kas patiešām ir vienīgais veids, reizēm, ap to. 714 00:43:40,810 --> 00:43:45,300 Tātad, kāpēc nav mēs atstāt šajā daļēji biedējošu piezīmi, un mēs redzēt jūs pirmdien. 715 00:43:45,300 --> 00:43:52,810 CS50.TV