1 00:00:00,000 --> 00:00:02,760 [Powered by Google Translate] [ASTE 5] 2 00:00:02,760 --> 00:00:04,760 [David J. Malan, Harvard Unibertsitatea] 3 00:00:04,760 --> 00:00:11,990 [Hau da CS50.] [CS50.TV] 4 00:00:11,990 --> 00:00:17,780 [Woman] zuen etzanda; buruz, ez dakit. 5 00:00:17,780 --> 00:00:20,300 [Man] Beraz, zer dakigu? 6 00:00:20,300 --> 00:00:24,120 [Woman] 9:15 That, Ray Santoya ATM, izan zen. 7 00:00:24,120 --> 00:00:27,420 [Man] Beraz, galdera da, zer zen egiten 9:16 al du? 8 00:00:27,420 --> 00:00:29,980 [Woman] 9 mm Shooting zerbait. 9 00:00:29,980 --> 00:00:31,900 Agian, sniper ikusi zuen. 10 00:00:31,900 --> 00:00:34,000 [Man] Edo berarekin zuen lan. 11 00:00:34,000 --> 00:00:36,330 [Woman] Itxaron. Joan atzera. 12 00:00:36,330 --> 00:00:38,330 [Man] Zer duzu ikusi? 13 00:00:38,330 --> 00:00:44,520 [♫ Suspenseful music ♫] 14 00:00:44,520 --> 00:00:48,320 [Woman] Ekarri bere aurpegia gora. Full screen. 15 00:00:48,320 --> 00:00:51,230 [Man] Bere betaurrekoak. >> Hausnarketa bat da. 16 00:00:51,230 --> 00:01:00,810 [♫ Suspenseful music ♫] 17 00:01:00,810 --> 00:01:03,580 [Man] That Nuevita beisbol taldea. Beren logo. 18 00:01:03,580 --> 00:01:07,790 [Woman] Eta duenarentzat jaka hori janzten zuen hitz egiten. 19 00:01:07,790 --> 00:01:13,730 >> [David Malan] Beraz, aste honetan CS50 5 da, eta, gaur egun, telebista eta film pixka bat hondatu dizugu. 20 00:01:13,730 --> 00:01:16,170 Beraz, betiere, ikuskizun bat ikusten ari zaren hau hemen bezala, 21 00:01:16,170 --> 00:01:19,910 eta polizia esaten "Ezin hori garbitu duzu?" edo "Hobetu," 22 00:01:19,910 --> 00:01:21,900 ez dago mundu errealean hobetzeko. 23 00:01:21,900 --> 00:01:25,220 Izan ere, zer lortu duzula antzeko zerbait txiki bat da. 24 00:01:25,220 --> 00:01:27,570 Bota dut orritik argazki langile bat. 25 00:01:27,570 --> 00:01:30,980 Photoshop izeneko programa bat da. 1 2 Bowdens da, 26 00:01:30,980 --> 00:01:36,300 1 3 Bowdens benetan, gaur egun, andrea Bowden direlako, hemen ere, Rob eta Paul. 27 00:01:36,300 --> 00:01:41,950 Baina hemen Rob da pantailan, eta zoom glint horretan dugu, baina beti bere begi izan bada, 28 00:01:41,950 --> 00:01:47,600 zer ikusi benetan zer ikusten duzun duzuna lortzen da. 29 00:01:47,600 --> 00:01:51,690 Hau da "hobetuak", beraz, "CSI" oker pixka bat. 30 00:01:51,690 --> 00:01:55,190 Beste clip, "CSI" pixka bat luzeagoa bada jaso ahal izango dugu. 31 00:01:55,190 --> 00:01:58,500 Polit bat Esaldi aurrerantzean utter nahi izanez gero 32 00:01:58,500 --> 00:02:10,280 soinu duenean, benetan, ez du deus esaten ari zara zure lagunekin teknikoa. 33 00:02:10,280 --> 00:02:12,970 >> [Man] aste izan dut Killer Cabby hilketa ikertzen 34 00:02:12,970 --> 00:02:15,360 bat morbid zenbait lilura. 35 00:02:15,360 --> 00:02:17,160 [Woman # 1] Hau da denbora errealean. 36 00:02:17,160 --> 00:02:22,930 [Woman # 2] Visual Basic erabiliz GUI interfaze bat sortu dut, IP helbide bat ikusi dut jarraipena bada. 37 00:02:22,930 --> 00:02:29,570 >> [Malan] Beraz, audio out of sync alde batera utzita, GUI interfaze bat sortzeko Visual Basic erabiliz 38 00:02:29,570 --> 00:02:31,820 IP helbide bat jarraitzeko erabateko zentzugabekeria da. 39 00:02:31,820 --> 00:02:33,840 Egun horiek ez dira erabili nahi duzun Visual Basic, 40 00:02:33,840 --> 00:02:38,920 GUI bat beharrik gabe, eta IP helbidea, epe teknikoki zehatzak izan zen. 41 00:02:38,920 --> 00:02:41,730 Beraz, begi bat mantentzeko hauetan, eta nire gogokoenetako bat: 42 00:02:41,730 --> 00:02:45,070 Hau apur bat gehiago urrutira, beste hizkuntza bat jakin behar duzu delako. 43 00:02:45,070 --> 00:02:47,860 Objective-C izeneko hizkuntza bat, C. superset bat da. 44 00:02:47,860 --> 00:02:51,960 Horrek esan nahi du bere C gehi beste ezaugarri batzuk, objektuetara bideratutako programazioaren artean. 45 00:02:51,960 --> 00:02:55,070 Eta hizkuntza honetan Apple iOS programazio ezagun da. 46 00:02:55,070 --> 00:02:58,760 Eta, beraz, hemen beste ikuskizun bat guztiz klip bat, "Zenbakiak," 47 00:02:58,760 --> 00:03:02,450 benetan begiratuz gero, zure mugikorrak eta eteteko une estuki, 48 00:03:02,450 --> 00:03:07,700 ikusiko duzu zer bilatzen ari dira, ez da nahiko zer ari da deskribatzen. 49 00:03:07,700 --> 00:03:11,170 Eta utzi hainbat audio konektore bat saiatu me hemen ikusi eta ezin badugu 50 00:03:11,170 --> 00:03:13,780 mantendu sync audio denbora hau. 51 00:03:13,780 --> 00:03:20,530 Ematen dizut "Zenbakiak". 52 00:03:20,530 --> 00:03:23,240 >> [Man # 1] 32-bit IPv4 helbidea da. 53 00:03:23,240 --> 00:03:38,930 [Man # 2] IP, Internet da. >> Sare pribatua. Anita sare pribatua da. 54 00:03:38,930 --> 00:03:43,810 [Malan] Larreina. Objective-C da,, eta kid batzuk kolorazioa programa, 55 00:03:43,810 --> 00:03:51,140 dezakezu, agian, infer aldagaia bertan izena. 56 00:03:51,140 --> 00:03:54,410 Beraz, ondoren, izan zen "Zenbakiak". Horregatik, gaur eta aste honetan aurkeztu 57 00:03:54,410 --> 00:03:57,740 Kernet eta, beraz, arazoak testuinguruan mundua pixka bat. 58 00:03:57,740 --> 00:04:00,590 Gaur egun, abbreviated hitzaldi bat izango da, ez dago hemen ekitaldi berezi bat delako 59 00:04:00,590 --> 00:04:05,530 gero, eta, beraz, peek bat hartu dugu, eta tease bai ikasle eta guraso alike gaur egun 60 00:04:05,530 --> 00:04:07,420 horizonte buruzko gauza batzuk. 61 00:04:07,420 --> 00:04:12,240 Horien artean, astelehenetik, batzuk gehiago ikaskideekin izango duzu. 62 00:04:12,240 --> 00:04:16,050 , EdX, Harvard eta ekimena MITs online, Open Courseware 63 00:04:16,050 --> 00:04:19,120 eta gehiago, Harvard-en campus astelehena, abian jartzeko. 64 00:04:19,120 --> 00:04:21,490 Horrek esan nahi du, etorri astelehena izango duzu - azken kopuruan, 65 00:04:21,490 --> 00:04:26,210 86.000 osagarriak ikaskideekin jarraituz egingo batera CS50-en hitzaldiak 66 00:04:26,210 --> 00:04:29,170 eta atal eta walkthroughs eta arazo multzo. 67 00:04:29,170 --> 00:04:32,350 Eta honen barruan, inaugurazio klase kide bihurtu ahal izango duzu 68 00:04:32,350 --> 00:04:35,090 CS50 eta orain CS50x. 69 00:04:35,090 --> 00:04:39,310 >> Horren barruan, gaur egun, konturatzen ez dagoela upsides batzuk izango baita. 70 00:04:39,310 --> 00:04:43,790 Hau egiteko prest, ikasle gehiegizko kopurua, 71 00:04:43,790 --> 00:04:47,180 nahikoa da esan nahi, nahiz eta 108 TFS eta CAk dugu, 72 00:04:47,180 --> 00:04:50,790 ez da nahiko onena ikasle / irakasle ratioa 80.000 ikasle beste behin hit dugu. 73 00:04:50,790 --> 00:04:52,850 Beraz, ez dugu hainbeste arazo kalifikatzean eskuz ezartzen. 74 00:04:52,850 --> 00:04:55,920 Beraz, aste honetan sartu arazoa multzoa CS50 Check izango da, 75 00:04:55,920 --> 00:04:58,450 den, komando-lerroko tresna izango aparatuaren barruan 76 00:04:58,450 --> 00:05:01,200 eguneratu ondoren, geroago, asteburu honetan jasoko duzu, 77 00:05:01,200 --> 00:05:03,200 eta komando bat exekutatu ahal izango duzu, begiratu 50, 78 00:05:03,200 --> 00:05:06,500 zure pset propioa, eta feedback batzuk jasoko duzu zure programa den ala ez 79 00:05:06,500 --> 00:05:11,160 zuzena edo okerra diseinu hainbat zehaztapen dugun emandako datuen arabera. 80 00:05:11,160 --> 00:05:13,580 Beraz, gero eta arazo multzo zehaztapena eta 81 00:05:13,580 --> 00:05:17,240 ikaskideekin CS50x da hau izango baita. 82 00:05:17,240 --> 00:05:19,230 >> Beraz, arazo multzo 4 Kernet buruzko informazio guztia. 83 00:05:19,230 --> 00:05:21,940 Eta pieza hau izan zen real-bizitza stuff batzuk inspiratuta, 84 00:05:21,940 --> 00:05:24,620 Horren bidez, eskola graduondoko I, interned pixka bat dut 85 00:05:24,620 --> 00:05:28,650 Middlesex County District Fiskala Office auzitegi-lana egiten ari 86 00:05:28,650 --> 00:05:31,650 beren auzitegiko ikertzailea markagailuan, eta hori zer zenbatekoa 87 00:05:31,650 --> 00:05:35,260 da, eta aste gutxi batzuk iragan aipatu uste dut, Mass Estatuko polizia edo beste 88 00:05:35,260 --> 00:05:39,000 litzateke etorriko, jaregin off zuten disko gogorretan eta CDak eta disketeak bezala gauzak 89 00:05:39,000 --> 00:05:42,340 eta antzekoak, eta ondoren Kernet bulegoan helburua izan zen zertan den ala ez adierazten du 90 00:05:42,340 --> 00:05:44,600 ez zen, edo ez zen nolabaiteko frogak. 91 00:05:44,600 --> 00:05:48,010 Berezia Investigations Unitateak izan zen, beraz,, zuri-lepoko delitua izan da, 92 00:05:48,010 --> 00:05:52,350 troubling delituak sort zen, 93 00:05:52,350 --> 00:05:55,990 ezer euskarri digitala nolabaiteko hartzen; bihurtzen da, eta ez hori jende askok 94 00:05:55,990 --> 00:05:59,370 idatzi email bat esaten "egin nuen." 95 00:05:59,370 --> 00:06:03,290 Beraz, sarritan Kernet bilaketak horiek ez aktibatu askoz fruta hori guztia, 96 00:06:03,290 --> 00:06:05,850 baina batzuetan, pertsona horiek e-posta idatzi litzateke. 97 00:06:05,850 --> 00:06:08,490 Beraz, batzuetan, ahaleginak saritu ziren. 98 00:06:08,490 --> 00:06:14,420 >> Baina auzitegi pset hau eramango, 4 pset grafikoak pixka bat dugu sartuz. 99 00:06:14,420 --> 00:06:18,260 Beraz, hartu seguruenik, eman JPEGs, GIFs eta egun hauetan bezala, gauza horiek, 100 00:06:18,260 --> 00:06:21,640 baina benetan horri buruz uste izanez gero, irudi bat, askoz Rob aurpegia bezala, 101 00:06:21,640 --> 00:06:24,430 puntu sekuentzia bat, edo pixel modelatu daiteke. 102 00:06:24,430 --> 00:06:26,680 Orain, Rob aurpegia kasuan, ez da kolore-mota guztiak, 103 00:06:26,680 --> 00:06:29,940 eta banakako puntuak, otherwide pixel bezala ezagutzen hasi ginen, 104 00:06:29,940 --> 00:06:31,610 behin sartu txikiagotzeko hasi ginen 105 00:06:31,610 --> 00:06:35,590 Baina pixka bat errazteko mundu bada, eta besterik gabe esan hau hemen dagoela Rob 106 00:06:35,590 --> 00:06:40,560 , zuri-beltza eta, ordezkatzen beltza eta zuria bakarrik erabili ahal izango dugu bitarrik. 107 00:06:40,560 --> 00:06:44,960 Bitarra erabili behar badugu, 1 edo 0, irudi hori bera adierazi ahal izango dugu 108 00:06:44,960 --> 00:06:51,970 Rob bit patroi hau irribarrez aurpegia: 11000011 adierazten du 109 00:06:51,970 --> 00:06:55,160 zuria, zuria, beltza, beltza, beltza, beltza, zuri-zuri. 110 00:06:55,160 --> 00:06:59,290 Eta, beraz, ez da jauzi bat erraldoia, eta, ondoren, argazki koloretsua buruz hitz egiten hasteko. 111 00:06:59,290 --> 00:07:01,920 Things zela Facebook ikusi edo kamera digital bat hartu, 112 00:07:01,920 --> 00:07:04,730 baina, zalantzarik gabe, orduan, kolore, bit gehiago behar duzu. 113 00:07:04,730 --> 00:07:08,470 Eta argazkiak munduan oso ohikoa da, ez 1-bit kolorea erabiltzeko, 114 00:07:08,470 --> 00:07:12,730 hau iradokitzen du, baina 24-bit kolorea, non lortu benetan milioika kolore. 115 00:07:12,730 --> 00:07:15,430 Beraz, kasua denean handitutako Rob begi, 116 00:07:15,430 --> 00:07:19,270 koloretsua aukera desberdinak milioika edozein zenbaki izan zen. 117 00:07:19,270 --> 00:07:22,260 >> Beraz, hau aurkezten dugu arazo multzo 4 Bisita gidatua, eta baita, 118 00:07:22,260 --> 00:07:27,050 gaur izango da, 3:30 ohiko 2:30 ordez delako Ostirala hitzaldia hemen. 119 00:07:27,050 --> 00:07:29,930 Baina bideo online izango da, ohikoa den bezala, bihar. 120 00:07:29,930 --> 00:07:31,880 Ere dugu sartzeko beste fitxategi-formatua. 121 00:07:31,880 --> 00:07:34,150 Beraz, hau da nahita ekarri beldurra bilatzeko lehen, 122 00:07:34,150 --> 00:07:38,980 baina C struct dokumentazioa batzuk. 123 00:07:38,980 --> 00:07:42,280 Bihurtzen da, Microsoft-ek, urte batzuk lehenago, formatu hau lagundu zabaltzea, 124 00:07:42,280 --> 00:07:46,630 izeneko bitmap file formatua, BMP, eta hori izan da super-simple, 125 00:07:46,630 --> 00:07:50,390 koloretsua grafiko fitxategi-formatua izan zen denbora luzez erabiltzen 126 00:07:50,390 --> 00:07:53,640 eta, batzuetan, oraindik mahaigain on wallpapers. 127 00:07:53,640 --> 00:07:57,410 Behar dela uste duzu bada, Windows XP eta gogor mendiak eta zeru urdina, 128 00:07:57,410 --> 00:08:00,660 izan zen, normalean BMP, edo bitmap image, eta bitmap 129 00:08:00,660 --> 00:08:03,340 Gurekin fun dute pixka bat, konplexutasun delako. 130 00:08:03,340 --> 00:08:05,640 Ez da nahiko 0 eta 1-en sare hau bezain erraza; 131 00:08:05,640 --> 00:08:10,680 ordez, fitxategi baten Irteeran goiburu bat bezala gauzak duzu. 132 00:08:10,680 --> 00:08:15,520 Beraz, beste era batera esanda, bmp fitxategia barruan sorta oso bat da, 0 eta 1-en 133 00:08:15,520 --> 00:08:18,070 baina ez batzuek 0 eta 1 hor. 134 00:08:18,070 --> 00:08:21,450 Eta bihurtzen da zer esan ziurrenik urte hartu dugu ematen, 135 00:08:21,450 --> 00:08:27,040 fitxategia. doc edo. xls edo. mp3 edo. mp4 bezalako formatu, 136 00:08:27,040 --> 00:08:29,910 edozein izanda ere ezagutzen ari zaren fitxategi-formatu. 137 00:08:29,910 --> 00:08:31,900 Beno, zer esan nahi du, nahiz eta fitxategi formatu bat izan? 138 00:08:31,900 --> 00:08:35,740 Egunaren amaieran delako, fitxategi horiek guztiak erabili behar dugun besterik ez dute 0 eta 1 139 00:08:35,740 --> 00:08:39,950 eta, agian, horiek 0 eta 1 ordezkatzen a, b, c, ASCII edo antzeko baten bidez, 140 00:08:39,950 --> 00:08:42,030 baina egunaren amaieran bitartez, besterik ez da 0 eta 1-en. 141 00:08:42,030 --> 00:08:45,300 >> Beraz, gizakiak besterik ez, noizean behin, erabaki berri bat fitxategi-formatua asmatu 142 00:08:45,300 --> 00:08:49,420 non zer bit ereduak benetan esan nahi homologatuko dute. 143 00:08:49,420 --> 00:08:52,790 Eta hemen, kasu honetan, folks duten bitmap fitxategi-formatua diseinatu 144 00:08:52,790 --> 00:08:58,260 esan zuen, eta bitmap file byte lehen, desplazamendu 0 karakterearen bidez adierazten da, ez dago, 145 00:08:58,260 --> 00:09:02,320 batzuk cryptically izeneko aldagaia izeneko bfType ez da izango, 146 00:09:02,320 --> 00:09:06,510 file bitmap mota nabarmentzen da; file bitmap mota da. 147 00:09:06,510 --> 00:09:10,780 Infer dezakezu, agian, errenkadan bigarren desplazamendu 2, 2 byte kopurua, 148 00:09:10,780 --> 00:09:15,980 0 eta 1 adierazten duen zer eredu bat dauka? 149 00:09:15,980 --> 00:09:18,320 Zerbait tamaina, eta hortik doa. 150 00:09:18,320 --> 00:09:20,660 Beraz, arazo multzo 4, gauza horiek batzuetan zehar egingo ibili. 151 00:09:20,660 --> 00:09:24,480 >> Ez dugu, azkenean, horiek guztiak buruz zaintzen, baina konturatu interesgarria hasten da 152 00:09:24,480 --> 00:09:30,780 lerroan edo 54 byte, rgbtBlue, Green eta Red inguruan. 153 00:09:30,780 --> 00:09:35,280 Akronimoa RGB, gorria berdea urdina entzun dituzun inoiz bada, hau erreferentzia bat da. 154 00:09:35,280 --> 00:09:37,840 Bihurtzen da delako ostadarraren kolore guztiak margotzen dezakezu 155 00:09:37,840 --> 00:09:41,580 gorria eta urdina eta berdea konbinazio batzuk. 156 00:09:41,580 --> 00:09:46,560 Eta, hain zuzen ere, lehen proiektoreak batzuk gelan gurasoak gogoratzen dezake. 157 00:09:46,560 --> 00:09:49,360 Gaur egun, ikusi besterik ez duzu 1 bright argia lente bat irteten. 158 00:09:49,360 --> 00:09:52,870 Baina eguneko, lens gorria, urdina lentearen, eta lente berdea izan duzu 159 00:09:52,870 --> 00:09:56,620 eta elkarrekin zuzendutako pantaila dute eta koloretsua irudi bat osatu du. 160 00:09:56,620 --> 00:09:59,590 Eta sarritan erdiko eskola eta goi eskola lente horiek izango litzateke 161 00:09:59,590 --> 00:10:02,680 , eta, beraz, gero eta, beraz, apur bat askew bikoitzak edo hirukoitzak irudiak ikusteko moduko zinen, 162 00:10:02,680 --> 00:10:07,500 baina ideia izan zen. Gorria eta berdea eta argi urdina irudi bat pintura izan duzu. 163 00:10:07,500 --> 00:10:09,570 Eta printzipio hori bera da ordenagailuak erabiltzen da. 164 00:10:09,570 --> 00:10:12,000 >> Beraz, erronka artean, eta, ondoren, arazo ezarri 4 165 00:10:12,000 --> 00:10:16,080 zenbait gauza bat izango da; benetan irudi bat tamainaz aldatu. 166 00:10:16,080 --> 00:10:18,050 0 eta 1-en eredu bat hartu, 167 00:10:18,050 --> 00:10:22,840 irudikatu 0 eta 1 zatien egitura bat zer hau atsegin dute. 168 00:10:22,840 --> 00:10:26,800 eta, ondoren, irudikatu nola pixel errepikatzeko: gorri, blues, berde 169 00:10:26,800 --> 00:10:32,460 beraz, barruan irudi bat itxura hau hasiera batean, baliteke itxura hau ondoren ordez. 170 00:10:32,460 --> 00:10:35,590 Beste erronka artean, ere, duzula banatu egingo da izango 171 00:10:35,590 --> 00:10:38,900 uneko fitxategiaren irudi bat auzitegi-kamera digital bat 172 00:10:38,900 --> 00:10:42,410 eta kamera bat da, Bazen behin, izan ziren argazki sorta osoa. 173 00:10:42,410 --> 00:10:47,030 Arazoa da, ezabatu ustekabean edo irudia hondatuta dago nolabait. 174 00:10:47,030 --> 00:10:51,040 Bad kamera digital gauza da, eta, beraz, azkar kopiatu dugu, 0 eta 1 175 00:10:51,040 --> 00:10:55,410 off txartela, gorde horiek guztiak 1 fitxategi handi batean, eta gero entregatu ahal izango dizugu 176 00:10:55,410 --> 00:11:00,000 arazoa ezarri 4 horrela C programa berreskuratu idatz dezakezu. 177 00:11:00,000 --> 00:11:02,660 JPEGs horiek guztiak, haien. 178 00:11:02,660 --> 00:11:06,280 Eta JPEGs hori bihurtzen da, nahiz eta fitxategi formatu konplexu samarra ari dira, 179 00:11:06,280 --> 00:11:09,580 aurpegia irribarretsu hemen baino askoz ere konplexuagoak dira. 180 00:11:09,580 --> 00:11:14,320 Bihurtzen da JPEG bakoitza 0 eta 1-en berdina eredu batekin hasten da. 181 00:11:14,320 --> 00:11:18,820 Bitartean loop bat edo begizta edo antzekoak erabiliz, beraz, 182 00:11:18,820 --> 00:11:22,350 0 eta 1 guztiak, auzitegiko irudi batetik bestera joateko dezakezu 183 00:11:22,350 --> 00:11:26,670 eta arazo multzo zehaztapen definitzen berezia eredu hori ikusten duzun aldi bakoitzean, 184 00:11:26,670 --> 00:11:29,770 bere gain hartuko, 'Oh, hemen da, dezakezu probabilitatea oso altua, 185 00:11:29,770 --> 00:11:33,520 JPEG baten hasiera, eta ahalik eta azkarren aurkitzen duzun bezala ereduarekin berean, 186 00:11:33,520 --> 00:11:36,050 byte edo kilobyteko edo megabyte kopuru bat geroago, 187 00:11:36,050 --> 00:11:40,550 demagun dezakezu 'Ooh! Hemen da bigarren JPEG, photo lehen bat ondoren hartu dut. 188 00:11:40,550 --> 00:11:44,720 Fitxategi hori irakurtzeko stop me, hasi berri bat hau idazten. 189 00:11:44,720 --> 00:11:49,980 Eta zure programa pset 4 irteera adina 50 JPEGs izango da. 190 00:11:49,980 --> 00:11:52,400 Eta ez bada 50 JPEGs, begizta apur bat behar duzu. 191 00:11:52,400 --> 00:11:55,580 JPEGs kopurua infinitua bat izanez gero, begizta infinitu bat behar duzu. 192 00:11:55,580 --> 00:11:58,280 Beraz, oso kasu bat nahiko arrunta, izango da. 193 00:11:58,280 --> 00:12:00,280 Hori zer horizonte. 194 00:12:00,280 --> 00:12:03,740 >> Quiz 0, atzean. Konturatzen, nire e-posta bakoitzeko, beti dago folks 195 00:12:03,740 --> 00:12:06,820 diren bi neutral, pozik, ordenatu, eta inguruan triste quiz 0 denbora. 196 00:12:06,820 --> 00:12:10,160 Eta mesedez ez iristea, me, burua TFS, Zamyla, zure TF 197 00:12:10,160 --> 00:12:14,120 edo Eus-ko badakizula gauzak nola joan eztabaidatu nahi izanez gero. 198 00:12:14,120 --> 00:12:16,460 >> Beraz, gurasoek txunditzea hemen, gelan, 199 00:12:16,460 --> 00:12:23,990 CS50 liburutegia zer da? Good job. 200 00:12:23,990 --> 00:12:32,280 Zer da CS50 liburutegia? Bai? [Student erantzun, ulertezina] 201 00:12:32,280 --> 00:12:35,730 >> Ongi, ona da. Beraz, kodea multzo prewritten bat da, langileak, idatzi, 202 00:12:35,730 --> 00:12:38,460 ematen dizugu, komun funtzionalitate batzuk eman. 203 00:12:38,460 --> 00:12:42,290 Stuff nahi kate bat lortzeko me get me int bat, hemen azaltzen diren funtzio guztiak. 204 00:12:42,290 --> 00:12:45,260 Gaur egun aurrera, prestakuntza-gurpil hauek benetan hartu off hasten gara. 205 00:12:45,260 --> 00:12:48,230 Beraz duzu "katea" kentzeko hasiko dugu, 206 00:12:48,230 --> 00:12:52,790 sinonimo besterik ez den, oroitzapen, zer benetako datu-mota izan zen? char *. 207 00:12:52,790 --> 00:12:57,020 Beraz, guraso, izan zen ziurrenik ona, eta, beraz, char * ikusi dugu 208 00:12:57,020 --> 00:13:00,810 pantailan gehiago ezabatu dugu "katea" gure hiztegia, 209 00:13:00,810 --> 00:13:02,760 gutxienez, benetan kodea idatziz dator. 210 00:13:02,760 --> 00:13:06,240 Era berean, funtzio hauetako batzuk erabiliz askoz uzteko dugu, 211 00:13:06,240 --> 00:13:08,390 gure programa sofistikatuagoa lortzeko delako 212 00:13:08,390 --> 00:13:11,370 baino besterik ez idazteko gonbita keinukariak bertan eseri duten programak, 213 00:13:11,370 --> 00:13:13,580 Erabiltzaileak zerbait idatzi sartu zain 214 00:13:13,580 --> 00:13:15,220 Inputak jasoko duzu beste nonbait from. 215 00:13:15,220 --> 00:13:18,720 Esate baterako, lortuko duzu, disko gogor lokalean bit serie bat. 216 00:13:18,720 --> 00:13:23,340 Ordez duzu etorkizunean sare konexio bat, web batzuk nonbait. 217 00:13:23,340 --> 00:13:27,460 Hargatik geruza hau lehen aldiz zuritu, eta tira CS50 tresnaren 218 00:13:27,460 --> 00:13:32,300 eta izeneko fitxategi hau CS50.h, izan zara zorrotz asteak barne. 219 00:13:32,300 --> 00:13:34,380 >> Baina benetan ikusi honen barruan. 220 00:13:34,380 --> 00:13:38,250 Beraz, blue fitxategia goiko iruzkinak sorta osoa besterik ez da, 221 00:13:38,250 --> 00:13:41,340 bermerik informazioa eta lizentzien. Hau da paradigma komun bat sort 222 00:13:41,340 --> 00:13:44,600 software, software egun hauetan asko dagoelako zer deitzen "open source", 223 00:13:44,600 --> 00:13:46,940 Horrek esan nahi du norbaitek kodea idatzi du 224 00:13:46,940 --> 00:13:50,060 eta libreki eskuragarri egin da, eta ez bakarrik erabiltzeko, eta exekutatu, 225 00:13:50,060 --> 00:13:53,660 baina, benetan, irakurri eta aldatu, eta zure lana integratzeko. 226 00:13:53,660 --> 00:13:55,790 Beraz, zer egin duzun, open source software, 227 00:13:55,790 --> 00:13:58,030 oso txikia bada ere. 228 00:13:58,030 --> 00:14:01,860 Azken iruzkinak behera joan I bada, baina, hasteko, gauza batzuk gehiago ezagutzen ikusteko dugu. 229 00:14:01,860 --> 00:14:08,090 Beraz, hemen goian nabarituko, CS50.h fitxategia goiburu fitxategiak sorta osoa. 230 00:14:08,090 --> 00:14:11,160 Orain, horietako gehienak ez dugu ikusi aurretik, baina bat da 231 00:14:11,160 --> 00:14:15,640 ezagutzen; horietako zein, ikusi dugu, labur-labur bada ere, eta, beraz, orain arte? 232 00:14:15,640 --> 00:14:18,720 Bai, liburutegi estandarra. Stdlib.h malloc, 233 00:14:18,720 --> 00:14:21,590 beraz, behin memoria dinamiko esleipena buruz hitz egiten hasi ginen, 234 00:14:21,590 --> 00:14:24,960 itzuli gara datorren astean ere, hasi fitxategi hori barne. 235 00:14:24,960 --> 00:14:29,660 Bihurtzen da boolearra eta egia eta gezurra ez benetan C existitzen, per se, 236 00:14:29,660 --> 00:14:32,460 besteak beste, fitxategi hau ez dago hemen. 237 00:14:32,460 --> 00:14:35,770 Beraz, dugu, asteak, standard bool.h barne 238 00:14:35,770 --> 00:14:39,020 bool, egia edo gezurra. nozioa erabili ahal izango duzu 239 00:14:39,020 --> 00:14:41,830 Hau gabe, faltsua da ordenatzeko eta int bat erabili nahi duzun 240 00:14:41,830 --> 00:14:45,920 eta arbitrarioki bere gain hartzen 0 faltsua da, eta 1, egia da. 241 00:14:45,920 --> 00:14:49,980 >> Orain, joan badugu behera gehiago nahi izanez gero, hemen gure kate baten definizioa da. 242 00:14:49,980 --> 00:14:54,820 Bihurtzen da, Nik esan baino lehen, non * hau da, ez du benetan axola. 243 00:14:54,820 --> 00:14:56,750 Espazioa ere izan dezakezu inguruan. 244 00:14:56,750 --> 00:15:01,550 Dugu, seihileko honetan izan dira, hau sustatzen du, halaber, argi utzi * mota egin du. 245 00:15:01,550 --> 00:15:05,370 Baina konturatzen bezala, ohikoa da, ez apur bat gehiago komuna bada, jarri 246 00:15:05,370 --> 00:15:07,480 baina funtzionalki, gauza bera da. 247 00:15:07,480 --> 00:15:11,070 Baina orain, irakurri dugu behera gehiago nahi izanez gero, dezagun hitza begirada, GetInt 248 00:15:11,070 --> 00:15:15,350 erabili dugu, hori delako, agian, beste ezer seihilekoa hau baino lehen. 249 00:15:15,350 --> 00:15:19,620 Eta hemen da GetInt. Hau zer da? 250 00:15:19,620 --> 00:15:24,650 Prototipoa da. Beraz, askotan, jarri dugu prototipoak gure gailurretan c fitxategiak 251 00:15:24,650 --> 00:15:28,190 baina ere egin dezakezu goiburu-fitxategiak, h fitxategiak, jarri prototipoak 252 00:15:28,190 --> 00:15:32,110 hau hemen bezala, eta, beraz, orduan funtzio batzuk idatzi 253 00:15:32,110 --> 00:15:36,790 nahi duzun beste pertsona batzuk erabili ahal izateko, eta hori da hain zuzen ere kasuan CS50 liburutegia, 254 00:15:36,790 --> 00:15:40,900 ezartzea, ez bakarrik zure funtzioak CS50.c antzeko zerbait, 255 00:15:40,900 --> 00:15:46,720 ere jarri prototipoen ez fitxategi goialdean, baina Goiburu-fitxategi baten goialdean, 256 00:15:46,720 --> 00:15:50,810 header file ondoren hori da, bere lagun eta lankideen artean, besteak beste, 257 00:15:50,810 --> 00:15:52,800 zorrotzak, besteak beste, beren kodea propioa. 258 00:15:52,800 --> 00:15:55,440 Beraz, izan duzun denbora hori guztia prototipoak horiek guztiak barne 259 00:15:55,440 --> 00:15:59,870 eraginkorrean zure koadernoan goialdean, baina zorrotz honen bidez, besteak beste, mekanismo 260 00:15:59,870 --> 00:16:03,320 funtsean kopiak eta pastak zeure fitxategi hau. 261 00:16:03,320 --> 00:16:06,400 Orain, hemen dokumentazio nahiko zehatza da. 262 00:16:06,400 --> 00:16:08,880 >> Pretty askoz ere dugu hartu eman GetInt int bat lortzen, 263 00:16:08,880 --> 00:16:10,740 baina ez izkina kasu batzuetan izarrekin bihurtzen da, ezta? 264 00:16:10,740 --> 00:16:14,320 Zer da, erabiltzaileak zenbaki bat bide handiegia mota bada? 265 00:16:14,320 --> 00:16:17,350 A quintillion, besterik ezin int baten barruan sartzen? 266 00:16:17,350 --> 00:16:21,180 Zer espero den portaera da? Beno, haien, aurreikus da. 267 00:16:21,180 --> 00:16:23,460 Beraz, kasu honetan, benetan irakurri fina inprimatu 268 00:16:23,460 --> 00:16:27,850 lerroa ezin bada irakurri, itzultzen INT_MAX honetan ikusiko duzu. 269 00:16:27,850 --> 00:16:30,800 Inoiz ez dugu honi buruz hitz egin zuen, baina bere kapitalizazioa oinarritzen da, 270 00:16:30,800 --> 00:16:33,030 zer da seguruenik,? 271 00:16:33,030 --> 00:16:36,610 Konstante bat da, beraz, etengabeko berezi batzuk ziurrenik deklaratu 272 00:16:36,610 --> 00:16:39,460 horiek goragotik fitxategia goiburu fitxategiak batean, 273 00:16:39,460 --> 00:16:43,400 eta INT_MAX da ziurrenik, gutxi gorabehera, hala nola 2 milioi zerbait. 274 00:16:43,400 --> 00:16:48,160 Behar dugu, nolabait, zerbait adierazten duelako ideia izatea oker joan da, 275 00:16:48,160 --> 00:16:51,090 bai, gu, 4 milioi zenbakiak gure eskura, 276 00:16:51,090 --> 00:16:53,980 negatiboa 2 milioi 2 milioi, eman edo hartu. 277 00:16:53,980 --> 00:16:58,030 Beno, zer da programazio ohikoa besterik ez da zenbaki horiek lapurtu duzu. 278 00:16:58,030 --> 00:17:02,250 Agian 0, agian 2 milioi, agian negatibo 2 milioi. 279 00:17:02,250 --> 00:17:06,720 Beraz, zure balio posible bat gastatzen duzu, beraz, mundu dezakezu konprometitzea 280 00:17:06,720 --> 00:17:10,089 zerbait oker joaten bada, super-big balio hau itzuli egingo dut. 281 00:17:10,089 --> 00:17:13,329 Baina nahi ez dituzun erabiltzaileak zerbait críptica idazten du: "2, 3, 4 ..." 282 00:17:13,329 --> 00:17:17,079 kopurua benetan handia, non ordez, oro har, konstante gisa. 283 00:17:17,079 --> 00:17:19,380 Beraz, benetan, zinen anal bada aste batzuk iraganeko, 284 00:17:19,380 --> 00:17:23,800 GetInt deitu anytime, izan behar duzu baldintza bat izanez gero, egiaztatzeko. 285 00:17:23,800 --> 00:17:27,109 Ba al erabiltzaile motaren INT_MAX, edo zehatzago esanda, 286 00:17:27,109 --> 00:17:29,900 GetInt bueltan egin INT_MAX? Egin delako, 287 00:17:29,900 --> 00:17:35,140 benetan esan nahi du, ez dute idatzi, zerbait gaizki joan da kasu honetan. 288 00:17:35,140 --> 00:17:38,970 Beraz, hau da, zer ari den, oro har, "Sentinel" balioa, besterik gabe, esan nahi berezi gisa ezagutzen da. 289 00:17:38,970 --> 00:17:41,020 >> Beno, dezagun. C fitxategiak aktibatzeko. 290 00:17:41,020 --> 00:17:44,500 C fitxategia aparatuaren existitu denbora pixka bat, 291 00:17:44,500 --> 00:17:47,540 eta, hain zuzen ere, tresnak Zenbait ditu zuretzat 292 00:17:47,540 --> 00:17:49,720 gauza horretan "objektu-kodean," deitzen dugun 293 00:17:49,720 --> 00:17:52,940 baina ez bakarrik ez dizu axola non sistema ezagutzen duelako da, 294 00:17:52,940 --> 00:17:54,780 Kasu honetan, non da, tresnari. 295 00:17:54,780 --> 00:18:00,620 Baina dezagun scroll down to GetInt, eta ikusi nola GetInt izan da denbora honetan guztian lanean. 296 00:18:00,620 --> 00:18:02,380 Beraz, hemen aurretik antzeko iruzkinak egin behar dugu. 297 00:18:02,380 --> 00:18:04,930 Gerturatzeko me kodea zati, 298 00:18:04,930 --> 00:18:07,410 eta zer GetInt dugu honako hau da. 299 00:18:07,410 --> 00:18:12,770 Sarrera ez du, eta int bat itzultzen du, (egia), eta, beraz, berriz, nahita begizta infinitua dugu 300 00:18:12,770 --> 00:18:16,560 baina, ustez, break out dugu hau, nolabait, edo honen barruan itzultzeko. 301 00:18:16,560 --> 00:18:19,890 Beraz, ikus dezagun nola obra honetan. Beno, erabiliz GetString badirudi 302 00:18:19,890 --> 00:18:22,550 loop, 166 barruan lehen lerroan honetan. 303 00:18:22,550 --> 00:18:25,320 Hau da, gaur egun zer egoera pean delako praktika onak 304 00:18:25,320 --> 00:18:30,820 berezi hau keyword, NULL izan GetString itzultzeko? 305 00:18:30,820 --> 00:18:38,460 Zerbait oker badago. Zer gaizki joan izan GetString antzeko zerbait deitzen? 306 00:18:38,460 --> 00:18:42,550 Bai? [Ikasleentzako erantzuna, ulertezina] >> Bai. Beraz, agian malloc huts egin. 307 00:18:42,550 --> 00:18:45,310 Somewhere kanpaia GetString azpian malloc deituz, 308 00:18:45,310 --> 00:18:48,210 esleitzen memoria, ordenagailua dendan esker 309 00:18:48,210 --> 00:18:50,950 pertsonaia guztiak, erabiltzaileak sartu teklatu mota. 310 00:18:50,950 --> 00:18:53,270 Eta demagun erabiltzaileak izan denbora librea asko 311 00:18:53,270 --> 00:18:56,470 eta idatzi, adibidez, 2 milioi karaktere baino. 312 00:18:56,470 --> 00:18:59,600 Ordenagailua baino gehiago karaktere are RAM ditu. 313 00:18:59,600 --> 00:19:02,350 Beno, GetString hori adierazteko gai izan behar du, 314 00:19:02,350 --> 00:19:05,650 nahiz eta hau super, super arraroa izkinan kasua. 315 00:19:05,650 --> 00:19:08,490 Nolabait hau kudeatzeko gai izango ditu, eta hain GetString, 316 00:19:08,490 --> 00:19:11,850 gara eta irakurri bere dokumentazioa, ez, hain zuzen ere, itzuli NULL. 317 00:19:11,850 --> 00:19:16,150 Orain bada GetString NULL itzuli huts egiten badu, GetInt huts egin du 318 00:19:16,150 --> 00:19:19,370 INT_MAX itzuliz, Sentinel gisa. 319 00:19:19,370 --> 00:19:22,650 Hauek dira giza konbentzioak besterik ez dira. Kasu honetan jakin nahi duzu modu bakarra da 320 00:19:22,650 --> 00:19:24,840 dokumentazioa irakurtzen da. 321 00:19:24,840 --> 00:19:28,200 Hargatik joan non int da benetan GotInt. 322 00:19:28,200 --> 00:19:34,220 >> Beraz korritu dut behera bada, apur bat gehiago, line 170 lerro hauen gainean iruzkin bat egin behar dugu. 323 00:19:34,220 --> 00:19:38,470 Beraz, aldarrikatzen dugu, 172, int n eta char c, eta, ondoren, funtzio berri hau 324 00:19:38,470 --> 00:19:41,870 batzuk aurretik zehar estropezuka, baina sscanf. 325 00:19:41,870 --> 00:19:44,190 Katea eskaneatu f dago. 326 00:19:44,190 --> 00:19:48,580 Beste era batera esanda, emaidazu kate bat eta informazio interesgarria piezak eskaneatu egingo dut. 327 00:19:48,580 --> 00:19:53,820 Beraz, zer esan nahi du horrek? Beno, demagun, literalki, 1 2 3 teklatua idazten dut, 328 00:19:53,820 --> 00:19:59,730 eta, ondoren, hit sartu. Zer da 1 2 3 datu mota GetString itzultzen da? 329 00:19:59,730 --> 00:20:05,010 Jakina, kate bat da, ezta? Kate bat lortu nuen, eta, beraz, 1 2 3 da benetan "1 2 3" 330 00:20:05,010 --> 00:20:07,260 horren amaieran 0 \. Int bat ez dela. 331 00:20:07,260 --> 00:20:10,420 Hau ez da zenbaki bat. Itxura zenbaki bat bezalakoa da, baina ez da benetan. 332 00:20:10,420 --> 00:20:14,680 Beraz, zer ez GetInt izan nahi duzu? Ezkerretik eskuinera kate hori eskaneatu ditu, 333 00:20:14,680 --> 00:20:19,010 1 2 3 \ 0, eta, nolabait, benetako zenbaki oso bat bihurtu da. 334 00:20:19,010 --> 00:20:21,010 Orain, irudikatu izan da hau nola egin. 335 00:20:21,010 --> 00:20:24,240 Dela uste duzu back pset 2 bada, ustez lortu duzun apur bat eroso 336 00:20:24,240 --> 00:20:26,810 Caesar edo vigenere, beraz, batetik bestera joateko dezakezu kate bat, 337 00:20:26,810 --> 00:20:29,800 pick duten ints karakteretan bihur ditzakezu. Hori da lan asko. 338 00:20:29,800 --> 00:20:32,800 Zergatik ez deitu sscanf bezala, funtzio hori ez duzu? 339 00:20:32,800 --> 00:20:37,520 Beraz sscanf argumentu bat espero du, izeneko kasu honetan lerroa, kate bat da. 340 00:20:37,520 --> 00:20:41,310 Zehaztu ondoren, komatxo artean, oso antzeko printf 341 00:20:41,310 --> 00:20:44,960 zer kate honetan ikus espero duzu? 342 00:20:44,960 --> 00:20:52,980 Zer da hemen esaten dut, zenbaki hamartar bat da eta, agian, pertsonaia bat izatea espero dut. 343 00:20:52,980 --> 00:20:54,990 Eta hori zergatik gertatzen da momentu bat besterik ez dugu. 344 00:20:54,990 --> 00:20:58,440 Bihurtzen da izendapen hori dela stuff gogorarazten 345 00:20:58,440 --> 00:21:00,840 just Duela aste bat baino gehiago buruz hitz egiten hasi ginen. 346 00:21:00,840 --> 00:21:05,430 >> Zer da eta n eta c Gurekin hemen egiten? [Student erantzun, ulertezina] 347 00:21:05,430 --> 00:21:07,610 >> Bai. Me It emanez helbidea c n eta helbidea. 348 00:21:07,610 --> 00:21:10,440 Orain, zergatik da garrantzitsua? Beno, badakizu C funtzioak 349 00:21:10,440 --> 00:21:13,440 itzuli ahal izango duzu beti balio bat edo ez du balio. 350 00:21:13,440 --> 00:21:16,630 Int, kate bat, mugikor bat, char bat, edozein itzuli ahal izango duzu. 351 00:21:16,630 --> 00:21:21,150 Edo void itzuli ahal izango duzu, baina bakarrik egin ahal izango duzu 1 Gehienez itzultzeko gauza. 352 00:21:21,150 --> 00:21:26,100 Baina hemen sscanf me agian int, zenbaki hamartar bat itzuli nahi dugu, 353 00:21:26,100 --> 00:21:29,240 eta, gainera, karakterra, eta zergatik dagoen karakterra une batean azaldu dut. 354 00:21:29,240 --> 00:21:34,250 Beraz, nahi eraginkortasunez f 2 gauza itzultzeko, hori ez da posible C. 355 00:21:34,250 --> 00:21:38,460 Beraz, inguruan lan egin dezakezu 2 helbideak pasatuz, 356 00:21:38,460 --> 00:21:43,710 bezain laster, funtzio bat entregatu 2 helbideak, zer daitekeelako funtzio hori egiten? 357 00:21:43,710 --> 00:21:49,880 Helbide horiek idatz dezake. * Eragiketa erabili ahal izango duzu, eta "Hara joan" helbide horietako bakoitzean. 358 00:21:49,880 --> 00:21:54,320 Sort mekanismo backdoor hau da, egia da, baina oso aldagaien balioak aldatu 359 00:21:54,320 --> 00:21:58,020 1 leku baino ez, kasu honetan 2 baino gehiago. 360 00:21:58,020 --> 00:22:04,590 Orain, konturatu == to1 egiaztatzen dut, eta ondoren, n itzuli hori ez bada, hain zuzen ere, egia ebaluatzeko. 361 00:22:04,590 --> 00:22:09,340 Beraz, zer gertatzen da? Beno, teknikoki, nahi dugu GetInt gertatuko da. 362 00:22:09,340 --> 00:22:12,340 Analizatu, beraz, hitz egiten nahi dugu; kate irakurri nahi dugu 363 00:22:12,340 --> 00:22:16,210 "1 2 3" eta zenbaki bat dago han dirudienez, 364 00:22:16,210 --> 00:22:21,360 sscanf ari gara kontaketa egin da kopuru hori, 1, 2, 3, jarri me aldagai n honetan. 365 00:22:21,360 --> 00:22:26,060 Zergatik, eta, ondoren, ez daukat baita? 366 00:22:26,060 --> 00:22:33,750 Zein da, gainera, esaten sscanf ere, baliteke duzu pertsonaia bat hemen rola da. 367 00:22:33,750 --> 00:22:36,890 [Student hitz egitea, ulertezinak] >> Ez - hamartar puntu bat izan lan egiteko. 368 00:22:36,890 --> 00:22:40,650 Dezagun eutsi sakatuta une batez pentsatu. Zer gehiago? 369 00:22:40,650 --> 00:22:42,570 [Ikaslea, ulertezina] >> Beraz, pentsamendu ona, NULL karaktere izan zitekeen. 370 00:22:42,570 --> 00:22:44,970 Egia esan, ez da, kasu honetan. Bai? [Ikaslea, ulertezina] 371 00:22:44,970 --> 00:22:47,100 >> >> ASCII. Edo, are gehiago orokortu me utzi. 372 00:22:47,100 --> 00:22:49,670 % C ez du errore-egiaztapena da. 373 00:22:49,670 --> 00:22:52,510 Ez dugu nahi pertsonaia zenbaki ondoren, 374 00:22:52,510 --> 00:22:54,980 baina honekin egin me honako hau da: 375 00:22:54,980 --> 00:23:01,270 Bihurtzen da sscanf, n eta c balioak gordetzeko, hemen adibide honetan, gainera, 376 00:23:01,270 --> 00:23:08,170 zer ere ez da aldagai kopurua itzultzen du balioak sartu sartu 377 00:23:08,170 --> 00:23:13,330 Beraz, besterik ez duzu 1 2 3 bada, idatzi, eta soilik% d etor 378 00:23:13,330 --> 00:23:18,830 eta bakarrik n lortzen 1 2 3 bezala balio bat gordetzen, eta ez da ezer lortzen c jartzen da; 379 00:23:18,830 --> 00:23:20,870 c zabor balioa izaten jarraitzen du, eta, beraz, hitz egiten. 380 00:23:20,870 --> 00:23:23,550 Garbage delako inoiz balio batzuk hasieratu. 381 00:23:23,550 --> 00:23:29,390 Beraz, kasu horretan, sscanf, 1 ematen du, erakusle horien biztanle I bat delako, 382 00:23:29,390 --> 00:23:33,650 Kasu horretan, great. Int dut, beraz, linea libre I memoria libratzeko 383 00:23:33,650 --> 00:23:37,150 duten GetString benetan esleitu, eta, ondoren, n itzuliko dut. 384 00:23:37,150 --> 00:23:42,210 Bestela, inoiz galdetu duzu bada non horretan saiatu da berriro adierazpena dator, hemen dator. 385 00:23:42,210 --> 00:23:45,770 Bada, ordea, idatzi 1 2 3 foo I, 386 00:23:45,770 --> 00:23:48,640 testu ausazko sekuentzia batzuk, sscanf ikusi 387 00:23:48,640 --> 00:23:51,500 ooh, zenbakia, ooh, zenbaki, ooh zenbakia, ooh - f. 388 00:23:51,500 --> 00:23:54,190 Eta n 1 2 3 jarri da. 389 00:23:54,190 --> 00:23:59,970 C f jarri, eta ondoren, 2 itzuli da. 390 00:23:59,970 --> 00:24:02,980 Beraz, dugu scanf portaera oinarrizko definizioa erabiliz, 391 00:24:02,980 --> 00:24:06,170 Oso modu erraz bat - ondo, hasiera batean konplexua, baina egunaren amaieran, 392 00:24:06,170 --> 00:24:11,460 esaten mekanismoa nahiko sinplea da, ez int bat, eta beraz, bada, gauza bakarra aurkitu dut? 393 00:24:11,460 --> 00:24:14,950 Eta espazio zuria nahita. Irakurri sscanf dokumentazioa bada, 394 00:24:14,950 --> 00:24:18,690 kontatzen da, besteak beste, espazio zuria pieza bat hasieran edo amaieran, 395 00:24:18,690 --> 00:24:24,990 sscanf ere, erabiltzaileak aukera emango du, edozein arrazoigatik, sakatu zuriunea 1 2 3, eta legezko izango da. 396 00:24:24,990 --> 00:24:28,310 Erabiltzaileak ez du Yell baizik Zuriunea hit dute hasieran edo amaieran, 397 00:24:28,310 --> 00:24:32,160 just a little more user-friendly da esan nahi du horrek. 398 00:24:32,160 --> 00:24:34,160 >> Edozein galdera, ondoren, GetInts on? Bai? 399 00:24:34,160 --> 00:24:36,820 [Student galdera, ulertezina] 400 00:24:36,820 --> 00:24:40,740 >> Ona galdera. Zer besterik ez duzu char batean idatzitako bada, f, eta hit bezala sartu 401 00:24:40,740 --> 00:24:47,830 inoiz 1 2 3 idatzi gabe; zer kode lerro honen portaera izan duela uste al duzu? 402 00:24:47,830 --> 00:24:50,500 Beraz sscanf estaltzen duten ere, izan ere, kasu horretan, 403 00:24:50,500 --> 00:24:56,280 ez da n edo c bete ordez, itzultzeko 0 da. 404 00:24:56,280 --> 00:25:01,540 Gainera, kasu horretan, naiz eszenatoki hori harrapatzeko, balio espero dut nahi 1 delako. 405 00:25:01,540 --> 00:25:07,310 Nahi dut soilik 1, eta gauza 1 bakarrik bete behar da. Ona galdera. Beste batzuk? 406 00:25:07,310 --> 00:25:09,610 >> Guztiak eskubidea, beraz, ez da hemen funtzio guztietan barrena joan, 407 00:25:09,610 --> 00:25:11,820 baina badirudi, agian, interes gainerako 408 00:25:11,820 --> 00:25:14,530 bihurtzen da delako GetString GetFloat, GetInt, 409 00:25:14,530 --> 00:25:19,490 Egin GetDouble, punt guztiak GetLongLong beren GetString funtzionalitatea asko. 410 00:25:19,490 --> 00:25:22,860 Beraz, dezagun nola inplementatu hemen zuen begirada bat. 411 00:25:22,860 --> 00:25:27,040 Ko txiki hau konplexu baten itxura du, baina oinarriak berberak erabiltzen 412 00:25:27,040 --> 00:25:29,680 hasi gara astetik buruz hitz egiten. Beraz GetString 413 00:25:29,680 --> 00:25:32,670 argumentua ez du hutsunea bakoitzeko hemen 414 00:25:32,670 --> 00:25:37,110 eta kate bat itzultzen du; izeneko buffer kate bat naiz geratuko. 415 00:25:37,110 --> 00:25:39,670 Egia esan, ez dakit zer den oraindik erabili ahal izateko, baina ikusiko dugu. 416 00:25:39,670 --> 00:25:42,950 Edukiera bezala Looks, Lehenespenez, 0; nahiko ziur non honetan egingo da. 417 00:25:42,950 --> 00:25:44,920 Ez dakizu zer da n gabe erabili ahal izateko. 418 00:25:44,920 --> 00:25:47,860 Baina orain, apur bat gehiago interesgarria da lortzean, eta, beraz, line 243, 419 00:25:47,860 --> 00:25:51,760 int c, hau da ergelak xehetasun sort aldarrikatzen dugu. 420 00:25:51,760 --> 00:25:58,080 Karaktereen A 8 bit da, eta 8 bit zenbat balio ezberdinak gordetzeko? 421 00:25:58,080 --> 00:26:03,310 256. Arazoa da, nahi duzun 256 ASCII karaktere desberdinak izan nahi izanez gero, 422 00:26:03,310 --> 00:26:06,210 daude, uste itzuliz gero, eta hau ez da zerbait buruz ikasi. 423 00:26:06,210 --> 00:26:09,100 Baina uste itzuliz gero ASCII taula handi weeks ago izan genuen, 424 00:26:09,100 --> 00:26:13,780 ez ziren, kasu horretan, 128 edo 256 ASCII karaktereak. 425 00:26:13,780 --> 00:26:16,220 0-en ereduak eta 1 da erabiltzen dugu. 426 00:26:16,220 --> 00:26:19,410 Hori arazo bat da nahi duzun errore bat detektatzeko gai izan bada. 427 00:26:19,410 --> 00:26:23,290 Ari zaren dagoeneko 256 balioak erabiliz zure karaktere delako, 428 00:26:23,290 --> 00:26:26,390 ez duzu benetan planifikatu aurretik, esaten ez duzulako, 429 00:26:26,390 --> 00:26:29,750 "Hau ez da pertsonaia bat egiaztatzeko; honetan okerrak mezu batzuk." 430 00:26:29,750 --> 00:26:32,430 Beraz, zer munduan ez da, hurrengo balio handiena erabiltzen dituzte, 431 00:26:32,430 --> 00:26:35,790 int bat antzeko zerbait da, beraz, eta bit kopurua crazy duzu, 432 00:26:35,790 --> 00:26:39,610 32, 4 milioi balio posible da, beraz, besterik gabe, ahal izango duzu, azkenean, erabiliz, 433 00:26:39,610 --> 00:26:44,800 funtsean, horietako 257, 1 errore bat gisa esanahi berezia du. 434 00:26:44,800 --> 00:26:49,190 >> Beraz, ikus dezagun nola obra honetan. 246 line, handiak, berriz, loop daukat 435 00:26:49,190 --> 00:26:54,530 hori fgetc deituz; f esanahia fitxategia, getc, eta, ondoren, stdin. 436 00:26:54,530 --> 00:26:59,030 Turns esatea besterik ez da modu zehatzago "teklatua sarrera irakurri." 437 00:26:59,030 --> 00:27:02,730 Standard sarrerako bide teklatua, irteera estandarrean esan nahi du pantaila, 438 00:27:02,730 --> 00:27:06,920 eta errore estandarra, pset 4 ikusi dugu, pantaila esan nahi du, 439 00:27:06,920 --> 00:27:09,670 baina pantailaren zati berezi bat da, beraz, ez da conflated 440 00:27:09,670 --> 00:27:13,760 irteera benetako inprimatzeko asmoa duzun, baina hori etorkizunean. 441 00:27:13,760 --> 00:27:19,430 Beraz fgetc besterik ez karaktere bat irakurri teklatua, eta gorde non esan nahi du? 442 00:27:19,430 --> 00:27:24,000 C gordetzeko da, eta, ondoren, egiaztatu, beraz, besterik ez dut boolearra juntagailuak batzuk erabiliz, 443 00:27:24,000 --> 00:27:28,430 egiaztatu du ez dela berdina \ n, eta, beraz, erabiltzaileak hit sartu du. 444 00:27:28,430 --> 00:27:31,510 Puntu horretan, begizta-amaiera at gelditu nahi dugu, eta nahi dugu egiaztatu 445 00:27:31,510 --> 00:27:36,170 berezia konstantea, EOF, badakizu edo asmatzeko zer nabarmentzen da? 446 00:27:36,170 --> 00:27:39,860 Fitxategi amaiera. Zentzugabeko mota, beraz, hau da, bada, teklatua naiz dudalako idazten, 447 00:27:39,860 --> 00:27:41,900 dago, honetan parte hartzen duten fitxategi hori ez da benetan, 448 00:27:41,900 --> 00:27:44,330 baina hori bakarrik erabiltzen du esan nahi epe generikoa ordenatzeko 449 00:27:44,330 --> 00:27:50,320 ezer ez bestela giza behatzak etorritakoak. EOF. Fitxategi amaiera. 450 00:27:50,320 --> 00:27:52,600 Bat alde batera utzita, hit duzun inoiz bada control d zure teklatua, 451 00:27:52,600 --> 00:27:54,680 oraindik ez duzu izango du; hit duzun control c. 452 00:27:54,680 --> 00:27:57,920 Baina kontrol d berezi hau etengabe deitzen EOF bidaltzen du. 453 00:27:57,920 --> 00:28:03,100 >> Beraz, gaur egun besterik ez dugu batzuk memoria esleipena dinamiko. 454 00:28:03,100 --> 00:28:06,460 Beraz, bada n + 1> edukiera, gaur egun n azaldu dut. 455 00:28:06,460 --> 00:28:09,380 n besterik ez da, zenbat byte dira Bufferreko uneko 456 00:28:09,380 --> 00:28:11,970 kate ari zaren gaur egun eraikitzeko erabiltzaileak. 457 00:28:11,970 --> 00:28:16,240 Duzu zure buffer pertsonaiak bada baino bufferraren edukiera, 458 00:28:16,240 --> 00:28:20,760 senez, zer ondoren egin behar dugu esleitu edukiera gehiago. 459 00:28:20,760 --> 00:28:24,490 Aritmetikoa baino gehiago gaingabetuak batzuk hemen noa 460 00:28:24,490 --> 00:28:26,900 eta funtzio honetan bakarrik zentratu hemen. 461 00:28:26,900 --> 00:28:29,170 Badakizu zer malloc da, edo, gutxienez, oro har, ezagutzen. 462 00:28:29,170 --> 00:28:32,380 Hartu idazketa ez asmatzeko. [Ikasleentzako erantzuna, ulertezina] 463 00:28:32,380 --> 00:28:35,690 >> Bai. Eta ez da nahiko memoria gehituz; memoria reallocates honela: 464 00:28:35,690 --> 00:28:40,530 Katearen amaieran gela dizu memoria hori baino gehiago da oraindik bada 465 00:28:40,530 --> 00:28:43,370 jatorriz ematen du, baino gero, memoria hori gehiago lortuko duzu. 466 00:28:43,370 --> 00:28:46,640 Beraz, besterik gabe kateak pertsonaiak jarriz back Itzuli atzera. 467 00:28:46,640 --> 00:28:49,290 Baina hori ez bada kasua, itxaron duzulako luzeegia 468 00:28:49,290 --> 00:28:51,700 eta ausazko zerbait memorian plopped lortu, baina ez da aparteko 469 00:28:51,700 --> 00:28:56,480 Hemen behera memoria, ados. Idazketa heavy jasotzaileen guztiak egiteko, 470 00:28:56,480 --> 00:28:58,810 mugitu katea irakurri duzula, beraz, urrun hemendik, 471 00:28:58,810 --> 00:29:02,550 hor behera jarri, eta, ondoren, zenbait puntu horretan pista gehiago emango dizu. 472 00:29:02,550 --> 00:29:05,610 Beraz, eskua olatu bat, utzi zer GetString egiten ari da esaten me 473 00:29:05,610 --> 00:29:09,540 buffer txiki bat, agian 1 karaktere hasita, 474 00:29:09,540 --> 00:29:12,300 eta erabiltzaileari 2 karaktere motak, GetString eta ondorioz sortu 475 00:29:12,300 --> 00:29:15,210 idazketa deituz eta dio, 'Ooh, 1 karaktere ez zen nahikoa izan. 476 00:29:15,210 --> 00:29:18,480 Emadazu 2 karaktereak. ' Gero, begizta-logika bidez irakurri baduzu, 477 00:29:18,480 --> 00:29:21,070 , esan 'Ooh, 3 karaktere idatzitako erabiltzaile da. 478 00:29:21,070 --> 00:29:25,690 Emadazu orain ez 2 baina 4 karaktere, ondoren, emadazu 8, ondoren, emadazu, 16 eta 32. ' 479 00:29:25,690 --> 00:29:28,180 Izan ere, naiz dela I aldi bakoitzean edukiera bikoiztu 480 00:29:28,180 --> 00:29:30,320 Horregatik, buffer hori ez da, poliki-poliki hazten joan da. 481 00:29:30,320 --> 00:29:35,870 Super azkar hazten da, eta hori abantaila izan daiteke? 482 00:29:35,870 --> 00:29:38,540 Zergatik bikoiztu bufferraren tamaina am I, nahiz eta erabiltzaileak 483 00:29:38,540 --> 00:29:41,450 1 agian nahikoa teklatua izaera estra? 484 00:29:41,450 --> 00:29:44,830 [Ikasleentzako erantzuna, ulertezina]. >> Zer da hori? 485 00:29:44,830 --> 00:29:46,750 Hain zuzen ere. Ez daukazu hazten bezala maiz. 486 00:29:46,750 --> 00:29:48,870 Eta hori besterik ez mota - you're zure apustuak estaldura hemen. 487 00:29:48,870 --> 00:29:54,150 Ideia ez duzula nahi idazketa asko deitu ohi da, motela izan delako. 488 00:29:54,150 --> 00:29:56,840 Edonoiz memoria sistema eragilearen galdetzen dituzu, ahalik eta ikus 489 00:29:56,840 --> 00:30:00,620 etorkizuneko arazo multzo bat, denbora pixka bat hartu ohi da. 490 00:30:00,620 --> 00:30:04,980 Zenbateko hori denbora murriztuz, nahiz eta espazioa alferrik galtzen ari zaren Beraz, gauza ona izan ohi da. 491 00:30:04,980 --> 00:30:07,250 >> Baina GetString azken zatia bidez irakurriz gero, hemen, 492 00:30:07,250 --> 00:30:10,880 eta, berriro ere, lerro bakoitzean bakarra ulertzeko hemen ez da hain garrantzitsua gaur egun. 493 00:30:10,880 --> 00:30:14,830 Baina azkenean konturatu dela deiak malloc berriro, eta bideratzen 494 00:30:14,830 --> 00:30:16,980 zehazki asko byte katea behar bezala 495 00:30:16,980 --> 00:30:21,620 eta, ondoren, botatzen free telefonora deituz, gehiegi handi buffer, 496 00:30:21,620 --> 00:30:23,510 hain zuzen ere, got bada bikoiztu gehiegi aldiz. 497 00:30:23,510 --> 00:30:25,970 Azken finean, hori nola GetString izan da denbora honetan guztian lanean. 498 00:30:25,970 --> 00:30:30,100 Guztiak egiten du karaktere bat irakurri aldi berean, behin eta berriro, eta berriro 499 00:30:30,100 --> 00:30:37,930 eta bere esku dagoen guztia egiten du bere memoria pixka bat gehiago behar da, sistema eragilearen eskatu du idazketa telefonora deituz. 500 00:30:37,930 --> 00:30:41,660 Edozein galdera? Guztiak eskubidea. 501 00:30:41,660 --> 00:30:45,220 >> Erasoa. Orain dela erakusleak ulertzen dugu, edo, gutxienez, 502 00:30:45,220 --> 00:30:47,560 dira, gero eta gehiago ezagutzen erakusleak, 503 00:30:47,560 --> 00:30:50,020 kontuan hartu dezagun nola hasten da mundu osoan eta tolesteko 504 00:30:50,020 --> 00:30:53,160 nahiko ez baduzu erabiltzaile adversarial aurka defendatzeko, 505 00:30:53,160 --> 00:30:55,180 jendea zure sistema sartu hack saiatzen ari da. 506 00:30:55,180 --> 00:31:00,260 Pertsonak erregistroa kodea batzuk circumventing zure software lapurtzen saiatzen ari dira 507 00:31:00,260 --> 00:31:02,150 bestela izan liteke dutela sartu idatzi 508 00:31:02,150 --> 00:31:04,860 Adibide honetan begirada bat hartu hemen, eta besterik ez C kodea 509 00:31:04,860 --> 00:31:07,920 funtzio nagusi bat, behealdean, deiak funtzioa foo, 510 00:31:07,920 --> 00:31:12,100 eta zer ari da pasatzen foo? [Student] argumentu soil bat. 511 00:31:12,100 --> 00:31:15,660 >> Single argumentua. Beraz, argv [1], erabiltzaileari idatzitako lehen hitza esan nahi du 512 00:31:15,660 --> 00:31:19,150 a.out edo dena delakoa ondoren komando lerro programa deitzen da. 513 00:31:19,150 --> 00:31:24,920 Foo Beraz, goialdean, char * hartzen du, baina char * besterik ez da zer? 514 00:31:24,920 --> 00:31:28,860 Katea. Hemen ez da ezer berria, eta kate hori arbitrarioki izeneko bar. 515 00:31:28,860 --> 00:31:36,090 Lerro hau hemen, char c [12], erdi-tekniko English sailkatu, zer lerro hau egiten ari da? 516 00:31:36,090 --> 00:31:40,640 Array -? Pertsonaiak. Give me 12 karaktere array bat. 517 00:31:40,640 --> 00:31:44,970 Beraz, dei hau buffer bat izatea. Teknikoki izeneko c, baina programazioan buffer 518 00:31:44,970 --> 00:31:47,890 espazioaren sorta stuff batzuk sartu jarri ahal izango duzula esan nahi du 519 00:31:47,890 --> 00:31:49,940 >> Gero, azkenik, memcpy, ez dugu erabili baino lehen. 520 00:31:49,940 --> 00:31:52,380 Baina, ziurrenik, hauek dituzu: asmatzea zer egiten. Memorian kopiatzen da. 521 00:31:52,380 --> 00:31:58,790 Zer egiten du? Beno, kopiatzen itxuraz da bar, bere sarrera, c sartu 522 00:31:58,790 --> 00:32:03,420 baina soilik bar luzera. 523 00:32:03,420 --> 00:32:07,440 Baina bug bat dago hemen. 524 00:32:07,440 --> 00:32:14,500 Ongi da, eta, beraz, teknikoki benetan behar dugu strlen (bar) x sizeof (char), hori da zuzena. 525 00:32:14,500 --> 00:32:17,920 Baina kasu txarrenean hemen, dezagun arduratuko that's hori beraz, ados. 526 00:32:17,920 --> 00:32:23,760 Ondoren, 2 bugs. Beraz, sizeof (char), eskubidea, dezagun apur bat zabalagoa. 527 00:32:23,760 --> 00:32:28,860 Beraz, gaur egun oraindik bug bat, hau da, zer? 528 00:32:28,860 --> 00:32:31,630 [Ikasleentzako erantzuna, ulertezina] zer Check >>? Ongi da, eta, beraz, egiaztapena behar dugu 529 00:32:31,630 --> 00:32:35,010 NULL, gauza txarrak gertatuko dira zure erakuslea da NULL delako, 530 00:32:35,010 --> 00:32:38,490 Amaitutakoan leza Hara joan, eta ez duzu inoiz NULL joan 531 00:32:38,490 --> 00:32:40,890 * operadorea dereferencing. 532 00:32:40,890 --> 00:32:45,250 Beraz, hori da ona, eta zer gehiago ari gara egiten? Logikoa denez akats bat da hemen ere. 533 00:32:45,250 --> 00:32:47,650 [Ikasleentzako erantzuna, ulertezina] 534 00:32:47,650 --> 00:32:51,340 >> Beraz, egiaztatu bada argc ≥ 2? 535 00:32:51,340 --> 00:32:54,130 Ongi da, eta, beraz, ez da programa honetan 3 bugs hemen, beraz. 536 00:32:54,130 --> 00:33:00,080 Ez ari gara erabiltzaileak benetan argv [1], ona sartu ezer idatzi egiaztapena. 537 00:33:00,080 --> 00:33:02,240 Beraz, zer da hirugarren bug? Bai? 538 00:33:02,240 --> 00:33:04,420 [Ikasleentzako erantzuna, ulertezina] >> Good. 539 00:33:04,420 --> 00:33:09,590 Beraz, eszenatoki checked dugu. Inplizituki egiaztaturik ez kopiatu memoria gehiago 540 00:33:09,590 --> 00:33:12,800 bar luzera baino gaindituko luke. 541 00:33:12,800 --> 00:33:15,720 Beraz, katea idatzi erabiltzaile 10 karaktere luzea, 542 00:33:15,720 --> 00:33:18,260 hau da, esaten 'bakarrik kopiatu 10 pertsonaiak.' 543 00:33:18,260 --> 00:33:21,140 Eta hori da ados, baina zer bada hitz bat idatzi gonbitan erabiltzaile 544 00:33:21,140 --> 00:33:29,360 20 karaktere hitza bezala, hau da, kopia 20 karaktere esaten bar zer sartu? 545 00:33:29,360 --> 00:33:32,840 c, bestela gure buffer bezala ezagutzen da, horrek esan nahi du, idatzi besterik ez duzu datuak 546 00:33:32,840 --> 00:33:35,950 8 byte kokapenak zuk ez propioa, 547 00:33:35,950 --> 00:33:38,320 eta ez duzu jabea zentzua inoiz ez esleituko horiek. 548 00:33:38,320 --> 00:33:41,190 Beraz, hau da, oro har, buffer-gainezkatzea erasoa jo ezagutzen, 549 00:33:41,190 --> 00:33:46,650 edo buffer inbaditu erasoa, eta bere erasoa zentzu izanez gero, erabiltzaileak 550 00:33:46,650 --> 00:33:50,650 edo zure funtzioa deituz programa hau egiten maliciously 551 00:33:50,650 --> 00:33:53,780 benetan gertatzen da hurrengo nahiko txarra izan daiteke. 552 00:33:53,780 --> 00:33:55,690 >> Ikus dezagun begirada bat argazki hau hemen. 553 00:33:55,690 --> 00:33:59,070 Argazki hau zure memoria pila adierazten du. 554 00:33:59,070 --> 00:34:01,050 Eta gogoratzen aldi bakoitzean funtzio bat deitzen duzu, 555 00:34:01,050 --> 00:34:04,520 pilaketan markoa txiki hau eta gero beste bat eta gero beste bat eta, ondoren, beste. 556 00:34:04,520 --> 00:34:07,250 Eta horrela, orain arte besterik ez mota dugu abstracted horiek urruntzen laukizuzenak gisa 557 00:34:07,250 --> 00:34:09,380 bai bertan, taula gainean edo pantaila hemen. 558 00:34:09,380 --> 00:34:12,219 Baina mapan handiago bada laukizuzen horietako batean, 559 00:34:12,219 --> 00:34:16,460 funtzioa foo bat deitzen duzunean, bihurtzen da, ez dagoela gehiago pilaketan 560 00:34:16,460 --> 00:34:18,739 marko eta laukizuzenaren barruan 561 00:34:18,739 --> 00:34:23,370 besterik ez x eta y eta a eta b, ez zuen bezala swap buruz hitz egitea baino. 562 00:34:23,370 --> 00:34:25,949 Bihurtzen da, behe-mailako xehetasun batzuk daudela, 563 00:34:25,949 --> 00:34:27,780 horien artean itzuli helbidea. 564 00:34:27,780 --> 00:34:33,020 Beraz, izarrekin bihurtzen da foo nagusia deiak, nagusiak jakinarazi du foo 565 00:34:33,020 --> 00:34:36,760 nagusia helbidea ordenagailuaren memoria. 566 00:34:36,760 --> 00:34:40,659 Bestela denez, ahalik eta azkarren foo exekutatzean, hemen kasu honetan bezala egiten da, 567 00:34:40,659 --> 00:34:43,790 behin hau itxi kizkur giltza iristen foo amaieran, 568 00:34:43,790 --> 00:34:48,860 nola demontre ez foo daki non programaren kontrola suposatzen da joan? 569 00:34:48,860 --> 00:34:52,460 Bihurtzen da galdera horri erantzuna laukizuzenaren gorria hemen da. 570 00:34:52,460 --> 00:34:56,130 Erakuslea adierazten du, eta sortu da ordenagailua, aldi baterako gordetzeko, 571 00:34:56,130 --> 00:35:00,250 deiturikoak pila nagusiaren helbidea, beraz, ahalik eta azkarren foo gisa exekutatzean egin da, 572 00:35:00,250 --> 00:35:04,110 ordenagailua daki non eta zer ildo nagusia itzuli. 573 00:35:04,110 --> 00:35:06,900 Gordetako marko erakuslea erlazionatzen antzera. 574 00:35:06,900 --> 00:35:09,620 Char * bar hemen adierazten du zer? 575 00:35:09,620 --> 00:35:14,740 Beno, gaur egun segmentu honen urdina hemen foo en markoa da, zer da bar? 576 00:35:14,740 --> 00:35:18,300 Ongi da, eta, beraz, bar foo funtzioa argumentu da. 577 00:35:18,300 --> 00:35:20,720 >> Beraz, gaur egun ezagutzen argazki gara berriro. 578 00:35:20,720 --> 00:35:22,960 Gehiago stuff eta oharkabetasunak gehiago pantaila 579 00:35:22,960 --> 00:35:27,490 baina urdin argia segmentu hau da, zer egin dugu Edukien gainean swap antzeko zerbait marrazten. 580 00:35:27,490 --> 00:35:31,890 Hau foo marko eta gauza bakarra da oraintxe bar, 581 00:35:31,890 --> 00:35:34,630 Parametro hau da. 582 00:35:34,630 --> 00:35:39,840 Baina zer gehiago behar pila, hau hemen kodea arabera? 583 00:35:39,840 --> 00:35:44,280 Char c [12]. Beraz, ikus 12 plazak memoria ere egin beharko dugu, 584 00:35:44,280 --> 00:35:46,260 c izeneko aldagai bat esleitu. 585 00:35:46,260 --> 00:35:48,340 Eta, hain zuzen ere, hori izan ez dugu pantailan. 586 00:35:48,340 --> 00:35:51,650 Oso goian dago c [0], eta, ondoren, diagrama honen egileak 587 00:35:51,650 --> 00:35:55,130 ez da traba laukiak marrazten, baina ez dira, hain zuzen ere, 12 bertan 588 00:35:55,130 --> 00:36:00,120 beheko eskuineko begiratzen baduzu, c [11], 0-tik zenbatzen badituzu, hala nola, 12 byte. 589 00:36:00,120 --> 00:36:06,190 Baina hemen arazoa: zein norabide c gero eta handiagoa da? 590 00:36:06,190 --> 00:36:10,390 Ordena top behera, ezta? Goialdean hasten bada eta beheraino hazten da, 591 00:36:10,390 --> 00:36:13,480 ez dirudi utzi dugu geure burua bezala pista guztietan. 592 00:36:13,480 --> 00:36:15,320 Mota margotu dugu geure burua, izkinan, 593 00:36:15,320 --> 00:36:20,210 eta c [11] bar, hau da, pila marko erakuslea aurka aurka 594 00:36:20,210 --> 00:36:23,800 eskubidea sortu den itzulera helbidea aurka; gehiago ez gela. 595 00:36:23,800 --> 00:36:26,100 Beraz, zer inplikazioa da, eta, ondoren, torlojua baduzu, 596 00:36:26,100 --> 00:36:30,460 eta 20 byte 12 byte buffer batean irakurtzen saiatu behar baduzu? 597 00:36:30,460 --> 00:36:33,460 Non dira osagarriak 8 byte joango gara? 598 00:36:33,460 --> 00:36:36,370 Beste guztia barruan, eta horietatik batzuk super garrantzitsua da. 599 00:36:36,370 --> 00:36:40,480 Eta garrantzitsuena, potentzialki, koadro gorri dago, itzulera helbidea. 600 00:36:40,480 --> 00:36:44,720 Suposatzen delako bai zarela ustekabean edo adversarially 601 00:36:44,720 --> 00:36:48,040 gainidatzi duten 4 bytes, erakusle helbide hori, 602 00:36:48,040 --> 00:36:53,190 ez bakarrik zabor, baina kopuru hori gertatzen da benetako memoria-helbide bat irudikatzeko? 603 00:36:53,190 --> 00:36:55,930 Zer implicaiton, logikoki? 604 00:36:55,930 --> 00:36:59,080 [Student erantzun, ulertezina] >> Zehazki. Noiz foo itzultzen 605 00:36:59,080 --> 00:37:03,560 eta kizkur giltza duten hits, programa ez nagusira itzultzeko jarraitu du, 606 00:37:03,560 --> 00:37:08,320 edozein izanda ere helbidea koadro gorri horretan itzultzeko. 607 00:37:08,320 --> 00:37:11,560 >> Orain, erregistratzeko software circumventing kasuan, 608 00:37:11,560 --> 00:37:14,400 zer ari den itzuli helbidea da funtzioa 609 00:37:14,400 --> 00:37:18,820 ohi duzun softwarea ordaindu ondoren lortzen deitu eta zure izen-emate-kodea sartu? 610 00:37:18,820 --> 00:37:23,160 Trikimailu ordenagailua ordenatzeko izan duzu hemen ez joan sartu, baina horren ordez, gertatzen da hemen. 611 00:37:23,160 --> 00:37:27,950 Edo, Oraindik benetan clever, aurkariarekiko bat benetan idatzi teklatua, 612 00:37:27,950 --> 00:37:32,500 Adibidez, ez da benetako hitza, 20 karaktere ez, baina suposatu zuen 613 00:37:32,500 --> 00:37:36,200 ordezkatzen dituzten zenbait karaktere kodea motak? 614 00:37:36,200 --> 00:37:38,860 Eta C kodea ez da izango, pertsonaiak izango da 615 00:37:38,860 --> 00:37:42,920 ordezkatzen dituzten bitar makina kodeak, 0 eta 1-en. 616 00:37:42,920 --> 00:37:46,740 Baina demagun clever nahikoa, nolabait GetString gonbita sartu itsatsi egin behar dira 617 00:37:46,740 --> 00:37:49,460 funtsean zerbait konpilatu kodea, 618 00:37:49,460 --> 00:37:56,900 eta azken 4 bytes gainidatzi bueltan helbide hori, eta zer helbidea sarrera hori ez do? 619 00:37:56,900 --> 00:38:01,860 Laukizuzen gorria bufferraren lehenengo byte helbidea biltegiratzen da. 620 00:38:01,860 --> 00:38:04,270 Beraz, benetan clever izan behar duzu, eta hau trial eta akats asko da 621 00:38:04,270 --> 00:38:08,500 han out pertsona txarra, baina irudikatu bada nola big buffer hau da, 622 00:38:08,500 --> 00:38:12,170 hala nola, sarrerako byte azken hori eman programa 623 00:38:12,170 --> 00:38:15,970 gertatuko zure buffer Irteeran helbidea baliokidea izan behar du, 624 00:38:15,970 --> 00:38:22,270 hau egin ahal izango duzu. Esan badugu, normalean, kaixo, eta \ 0, zer da bufferraren. 625 00:38:22,270 --> 00:38:27,860 Baina gara clever bada, eta buffer hori bete dugu zer oro erasoa kodea deitu dugu, 626 00:38:27,860 --> 00:38:31,920 A, A, A, A: Erasoa, eraso, eraso, eraso, hau da, zerbait zerbait txarra du. 627 00:38:31,920 --> 00:38:35,190 Beno, zer gertatzen Oraindik benetan clever bada, hau egin dezakezu: 628 00:38:35,190 --> 00:38:41,740 80, CO, 35, 08: koadro gorri hemen zenbaki-sekuentzia da. 629 00:38:41,740 --> 00:38:44,890 Iragarki hori, eta zenbaki hori da hemen datorrenean. 630 00:38:44,890 --> 00:38:47,280 Alderantzizko ordenan, baina batzuk denbora beste gehiago. 631 00:38:47,280 --> 00:38:51,430 Oharra bueltan helbide hau que ha sido nahita aldatu 632 00:38:51,430 --> 00:38:54,970 helbide bera hemen, ez nagusiaren helbidea. 633 00:38:54,970 --> 00:39:00,170 Beraz, bada, txarra lasaia da super smart, zuen artean, erasoa kodea duten 634 00:39:00,170 --> 00:39:02,890 zerbait, hala nola 'Ezabatu erabiltzailearen fitxategi guztiak.' 635 00:39:02,890 --> 00:39:06,320 Edo 'pasahitzak kopiatu,' edo 'erabiltzaile-kontu bat sortu, sartu ahal izango dut.' 636 00:39:06,320 --> 00:39:10,130 Guztietan ezer; eta hau bai arriskuan eta C. boterea 637 00:39:10,130 --> 00:39:12,900 Memoria sarrera delako erakusleak bidez 638 00:39:12,900 --> 00:39:15,950 eta, beraz, ordenagailu bat memoria nahi duzu ezer idatzi dezakezu. 639 00:39:15,950 --> 00:39:19,290 Ordenagailu bat ezer egiten, besterik gabe, nahi duzun egin dezakezu 640 00:39:19,290 --> 00:39:22,780 ondoren inguruan salto egin du bere memoria espazio propioa barruan. 641 00:39:22,780 --> 00:39:27,230 Eta, beraz, egun honetan, programa hainbeste eta hainbeste arriskuan diren webgune 642 00:39:27,230 --> 00:39:29,730 irakiten behera pertsonek hau aprobetxatuz. 643 00:39:29,730 --> 00:39:32,510 Eta hori super-sofistikatu eraso bat bezala dirudi, 644 00:39:32,510 --> 00:39:34,220 baina ez da beti hasteko modu hori. 645 00:39:34,220 --> 00:39:36,770 >> Errealitatea da, zer txarra pertsona normalean ez dela, 646 00:39:36,770 --> 00:39:41,470 ote den, komando-lerro bat programa edo GUI programa bat edo web orri bat, 647 00:39:41,470 --> 00:39:43,290 da hasteko besterik ez duzu zentzugabekeria eskainiz. 648 00:39:43,290 --> 00:39:46,940 Idatzi bilaketa eremuan eta sakatu sartu sartu hitz bat benetan handia duzu, 649 00:39:46,940 --> 00:39:49,030 eta web kraskatzen bada ikusteko itxaron duzu. 650 00:39:49,030 --> 00:39:53,270 Edo programa errore-mezu batzuk manifestuak ikusteko itxaron behar duzu. 651 00:39:53,270 --> 00:39:55,480 Lortu baduzu zortea, lasaia txarra delako, 652 00:39:55,480 --> 00:39:59,610 batzuk crazy-sarrera duen programa kraskatzen eskaintzen dizu, 653 00:39:59,610 --> 00:40:02,280 horrek esan nahi du, programatzailea ez aurrea zure portaera txarra 654 00:40:02,280 --> 00:40:05,420 horrek esan nahi du seguruenik ditzakezu, esfortzu nahikoa, 655 00:40:05,420 --> 00:40:09,870 nahikoa trial eta errorea, irudikatu zehatzagoa eraso bat nola soldata. 656 00:40:09,870 --> 00:40:15,900 Beraz, askoz ere segurtasun zati bat ez da bakarrik eraso horiek saihesteko guztira, baina horiek detektatzeko 657 00:40:15,900 --> 00:40:20,250 eta benetan erregistroak bilatzen eta zer input crazy zure webgunean idatzitako jendea ikustea. 658 00:40:20,250 --> 00:40:26,040 Zer bilaketa-terminoak zure web tekleatutako buffer batzuk gainezka itxaropenak? 659 00:40:26,040 --> 00:40:28,900 Eta hau irakiten hasten guztiak array bat da oinarriak simple, 660 00:40:28,900 --> 00:40:32,510 eta zer ez memoria esleitu eta erabili esan nahi du? 661 00:40:32,510 --> 00:40:34,920 Eta zerikusia ere, hau da. 662 00:40:34,920 --> 00:40:37,520 >> Hargatik, besterik gabe begirada disko gogor baten barruan berriro ere. 663 00:40:37,520 --> 00:40:40,190 Beraz, gogorarazten Duela aste bat edo bi fitxategiak arrastatu 664 00:40:40,190 --> 00:40:45,470 recycle bin edo trash, zer gertatzen da? 665 00:40:45,470 --> 00:40:47,850 [Student] Ezer ez. >> Bai, ez du deus. Azkenean, bada baxua exekutatzen duzun 666 00:40:47,850 --> 00:40:51,370 disko espazioa, Windows edo Mac OS zuretzat fitxategiak ezabatuz hasiko da. 667 00:40:51,370 --> 00:40:53,670 Baina arrastatu hor zerbait bada, orduan ez da segurua guztietan. 668 00:40:53,670 --> 00:40:56,550 Guztiak zure roomate, lagun edo familiako kide egin klik bikoitza egin, eta voila. 669 00:40:56,550 --> 00:40:59,720 Ez da sketchy fitxategi guztiak ezabatu saiatu duzula. 670 00:40:59,720 --> 00:41:02,840 Gurekin gehienak, beraz, gutxienez, jakin behar duzula eskuineko botoia edo kontrolatzeko click 671 00:41:02,840 --> 00:41:05,320 eta hutsik trash, edo horrelako zerbait. 672 00:41:05,320 --> 00:41:07,900 Baina orduan ere, ez da nahiko egin trikimailu. 673 00:41:07,900 --> 00:41:11,340 Zer gertatzen den fitxategia zure disko gogorrean duzulako 674 00:41:11,340 --> 00:41:14,590 word dokumentu batzuk edo JPEG batzuk adierazten du? 675 00:41:14,590 --> 00:41:18,820 Eta hau zure disko gogorrean adierazten du, eta demagun hau hemen sliver fitxategi hori adierazten du, 676 00:41:18,820 --> 00:41:21,640 eta 0 eta 1-en osoa sorta bat osatzen dute. 677 00:41:21,640 --> 00:41:25,470 Zer gertatzen da soilik ez, arrastatu fitxategi hori trashcan edo recycle bin 678 00:41:25,470 --> 00:41:30,390 baina ere hustu? 679 00:41:30,390 --> 00:41:32,820 Ezer agintzea. Ez da deus. 680 00:41:32,820 --> 00:41:37,630 Orain besterik ez da ezer, taula hau forma apur zerbait gertatzen delako. 681 00:41:37,630 --> 00:41:41,170 Beraz, ordenagailu bat memoria mota batzuk datu-basea edo taulak barruan 682 00:41:41,170 --> 00:41:44,470 funtsean 1 fitxategiak izenak zutabea, 683 00:41:44,470 --> 00:41:50,550 eta 1 zutabea fitxategiaren kokalekua hau kokapena 123, ausazko zenbaki bat izan daiteke. 684 00:41:50,550 --> 00:41:58,270 Beraz, x.jpg antzeko zerbait, eta kokapena 123 izan genezake. 685 00:41:58,270 --> 00:42:02,870 Eta zer gertatzen da orduan, zure zakarrontzi hustu? 686 00:42:02,870 --> 00:42:06,720 Doan kanpoan. Baina, zer ez irteteko 0 eta 1-en. 687 00:42:06,720 --> 00:42:09,690 >> Beraz, zer da, eta, ondoren, konexioa 4 pset nahi al duzu? 688 00:42:09,690 --> 00:42:13,460 Beno, pset 4, baizik ustekabean dugu ezabatu 689 00:42:13,460 --> 00:42:15,890 compact flash txartela izan argazki hauek guztiak, 690 00:42:15,890 --> 00:42:18,710 edo, besterik gabe, zorte txarra izan zen hondatuta delako, 691 00:42:18,710 --> 00:42:21,170 ez du esan nahi, 0 eta 1 ez dira oraindik ez. 692 00:42:21,170 --> 00:42:23,920 Agian horietako batzuk galdu egiten dira zerbait got hondatuta dagoelako 693 00:42:23,920 --> 00:42:26,530 Zentzu 0 batzuk izan zen 1 eta 1-en izan zen 0-en. 694 00:42:26,530 --> 00:42:30,460 Bad gauza,, buggy software edo hardware akastuna delako gerta daiteke. 695 00:42:30,460 --> 00:42:33,510 Baina bit horietako askok, agian, nahiz eta horien% 100 dira oraindik ere hor dago, 696 00:42:33,510 --> 00:42:38,330 besterik ez da ordenagailua edo kamera ez daki non JPEG 1 hasi 697 00:42:38,330 --> 00:42:41,660 eta non JPEG 2 hasi zen, baina izanez gero, programatzailea, 698 00:42:41,660 --> 00:42:45,800 jakin, adituentzat apur bat, non JPEGs diren edo zer itxura dute, 699 00:42:45,800 --> 00:42:49,570 0 eta 1-en aztertu ahal izango duzu, eta esan, 'Ooh. JPEG. Ooh, JPEG. ' 700 00:42:49,570 --> 00:42:52,830 Programa bat idatzi ditzakezu funtsean bat besterik ez edo begizta bitartean 701 00:42:52,830 --> 00:42:56,100 bakoitzean fitxategi horiek berreskuratzen. 702 00:42:56,100 --> 00:42:59,360 Ikasgai eta, ondoren, eta, beraz, hasteko "segurtasunez" zure fitxategiak ezabatu 703 00:42:59,360 --> 00:43:01,720 hau saihesteko guztira nahi izanez gero. Bai? 704 00:43:01,720 --> 00:43:06,940 [Student galdera, ulertezina] 705 00:43:06,940 --> 00:43:11,150 >> Have memoria gehiago baino egin - 706 00:43:11,150 --> 00:43:14,790 Oh! Ona galdera. Beraz, zergatik, eta gero, trash hustu ondoren, 707 00:43:14,790 --> 00:43:18,300 esango dizu zure ordenagailuan ez duzula leku libre baino zenuen? 708 00:43:18,300 --> 00:43:22,450 Hitz batean, etzanda delako. Gehiago teknikoki, leku gehiago daukazu. 709 00:43:22,450 --> 00:43:26,720 Esan duzulako, beste gauza batzuk jarri dezakezu fitxategi hori behin izan zen, 710 00:43:26,720 --> 00:43:28,930 baina horrek ez du esan nahi bit kanpoan egingo dira, 711 00:43:28,930 --> 00:43:33,070 eta horrek ez du esan nahi bit dira aldatu guztiak 0, esate baterako, zure babeserako. 712 00:43:33,070 --> 00:43:37,520 Aitzitik, "seguru" ezabatze fitxategiak, edo fisikoki suntsitu telefonoa bada, 713 00:43:37,520 --> 00:43:40,810 benetan modu bakarra da, eta beste batzuetan, inguruan. 714 00:43:40,810 --> 00:43:45,300 , Beraz, zergatik ez scary erdi-ohar horretan utzi dugu, eta astelehena, ikusiko dugu. 715 00:43:45,300 --> 00:43:52,810 CS50.TV