1 00:00:00,000 --> 00:00:02,860 [Powered by Google Translate] [Astea 5] 2 00:00:02,860 --> 00:00:04,860 [David J. Malan - Harvard Unibertsitatea] 3 00:00:04,860 --> 00:00:07,260 [Hau CS50 da. - CS50.TV] 4 00:00:07,260 --> 00:00:09,740 >> CS50, Astea 5. 5 00:00:09,740 --> 00:00:12,900 Gaur egun, eta aste honetan, Kernet mundua pixka bat aurkezten dugu 6 00:00:12,900 --> 00:00:14,850 Problema testuinguruan Ezarri 4. 7 00:00:14,850 --> 00:00:18,480 Gaur egun, abbreviated hitzaldi bat izango da, hemen ekitaldi berezi bat delako gero. 8 00:00:18,480 --> 00:00:21,940 Beraz, peek bat hartu dugu, eta bai ikasle eta guraso alike gaur egun tease 9 00:00:21,940 --> 00:00:24,600 horizonte buruzko gauza batzuk. 10 00:00:24,600 --> 00:00:29,050 >> Horien artean, astelehenetik, batzuk gehiago ikaskideekin izango duzu. 11 00:00:29,050 --> 00:00:32,980 edX, Harvard eta MIT OpenCourseWare eta gehiago nahi izanez gero, on line ekimen berri, 12 00:00:32,980 --> 00:00:36,730 Harvard-en campus on Astelehena, horrek esan nahi du, etorri Astelehena abiarazi 13 00:00:36,730 --> 00:00:40,930 izan ahal izango duzu, azken kopuruan, 86.000 osagarriak ikaskideekin 14 00:00:40,930 --> 00:00:43,680 duten jarraituz egingo batera CS50 hitzaldiak eta atal 15 00:00:43,680 --> 00:00:45,890 eta walkthroughs eta arazo multzo. 16 00:00:45,890 --> 00:00:51,870 Eta honen zati gisa, CS50 eta orain CS50x klase irekiera kide bihurtu ahal izango duzu. 17 00:00:51,870 --> 00:00:56,150 Horren zati gisa, konturatzen ez dagoela upsides batzuk izango baita. 18 00:00:56,150 --> 00:01:00,620 Hau egiteko prest, ikasle gehiegizko kopurua, 19 00:01:00,620 --> 00:01:03,820 nahikoa da esan nahi, nahiz eta 108 TFS eta CAk dugu, 20 00:01:03,820 --> 00:01:07,560 ez da nahiko ikasle-irakasle ratioa onena hit dugu behin 80.000 ikasle. 21 00:01:07,560 --> 00:01:09,830 Ez ari gara kalifikatzean hainbeste arazo eskuz ezartzen joan, 22 00:01:09,830 --> 00:01:13,050 beraz, aste honetan sartu arazoa multzoa CS50 Check izango da, 23 00:01:13,050 --> 00:01:15,410 den tresnari komando-line izango aparatuaren barruan 24 00:01:15,410 --> 00:01:17,880 eguneratu behin geroago, asteburu honetan jasoko duzu. 25 00:01:17,880 --> 00:01:21,030 Komando bat, check50, exekutatu zure pset kabuz ahal izango duzu, 26 00:01:21,030 --> 00:01:24,770 eta berehalako feedback jasoko duzu zure programa ez da zuzena edo okerra 27 00:01:24,770 --> 00:01:27,980 dugun emandako hainbat diseinu zehaztapenak arabera. 28 00:01:27,980 --> 00:01:30,310 Hori arazo multzo zehaztapena. 29 00:01:30,310 --> 00:01:34,220 CS50x ikaskideekin egingo baita. 30 00:01:34,220 --> 00:01:36,170 >> Arazoa Set 4 guztiak Kernet buruz da, 31 00:01:36,170 --> 00:01:38,630 eta pset hau izan zen benetan real-bizitza stuff batzuk inspiratu 32 00:01:38,630 --> 00:01:41,210 Horren bidez, eskola graduondoko I interned dut pixka bat 33 00:01:41,210 --> 00:01:45,270 Middlesex County District Attorney bulegoan, auzitegi-lana egiten 34 00:01:45,270 --> 00:01:47,660 beren beruna auzitegiko ikertzailea. 35 00:01:47,660 --> 00:01:50,280 Zer da hau? Eurokoa da, uste dut aste batzuk iraganeko aipatu dudan bezala, 36 00:01:50,280 --> 00:01:52,720 Meza Estatuko Polizia edo beste litzateke etorriko, 37 00:01:52,720 --> 00:01:56,150 jaregin off zuten disko gogorretan eta CDak eta disketeak eta antzeko gauzak, 38 00:01:56,150 --> 00:01:58,770 eta ondoren Kernet bulegoan helburua zen ezagutzeko 39 00:01:58,770 --> 00:02:01,470 ez ote zen edo ez zen nolabaiteko frogak. 40 00:02:01,470 --> 00:02:04,730 Berezia Investigations Unitateak izan zen, beraz, zuri-lepoko krimena izan zen. 41 00:02:04,730 --> 00:02:10,949 Troubling delituak ordenatu, ezer euskarri digitala nolabaiteko zerikusia izan zen. 42 00:02:10,949 --> 00:02:16,450 Bihurtzen da, ez da jende asko idatzi email bat esaten, "nuen". 43 00:02:16,450 --> 00:02:20,490 Beraz, sarritan, auzitegiko bilaketak horiek ez aktibatu askoz fruta hori guztia, 44 00:02:20,490 --> 00:02:22,820 baina batzuetan, pertsona horiek e-posta idatzi litzateke. 45 00:02:22,820 --> 00:02:25,240 Beraz, batzuetan, ahaleginak saritu ziren. 46 00:02:25,240 --> 00:02:31,210 >> Baina eramango auzitegi pset hau izango pset4 dugu grafikoak pixka bat sartuz. 47 00:02:31,210 --> 00:02:35,410 Seguru aski gauza horiek emandako JPEGs, GIFs, eta antzeko egun hauetan. 48 00:02:35,410 --> 00:02:38,320 Baina horri buruz uste izanez gero, irudi bat, askoz Rob aurpegia bezala, 49 00:02:38,320 --> 00:02:41,270 puntu edo pixel-sekuentzia bat bezala prestatua izan da. 50 00:02:41,270 --> 00:02:43,380 Rob aurpegia kasuan, ez da kolore-mota guztiak, 51 00:02:43,380 --> 00:02:46,760 eta banan-banako puntuak, bestela pixel bezala ezagutzen hasi ginen, 52 00:02:46,760 --> 00:02:48,610 behin sartu txikiagotzeko hasi ginen 53 00:02:48,610 --> 00:02:54,660 Baina mundu errazteko dugu pixka bat, eta besterik ez esan hori hemen da Rob zuri-beltza eta, 54 00:02:54,660 --> 00:02:57,490 zuri-beltza eta adierazteko, bakarrik erabili ahal izango dugu bitarrik. 55 00:02:57,490 --> 00:03:01,660 Bitarra erabili behar badugu, 1 edo 0, irudi hori bera adierazi ahal izango dugu 56 00:03:01,660 --> 00:03:06,140 Rob bit patroi hau irribarrez aurpegia. 57 00:03:06,140 --> 00:03:12,100 11000011 zuria, zuria, beltza, beltza, beltza, beltza, zuria, zuria adierazten du. 58 00:03:12,100 --> 00:03:16,150 Eta, beraz, ez da jauzi bat erraldoia, ondoren, argazki koloretsua buruz hitz egiten hasteko, 59 00:03:16,150 --> 00:03:18,600 litzaidake Facebook on ikusi edo kamera digital bat hartu gauzak. 60 00:03:18,600 --> 00:03:21,410 Baina, zalantzarik gabe, orduan, kolore, bit gehiago behar duzu. 61 00:03:21,410 --> 00:03:25,690 Eta argazkiak munduan oso ohikoa da, ez 1-bit kolorea erabiltzeko, 62 00:03:25,690 --> 00:03:29,560 hau iradokitzen du, baina 24-bit kolorea, non lortu benetan milioika kolore. 63 00:03:29,560 --> 00:03:32,250 Beraz, kasua denean handitutako Rob begi, 64 00:03:32,250 --> 00:03:36,370 koloretsua aukera desberdinak milioika edozein zenbaki izan zen. 65 00:03:36,370 --> 00:03:39,040 Beraz, hau aurkezten dugu Arazoa Set 4 Bisita gidatua, eta baita, 66 00:03:39,040 --> 00:03:43,370 gaur izango da, 3:30 ohiko 2:30 ordez delako Ostirala hitzaldia hemen. 67 00:03:43,370 --> 00:03:46,620 Baina bideo ohikoa den bezala bihar online izango da. 68 00:03:46,620 --> 00:03:48,820 >> Ere dugu sartzeko beste fitxategi-formatua. 69 00:03:48,820 --> 00:03:51,270 Hau da, nahita ekarri beldurra bilatzeko lehen, 70 00:03:51,270 --> 00:03:55,670 baina C struct dokumentazioa batzuk. 71 00:03:55,670 --> 00:03:58,940 Microsoft urte bihurtzen da duela lagundu zabaltzea formatu hau 72 00:03:58,940 --> 00:04:05,150 izeneko bitmap file formatua, bmp, eta hori izan zen super simple, koloretsua grafiko fitxategi-formatua 73 00:04:05,150 --> 00:04:10,150 izan zen denbora luzez erabiltzen da, eta, batzuetan, oraindik mahaigain on wallpapers. 74 00:04:10,150 --> 00:04:14,760 Behar dela uste duzu bada, Windows XP eta gogor mendietan, eta zerua urdin, 75 00:04:14,760 --> 00:04:17,170 izan zen, normalean, bmp edo bitmap irudi bat. 76 00:04:17,170 --> 00:04:19,959 Bitmap Gurekin fun dute pixka bat, konplexutasun delako. 77 00:04:19,959 --> 00:04:22,610 Ez nahiko 0 s eta 1s sare hau bezain sinplea da. 78 00:04:22,610 --> 00:04:27,510 Horren ordez, fitxategi baten Irteeran goiburu bat bezala gauzak duzu. 79 00:04:27,510 --> 00:04:31,990 Beraz, beste era batera esanda, barruan. Bmp fitxategia 0 s eta 1s sorta oso bat da, 80 00:04:31,990 --> 00:04:34,910 baina badira osagarriak 0 s eta 1s han. 81 00:04:34,910 --> 00:04:38,220 Eta bihurtzen da zer esan ziurrenik urte hartu dugu ematen 82 00:04:38,220 --> 00:04:45,170 doc edo. xls edo. mp3, fitxategi formatu mp4, edozein fitxategi-formatu 83 00:04:45,170 --> 00:04:48,480 Oraindik ezagutzen - zer esan nahi du nahiz eta fitxategi formatu bat izan nahi du, 84 00:04:48,480 --> 00:04:52,480 egunaren bukaeran fitxategi horiek guztiak Aski 0 s eta 1s delako erabiltzen dugu. 85 00:04:52,480 --> 00:04:56,810 0 s eta agian ere, eta 1s ASCII bidez ABC edo antzekoak, 86 00:04:56,810 --> 00:04:58,820 baina egunaren amaieran, oraindik 0 s eta 1s, besterik gabe. 87 00:04:58,820 --> 00:05:02,100 Beraz, gizakiak besterik ez, noizean behin, erabaki berri bat fitxategi-formatua asmatu 88 00:05:02,100 --> 00:05:06,420 non zer bit ereduak benetan esan nahi homologatuko dute. 89 00:05:06,420 --> 00:05:09,220 Eta hemen, kasu honetan, folks duten bitmap fitxategi-formatua diseinatu 90 00:05:09,220 --> 00:05:15,620 esan zuen, eta bitmap file byte lehen, 0 desplazamendu han adierazten da, 91 00:05:15,620 --> 00:05:18,940 dago zenbait cryptically izeneko aldagaia izeneko bfType izango da, 92 00:05:18,940 --> 00:05:23,080 file bitmap mota dago, file bitmap mota da. 93 00:05:23,080 --> 00:05:27,700 Infer errenkadan bigarren desplazamendu 2, multzoko 2 byte, agian dezakezu 94 00:05:27,700 --> 00:05:33,740 0 s eta 1s eredu hori adierazten du zer? Zerbait tamaina. 95 00:05:33,740 --> 00:05:35,310 Eta doa hortik. 96 00:05:35,310 --> 00:05:37,410 Beraz, Problem Set 4, gauza horiek batzuetan zehar egingo ibili. 97 00:05:37,410 --> 00:05:39,520 Ez dugu, azkenean, horiek guztiak buruz zaintzen. 98 00:05:39,520 --> 00:05:47,510 Baina interesgarria byte 54 inguruan hasten da: rgbtBlue, Green, eta Red. 99 00:05:47,510 --> 00:05:52,110 Duzun inoiz bada entzun akronimoa RGB - gorria, berdea, urdina erreferentzia bat da 100 00:05:52,110 --> 00:05:54,610 bihurtzen da, ostadarraren kolore guztiak margotzen dezakezu 101 00:05:54,610 --> 00:05:58,180 gorria eta urdina eta berdea konbinazio batzuk. 102 00:05:58,180 --> 00:06:03,320 Eta, hain zuzen ere, gelan gurasoek lehen proiektore batzuk gogora ekarri ditzake. 103 00:06:03,320 --> 00:06:05,890 Gaur egun, ikusi besterik ez duzu bat distiratsua irteten lentearen baten argia, 104 00:06:05,890 --> 00:06:09,800 baina eguneko lens gorria, urdina lentea, eta lente berdea izan duzu, 105 00:06:09,800 --> 00:06:13,380 eta elkarrekin zuzendutako pantaila bat dute eta koloretsua irudi bat osatu du. 106 00:06:13,380 --> 00:06:16,270 Eta askotan, erdiko eskola eta goi eskola lente horiek izango litzateke 107 00:06:16,270 --> 00:06:19,720 inoiz beraz apur bat askew, eta, beraz, bikoitzak edo hirukoitzak irudiak ikusteko moduko zinen. 108 00:06:19,720 --> 00:06:24,100 Baina ideia izan zen. Gorria eta berdea eta argi urdina irudi bat pintura izan duzu. 109 00:06:24,100 --> 00:06:26,590 Eta printzipio hori bera da ordenagailuak erabiltzen da. 110 00:06:26,590 --> 00:06:30,230 >> Beraz, erronka eta, ondoren, arazo artean Set 4 dira zenbait gauza bat izango da. 111 00:06:30,230 --> 00:06:34,800 Benetan irudi bat tamainaz aldatu, 0 s eta 1s eredu bat hartu, 112 00:06:34,800 --> 00:06:40,200 irudikatu 0 s eta 1s zatien egitura bat zer hau atsegin dute. 113 00:06:40,200 --> 00:06:43,630 eta, ondoren, irudikatu nola pixel errepikatzeko - gorri, blues, berde 114 00:06:43,630 --> 00:06:46,660 barruan beraz, irudi bat itxura hau, hasieran, 115 00:06:46,660 --> 00:06:49,210 hau atsegin zitekeen begiratu ordez ondoren. 116 00:06:49,210 --> 00:06:53,640 Beste erronka artean duzula entregatu egingo auzitegiko irudi bat ere izango 117 00:06:53,640 --> 00:06:56,030 kamera digital bat benetako fitxategi bat. 118 00:06:56,030 --> 00:06:58,960 Eta kamera bat da, Bazen behin, izan ziren argazki sorta osoa. 119 00:06:58,960 --> 00:07:03,760 Arazoa da ezabatu ustekabean edo irudia hondatuta dago nolabait. 120 00:07:03,760 --> 00:07:05,750 Bad kamera digital gauzak gertatuko. 121 00:07:05,750 --> 00:07:09,150 Eta, beraz, azkar kopiatu dugu txartela off 0 s eta 1s 122 00:07:09,150 --> 00:07:13,610 gorde horiek guztiak fitxategi bat handi batean, eta eta gero entregatu dugu duzu Arazoa Ezarri 4 123 00:07:13,610 --> 00:07:19,320 beraz, C programa bat idatzi dezakezu JPEGs horiek guztiak berreskuratzeko, haien. 124 00:07:19,320 --> 00:07:23,330 Eta JPEGs hori bihurtzen da, nahiz eta pixka bat ari dira fitxategi formatu konplexu 125 00:07:23,330 --> 00:07:26,360 aurpegia irribarretsu hemen baino askoz ere konplexuagoa dute 126 00:07:26,360 --> 00:07:31,160 bihurtzen da JPEG bakoitza 0 s eta 1s berean eredu batekin hasten da. 127 00:07:31,160 --> 00:07:35,630 Beraz erabiliz, azken finean, bitartean loop bat edo begizta edo antzekoak, 128 00:07:35,630 --> 00:07:38,880 auzitegiko irudi honetan 0 s guztiak eta 1s baino gehiago dezakezu batetik bestera joateko, 129 00:07:38,880 --> 00:07:43,150 eta arazo multzo zehaztapen definitzen berezia eredu hori ikusten duzun aldi bakoitzean, 130 00:07:43,150 --> 00:07:47,880 bere gain hartzen hemen da, probabilitatea oso altua, JPEG baten hasiera. 131 00:07:47,880 --> 00:07:51,230 Eta ahalik eta azkarren aurkitzen berean eredua byte kopurua batzuk 132 00:07:51,230 --> 00:07:55,430 edo kilobyteko edo megabyte geroago, bere gain hartzen hemen bigarren JPEG bat da, 133 00:07:55,430 --> 00:07:57,380 photo hartu ondoren lehen dut. 134 00:07:57,380 --> 00:08:01,370 Fitxategi hori irakurtzeko stop me, berri bat idazten hasteko, 135 00:08:01,370 --> 00:08:06,310 eta zure programaren irteera pset4 adina 50 JPEGs izango da. 136 00:08:06,310 --> 00:08:09,270 Eta ez bada 50 JPEGs, begizta apur bat behar duzu. 137 00:08:09,270 --> 00:08:12,490 JPEGs kopurua infinitua bat izanez gero, begizta infinitu bat behar duzu. 138 00:08:12,490 --> 00:08:14,910 Beraz, hori ere oso ohikoa kasu bat izango da. 139 00:08:14,910 --> 00:08:16,600 Beraz, horizonte. 140 00:08:16,600 --> 00:08:21,310 >> Quiz 0 atzean, nire e-posta bakoitzeko konturatzen beti folks Biak pozik daudela, 141 00:08:21,310 --> 00:08:23,640 0 neutral, eta inguruan triste quiz denbora sort. 142 00:08:23,640 --> 00:08:26,800 Eta mesedez ez iristea, me, burua TF Zamyla, zure TF, 143 00:08:26,800 --> 00:08:31,180 edo Eus-ko badakizula gauzak nola joan eztabaidatu nahi izanez gero. 144 00:08:31,180 --> 00:08:35,539 >> Beraz, gurasoek txunditzea hemen, gelan, zer CS50 liburutegia da? 145 00:08:36,429 --> 00:08:40,390 [Barreak] Good job. 146 00:08:40,390 --> 00:08:48,340 Zer da CS50 liburutegia? Bai. >> [Ikasleak] pre-idatzizko kodea multzoa da [inaudible] 147 00:08:48,340 --> 00:08:49,750 Ongi, ona da. 148 00:08:49,750 --> 00:08:53,240 Kode multzo pre-idatzitako dugu langile bat idatzi du, eskaintzen dizugu, 149 00:08:53,240 --> 00:08:55,030 komun funtzionalitateren bat eskaintzen du, 150 00:08:55,030 --> 00:08:59,020 Stuff get me kate bat bezala, me int - hemen agertzen diren funtzio guztiak. 151 00:08:59,020 --> 00:09:02,260 >> Gaur egun aurrera, prestakuntza-gurpil hauek benetan hartu off hasten gara. 152 00:09:02,260 --> 00:09:05,050 Kentzeko kate bat hasiko gara, 153 00:09:05,050 --> 00:09:08,870 abisuaren sinonimo besterik ez zen zer benetako datu-mota? >> [Ikasle baino gehiago] Char *. 154 00:09:08,870 --> 00:09:12,730 Char *. Gurasoentzat, [egiten whooshing soinua izan zen ziurrenik. Hori ona da. 155 00:09:12,730 --> 00:09:17,550 Char * hasteko pantaila gehiago ikus kendu egiten ditugu kate bat bezala gure hiztegia dugu, 156 00:09:17,550 --> 00:09:19,730 gutxienez, benetan kodea idatziz dator. 157 00:09:19,730 --> 00:09:22,840 Era berean, funtzio hauetako batzuk erabiliz askoz uzteko dugu 158 00:09:22,840 --> 00:09:25,280 gure programa sofistikatuagoa lortzeko delako. 159 00:09:25,280 --> 00:09:28,480 Baino besterik ez idazteko gonbita keinukariak bertan eseri duten programak, 160 00:09:28,480 --> 00:09:31,870 Erabiltzaileak zerbait idatzi zain, zure inputak jasoko duzu beste nonbait from. 161 00:09:31,870 --> 00:09:35,490 Esate baterako, lortuko duzu, disko gogor lokalean bit serie bat. 162 00:09:35,490 --> 00:09:38,580 Ordez duzu etorkizunean sare konexio bat, 163 00:09:38,580 --> 00:09:40,230 web batzuk nonbait. 164 00:09:40,230 --> 00:09:44,110 >> Hargatik back geruza hau zuritu lehen aldiz, eta tira CS50 Appliance 165 00:09:44,110 --> 00:09:49,010 eta izeneko fitxategi hau cs50.h, daramat # asteak barne, 166 00:09:49,010 --> 00:09:51,140 baina dezagun benetan zer honen barruan. 167 00:09:51,140 --> 00:09:54,430 Blue fitxategia goiko besterik ez da iruzkinak sorta osoa: 168 00:09:54,430 --> 00:09:57,050 bermerik informazioa eta lizentzien. 169 00:09:57,050 --> 00:09:59,050 Paradigma ohikoa software baten sort 170 00:09:59,050 --> 00:10:01,580 software asko egun hauetan zer open source deitzen zaio delako, 171 00:10:01,580 --> 00:10:05,220 Horrek esan nahi du norbaitek idatzi du kodea eta libreki eskuragarri egin da 172 00:10:05,220 --> 00:10:10,470 ez bakarrik erabiltzeko, eta exekutatu, baina benetan irakurri eta aldatu eta zure lana integratzeko. 173 00:10:10,470 --> 00:10:14,660 Beraz, zer egin duzun, open source software, oso txikia bada ere. 174 00:10:14,660 --> 00:10:18,560 Azken iruzkinak behera joan I bada, baina, hasteko, gauza batzuk gehiago ezagutzen ikusteko dugu. 175 00:10:18,560 --> 00:10:25,010 Oharra top hemen cs50.h fitxategia goiburu fitxategiak sorta osoa. 176 00:10:25,010 --> 00:10:28,560 Horietako gehienak, ez dugu ikusi aurretik, baina ezagutzen bat da. 177 00:10:28,560 --> 00:10:32,270 Horietako zein, ikusi dugu, labur-labur bada ere, eta, beraz, orain arte? >> [Ikasleak] Standard liburutegia. 178 00:10:32,270 --> 00:10:35,810 Bai, liburutegi estandarrak. stdlib.h du malloc. 179 00:10:35,810 --> 00:10:38,320 Behin, memoria dinamikoa esleipena buruz hitz egiten hasi ginen, 180 00:10:38,320 --> 00:10:41,650 itzuli gara datorren astean ere, hasi fitxategi hori barne. 181 00:10:41,650 --> 00:10:46,640 Bihurtzen da boolearra eta egia eta gezurra ez dela benetan existitzen C per se 182 00:10:46,640 --> 00:10:49,440 besteak beste, fitxategi hau ez dago hemen. 183 00:10:49,440 --> 00:10:52,710 Asteak dugu stdbool.h barne 184 00:10:52,710 --> 00:10:55,620 bool, egia edo gezurra. nozioa erabili ahal izango duzu 185 00:10:55,620 --> 00:10:58,620 Hau gabe, faltsua da ordenatzeko eta int bat erabili nahi duzun 186 00:10:58,620 --> 00:11:02,610 eta arbitrarioki bere gain hartzen 0 faltsua da, eta 1, egia da. 187 00:11:02,610 --> 00:11:07,150 Behera joan gara bada gehiago nahi izanez gero, hona hemen gure kate baten definizioa da. 188 00:11:07,150 --> 00:11:11,390 Bihurtzen da, Nik esan baino lehen, non star hau da, ez du benetan axola. 189 00:11:11,390 --> 00:11:13,720 Espazioa ere izan dezakezu inguruan. 190 00:11:13,720 --> 00:11:16,740 Dugu seihilekoa dira sustatzen du, halaber, argi utzi 191 00:11:16,740 --> 00:11:18,620 izar mota egin behar du, 192 00:11:18,620 --> 00:11:21,700 baina konturatzen bezala, ez da apur bat eta ohikoagoa bada, 193 00:11:21,700 --> 00:11:24,430 jarri behar da, baina funtzionalki, gauza bera da. 194 00:11:24,430 --> 00:11:27,720 Baina orain irakurri dugu behera gehiago nahi izanez gero, dezagun GetInt begirada bat 195 00:11:27,720 --> 00:11:32,190 erabiltzen dugulako hori, agian, lehen baino lehen beste edozer seihileko honetan. 196 00:11:32,190 --> 00:11:37,440 Hemen da GetInt. Hau zer da? >> [Ikasleak] prototipoa. >> Prototipo bat besterik ez da. 197 00:11:37,440 --> 00:11:41,410 Askotan, jarri dugu prototipoak gure gailurretan c fitxategiak 198 00:11:41,410 --> 00:11:46,690 baina era berean jarri prototipoak goiburu-fitxategiak, h fitxategiak, hau hemen bezala 199 00:11:46,690 --> 00:11:50,840 beraz, funtzio batzuk idatzi nahi duzun beste pertsona batzuk erabili ahal izateko, 200 00:11:50,840 --> 00:11:53,550 hau da, hain zuzen ere CS50 liburutegia kasuan, 201 00:11:53,550 --> 00:11:57,040 ezartzea, ez bakarrik zure funtzioak cs50.c antzeko zerbait, 202 00:11:57,040 --> 00:12:02,790 jarri ere, prototipoen fitxategi hori ez goialdean baina Goiburu-fitxategi baten goialdean. 203 00:12:02,790 --> 00:12:07,170 Ondoren, Goiburu-fitxategi hori da, bere lagun eta lankideen artean, besteak beste, 204 00:12:07,170 --> 00:12:09,760 #, besteak beste, beren kodea propioa. 205 00:12:09,760 --> 00:12:12,210 Beraz, denbora honetan guztian, duzun prototipoak horiek guztiak barne, 206 00:12:12,210 --> 00:12:16,580 eraginkortasunez zure koadernoan goialdean baina honen bidez, besteak beste mekanismo 207 00:12:16,580 --> 00:12:20,070 funtsean kopiak eta pastak fitxategi hau zeure sartu. 208 00:12:20,070 --> 00:12:23,070 Hona hemen dokumentazio nahiko zehatza da. 209 00:12:23,070 --> 00:12:25,640 Pretty askoz ere dugu hartu eman GetInt int bat lortzen, 210 00:12:25,640 --> 00:12:27,640 baina badaude izkinan kasu batzuetan izarrekin bihurtzen da. 211 00:12:27,640 --> 00:12:31,810 Zer erabiltzaileari zenbaki bat bide handiegia mota bada, quintillion 212 00:12:31,810 --> 00:12:35,490 besterik ezin int baten barruan sartzen? Zer espero den portaera da? 213 00:12:35,490 --> 00:12:38,020 Egokiena, aurreikus da. 214 00:12:38,020 --> 00:12:40,280 Beraz, kasu honetan, benetan irakurri fina inprimatu 215 00:12:40,280 --> 00:12:44,500 lerroa ezin bada irakurri, itzultzen INT_MAX honetan benetan ikusiko dituzu. 216 00:12:44,500 --> 00:12:48,320 Inoiz ez dugu honi buruz hitz egin zuen, baina bere kapitalizazioa oinarrituta, zer da ziurrenik? 217 00:12:48,320 --> 00:12:50,640 [Ikasleak] konstante bat. >> Konstante bat da. 218 00:12:50,640 --> 00:12:54,770 Berezi batzuk etengabeko ziurrenik goiburu fitxategiak horietako bat izendatu da 219 00:12:54,770 --> 00:13:00,090 goragotik fitxategia, eta INT_MAX da seguruenik zerbait gutxi gorabehera 2 milioi bezala, 220 00:13:00,090 --> 00:13:04,990 behar dugu, nolabait, zerbait adierazten duelako ideia izatea oker joan da, 221 00:13:04,990 --> 00:13:10,700 bai, dugu, gure eskura 4 milioi zenbakiak: -2 milioi 2 milioi, eman edo hartu. 222 00:13:10,700 --> 00:13:14,710 Beno, zer da programazio ohikoa besterik ez da zenbaki horiek lapurtu duzu, 223 00:13:14,710 --> 00:13:18,920 agian 0, agian 2 milioi, agian -2 milioi 224 00:13:18,920 --> 00:13:23,280 Zure daitezkeen balioak bat gastatzen duzu, beraz, mundu dezakezu konprometitzea 225 00:13:23,280 --> 00:13:26,820 zerbait oker joaten bada, hau big super balioa itzuliko da. 226 00:13:26,820 --> 00:13:31,030 Baina ez baduzu nahi, erabiltzaileak 234 atsegin críptica zerbait idazten ..., benetan big zenbaki bat. 227 00:13:31,030 --> 00:13:34,060 Orokortu duzu konstante bat jo ordez. 228 00:13:34,060 --> 00:13:38,060 Beraz, benetan, zinen anal bada aste batzuk iraganeko edozein momentutan GetInt izeneko 229 00:13:38,060 --> 00:13:42,900 izan behar duzu baldintza batekin egin erabiltzaile motaren bada INT_MAX egiaztapena 230 00:13:42,900 --> 00:13:46,590 edo, zehatzago esanda, egin GetInt bueltan INT_MAX izanez gero, ez delako, 231 00:13:46,590 --> 00:13:51,830 benetan esan nahi du, ez dute idatzi. Zerbait gaizki joan da, kasu honetan. 232 00:13:51,830 --> 00:13:56,080 Beraz, hau da, oro har, Sentinel balioa, besterik gabe, esan nahi berezi gisa ezaguna. 233 00:13:56,080 --> 00:13:58,120 >> Dezagun orain. C fitxategia bihurtu. 234 00:13:58,120 --> 00:14:01,340 C fitxategia aparatuaren existitu denbora pixka bat. 235 00:14:01,340 --> 00:14:06,840 Eta, hain zuzen ere, aparatuaren du pre-konpilatu gauza deitzen dugun objektu-kode sartu, 236 00:14:06,840 --> 00:14:09,540 baina ez bakarrik ez dizu axola non sistema ezagutzen duelako da 237 00:14:09,540 --> 00:14:11,730 Kasu honetan, non da: tresnari. 238 00:14:11,730 --> 00:14:17,400 Dezagun behera joan eta GetInt ikusi nola GetInt izan da lan hori guztia. 239 00:14:17,400 --> 00:14:19,460 Hemen, aurretik antzeko iruzkinak egin behar dugu. 240 00:14:19,460 --> 00:14:21,660 Dezagun gerturatzeko me kodea zati. 241 00:14:21,660 --> 00:14:23,900 Eta zer GetInt dugu honako hau da. 242 00:14:23,900 --> 00:14:25,700 Sarrera ez du. 243 00:14:25,700 --> 00:14:29,510 Int bat itzultzen ditu, while (true), beraz, nahita begizta infinitua behar dugu, 244 00:14:29,510 --> 00:14:33,180 baina zentzuzkoa hautsi dugu hau, nolabait, edo honen barruan itzultzeko. 245 00:14:33,180 --> 00:14:34,870 >> Ikus dezagun nola obra honetan. 246 00:14:34,870 --> 00:14:39,240 Erabiliz GetString begizta barruan lehen lerroan honetan, 166 badirudi dugu. 247 00:14:39,240 --> 00:14:43,780 Hau da, gaur egun, praktika onak zein egoera pean GetString itzuli delako 248 00:14:43,780 --> 00:14:47,660 keyword NULL berezia? >> [Ikasleak] zerbait oker joaten bada. 249 00:14:47,660 --> 00:14:51,630 Zerbait oker badago. Eta zer oker joan izan GetString antzeko zerbait deitzen? 250 00:14:54,960 --> 00:14:57,640 Bai. >> [Ikasleak] malloc huts egin emateko ints. 251 00:14:57,640 --> 00:14:59,150 Bai. Agian malloc huts egin. 252 00:14:59,150 --> 00:15:03,190 Somewhere kanpaia azpian, GetString malloc, esleitzen memoria deituz da, 253 00:15:03,190 --> 00:15:06,020 ordenagailua dendan pertsonaia guztiak aukera ematen dizu 254 00:15:06,020 --> 00:15:07,750 erabiltzaileak sartu teklatu mota. 255 00:15:07,750 --> 00:15:11,590 Eta demagun erabiltzaileak denbora librea asko izan, oro har, eta idatzi, esate baterako, 256 00:15:11,590 --> 00:15:16,160 2 milioi ordenagailu baino gehiago karaktereak karaktere baino are RAM ditu. 257 00:15:16,160 --> 00:15:19,250 GetString du hori adierazteko gai izan. 258 00:15:19,250 --> 00:15:22,560 Nahiz eta super, super izkinan kasu arraroa da, 259 00:15:22,560 --> 00:15:24,340 nolabait hau kudeatzeko gai izango da, 260 00:15:24,340 --> 00:15:28,750 eta, beraz, GetString ginen itzuliz gero eta irakurri bere dokumentazioa, Izan ere bueltan NULL du. 261 00:15:28,750 --> 00:15:34,460 Beraz, gaur egun GetString NULL itzuli huts egiten badu, GetInt da INT_MAX itzuli huts egiten du 262 00:15:34,460 --> 00:15:37,690 Sentinel gisa. Hauek dira giza konbentzioak besterik ez dira. 263 00:15:37,690 --> 00:15:41,450 Modu bakarra kasu honetan jakin nahi duzun dokumentazioa irakurriz. 264 00:15:41,450 --> 00:15:45,040 >> Dezagun joan int da benetan ahaztuak. 265 00:15:45,040 --> 00:15:51,160 Joan I behera bada, apur bat gehiago, line 170, lerro hauen gainean iruzkin bat egin behar dugu. 266 00:15:51,160 --> 00:15:55,100 Deklaratzeko 172 int bat, n, eta char, c, eta, ondoren, funtzio berri hau, 267 00:15:55,100 --> 00:15:58,930 batzuk, sscanf aurretik zehar estropezuka. 268 00:15:58,930 --> 00:16:00,870 Katea scanf dago. 269 00:16:00,870 --> 00:16:05,700 Beste era batera esanda, emaidazu kate bat eta informazio interesgarria piezak eskaneatu egingo dut. 270 00:16:05,700 --> 00:16:07,360 Zer esan nahi du horrek? 271 00:16:07,360 --> 00:16:11,800 Demagun, literalki, 123 I idatzi, teklatua, eta ondoren sakatu Sartu. 272 00:16:11,800 --> 00:16:16,470 Zer da 123 datu mota GetString itzultzen da? >> [Ikasleak] String. 273 00:16:16,470 --> 00:16:18,380 Jakina, kate bat da, ezta? Kate bat lortu nuen. 274 00:16:18,380 --> 00:16:23,220 Beraz, 123 da benetan, aurrekontu-unquote, bukaeran 0 \ 123. 275 00:16:23,220 --> 00:16:27,110 Int bat ez dela. Hau ez da zenbaki bat. Itxura zenbaki bat bezalakoa da, baina ez da benetan. 276 00:16:27,110 --> 00:16:29,080 Beraz, zer ez GetInt izan nahi duzu? 277 00:16:29,080 --> 00:16:35,750 123 \ 0 - eta, nolabait, zenbaki oso bat benetako bihurtzeko katea ezkerretik eskuinera eskaneatu ditu. 278 00:16:35,750 --> 00:16:37,850 Irudikatu izan hau nola egin. 279 00:16:37,850 --> 00:16:41,450 Uste itzuliz gero pset2, baina ustez apur bat Caesar eroso 280 00:16:41,450 --> 00:16:44,820 edo Vigenere, eta, beraz, kate bat baino gehiago egin ahal izango duzu batetik bestera joateko, karakteretan bihur ditzakezu ints. 281 00:16:44,820 --> 00:16:46,710 Baina arraioa, lan asko da. 282 00:16:46,710 --> 00:16:49,860 Zergatik ez deitu sscanf bezala, funtzio hori ez duzu? 283 00:16:49,860 --> 00:16:54,230 Beraz sscanf argumentu bat espero du izeneko kasu honetan lerroa, kate bat da. 284 00:16:54,230 --> 00:17:01,840 Komatxo artean zehaztu ondoren, duzu, oso antzekoak printf, kate honetan zer espero duzu. 285 00:17:01,840 --> 00:17:09,000 Eta hemen zer esaten dut zenbaki hamartar eta agian pertsonaia bat izatea espero dut. 286 00:17:09,000 --> 00:17:12,000 Eta hori zergatik gertatzen da momentu bat besterik ez dugu. 287 00:17:12,000 --> 00:17:15,869 Eta bihurtzen da izendapen hori dela stuff gogorarazten buruz hitz egiten hasi ginen. 288 00:17:15,869 --> 00:17:17,619 just Duela aste bat baino gehiago. 289 00:17:17,619 --> 00:17:21,740 Zer da eta n eta c Gurekin hemen egiten? >> [Ikasleak] n Helbidea eta c helbidea. 290 00:17:21,740 --> 00:17:25,400 Bai. Me It emanez helbidea c n eta helbidea. Zergatik da garrantzitsua? 291 00:17:25,400 --> 00:17:30,220 C funtzioak, beti dezakezu itzultzeko balioa edo baliorik ez badakizu. 292 00:17:30,220 --> 00:17:34,530 Int, kate bat, mugikor bat, char bat, edozein izanda ere, edo void itzuli ahal izango duzu, itzuli ahal izango duzu, 293 00:17:34,530 --> 00:17:38,030 baina gauza bat bakarrik itzuli ahal izango dituzu Gehienez. 294 00:17:38,030 --> 00:17:42,760 Baina hemen sscanf me agian int, zenbaki hamartar bat itzuli nahi dugu, 295 00:17:42,760 --> 00:17:46,220 eta, gainera, karakterra, eta zergatik dagoen karakterra une batean azaldu dut. 296 00:17:46,220 --> 00:17:51,460 Eraginkortasunez nahi duzu sscanf bi gauza itzultzeko, baina hori ez da posible C. 297 00:17:51,460 --> 00:17:55,200 Inguruan lan egin ahal izango dituzu bi helbideak pasatuz 298 00:17:55,200 --> 00:17:57,370 bezain laster entregatu funtzio bat bi helbide delako, 299 00:17:57,370 --> 00:18:00,470 zer egin dezaket funtzio hori haiekin do? >> [Ikasleak] helbide horiek idaztea. 300 00:18:00,470 --> 00:18:02,010 Helbide horiek idatz dezake. 301 00:18:02,010 --> 00:18:05,770 Star eragiketa erabili ahal izango duzu, eta han joan, helbide horietako bakoitzean. 302 00:18:05,770 --> 00:18:11,260 Sort back-ateko mekanismo hau, baina oso ohikoa da aldagaien balioak aldatu 303 00:18:11,260 --> 00:18:14,870 Kasu honetan, bi leku bakar bat baino gehiago. 304 00:18:14,870 --> 00:18:21,340 Orain konturatu naiz == 1, eta ondoren egiaztapena n itzuli hori ez bada, hain zuzen ere, egia ebaluatzeko. 305 00:18:21,340 --> 00:18:26,170 Beraz, zer gertatzen da? Teknikoki, benetan nahi dugu GetInt gertatuko da. 306 00:18:26,170 --> 00:18:30,740 Aurrekontu-unquote 123 -, analizatu nahi dugu, nolabait esateko, kate irakurri nahi dugu - 307 00:18:30,740 --> 00:18:34,560 eta badirudi zenbaki bat dago, zer sscanf ari gara kontatzea egin bezala 308 00:18:34,560 --> 00:18:38,190 aldagai hau jartzen da zenbaki hori - 123 - n me. 309 00:18:38,190 --> 00:18:42,090 Beraz, zergatik gero ez dute I actually baita? 310 00:18:42,090 --> 00:18:48,220 Zer da pertsonaia bat lortu ere egin dezakezu hemen esaten sscanf rola? 311 00:18:48,220 --> 00:18:53,470 [Inaudible ikaslearen erantzuna] >> dezimal benetan lan egin dezake. 312 00:18:53,470 --> 00:18:56,330 Dezagun eutsi sakatuta une batez pentsatu. Zer gehiago? 313 00:18:56,330 --> 00:18:59,270 [Ikasleak] NULL izan daiteke. >> Good pentsamendu. Karakterea nulua izan daiteke. 314 00:18:59,270 --> 00:19:01,660 Egia esan, ez da kasu honetan. Bai. >> [Ikasleak] ASCII. 315 00:19:01,660 --> 00:19:04,340 ASCII. Edo are gehiago utzi orokortu me. 316 00:19:04,340 --> 00:19:06,640 % C error egiaztapena da. 317 00:19:06,640 --> 00:19:09,300 Ez dugu nahi zenbakia pertsonaia bat izan ondoren, 318 00:19:09,300 --> 00:19:11,870 baina honekin egin me honako hau da. 319 00:19:11,870 --> 00:19:18,210 Bihurtzen da sscanf, n eta c balioak gordetzeko hemen adibide honetan, gainera, 320 00:19:18,210 --> 00:19:24,890 zer ere ez da aldagai kopurua itzultzen du balioak sartu sartu 321 00:19:24,890 --> 00:19:30,260 Beraz, soilik 123 bada, idatzi eta, ondoren, soilik% d dator, 322 00:19:30,260 --> 00:19:33,880 eta n bakarrik lortzen 123 bezalako balio bat gordetzen da, 323 00:19:33,880 --> 00:19:35,640 eta ez da ezer lortzen c jartzen. 324 00:19:35,640 --> 00:19:37,620 C zabor balioa izaten jarraitzen du, eta, beraz, hitz egiten 325 00:19:37,620 --> 00:19:40,730 zabor delako inoiz ez dira balio batzuk hasieratu. 326 00:19:40,730 --> 00:19:45,520 Beraz, kasu horretan, sscanf itzultzen 1 erakusleak horietako biztanle I 1 delako, 327 00:19:45,520 --> 00:19:50,190 Kasu horretan handia, int dut libre I line beraz, memoria libratzeko 328 00:19:50,190 --> 00:19:54,000 GetString hori benetan esleitu, eta, ondoren, n itzuliko naiz, 329 00:19:54,000 --> 00:19:58,500 bestela, galdetu al duzu inoiz hori non Saiatu berriro adierazpena datorren dator, hemen. 330 00:19:58,500 --> 00:20:04,390 Beraz, bada, ordea, idatzi 123foo I - testu ausazko sekuentzia batzuk - 331 00:20:04,390 --> 00:20:08,490 sscanf zenbakia, zenbakia, zenbakia, f ikusteko, 332 00:20:08,490 --> 00:20:16,410 eta n 123 jarri behar da; c f jarri eta, ondoren, 2 itzultzeko. 333 00:20:16,410 --> 00:20:20,640 Beraz, definizio oinarrizko sscanf portaera, oso modu sinple bat besterik ez dugu erabiltzen 334 00:20:20,640 --> 00:20:23,900 ondo, hasiera batean baina egun nahiko simple mekanismo amaieran konplexua - 335 00:20:23,900 --> 00:20:28,320 esaten int bat dago, eta, beraz, bada, gauza bakarra aurkitu dut? 336 00:20:28,320 --> 00:20:29,860 Eta zuriunez hemen nahita. 337 00:20:29,860 --> 00:20:34,000 Irakurri sscanf dokumentazioa baduzu, kontatzen badu zuriunez pieza bat 338 00:20:34,000 --> 00:20:38,810 hasieran edo amaieran, sscanf ere, erabiltzaileak aukera emango du, edozein arrazoigatik, 339 00:20:38,810 --> 00:20:41,860 sakatu zuriune-barra 123 eta legezko izango da. 340 00:20:41,860 --> 00:20:44,150 Ez duzu erabiltzailea Yell baizik zuriune-barra! 341 00:20:44,150 --> 00:20:48,640 hasieran edo amaieran, hau da, just a little more user-friendly. 342 00:20:48,640 --> 00:20:52,300 >> Galdera Any gero GetInt? Bai. >> [Ikasleak] Zer besterik ez baduzu char bat jarri? 343 00:20:52,300 --> 00:20:54,030 Ona galdera. 344 00:20:54,030 --> 00:20:59,890 Zer besterik ez duzu f bezalako char bat izanez gero, idatzi eta sakatu Sartu inoiz 123 idatzi gabe? 345 00:20:59,890 --> 00:21:02,420 Zer kode lerro honen portaera izan duela uste al duzu? 346 00:21:02,420 --> 00:21:04,730 [Inaudible ikaslearen erantzuna] 347 00:21:04,730 --> 00:21:08,790 Bai, eta, beraz, sscanf hau ere izan daiteke, kasu horretan, ez delako, n edo c bete. 348 00:21:08,790 --> 00:21:15,310 Horren ordez, itzultzeko 0, horrelako dut, halaber, eszenatoki hori harrapatzeko da 349 00:21:15,310 --> 00:21:18,750 balio espero dut nahi 1 delako. 350 00:21:18,750 --> 00:21:22,000 Nahi dut soilik, eta gauza bakarra bete behar dira. Ona galdera. 351 00:21:22,000 --> 00:21:24,290 >> Beste batzuk? Guztiak eskubidea. 352 00:21:24,290 --> 00:21:26,250 >> Dezagun hemen funtzio guztietan barrena joan, 353 00:21:26,250 --> 00:21:29,500 baina badirudi, agian interes gainerako GetString 354 00:21:29,500 --> 00:21:32,790 bihurtzen da delako GetFloat, GetInt, GetDouble, GetLongLong 355 00:21:32,790 --> 00:21:36,260 punt guztiak GetString funtzionalitatea asko. 356 00:21:36,260 --> 00:21:39,750 Beraz, dezagun nola inplementatu hemen zuen begirada bat. 357 00:21:39,750 --> 00:21:43,630 Txiki hau konplexu bat du, baina oinarriak berberak erabiltzen 358 00:21:43,630 --> 00:21:45,670 hasi gara astetik buruz hitz egiten. 359 00:21:45,670 --> 00:21:49,490 GetString, argumentu ez du hutsunea bakoitzeko hemen 360 00:21:49,490 --> 00:21:53,730 eta kate bat itzultzen du, itxuraz I am buffer izeneko kate bat ere geratuko. 361 00:21:53,730 --> 00:21:56,270 Egia esan, ez dakit zer den oraindik erabili ahal izateko, baina ikusiko dugu. 362 00:21:56,270 --> 00:21:58,390 Default 0 edukiera itxura. 363 00:21:58,390 --> 00:22:01,350 Ez nahiko ziur non hau da, ez ziur zer n da erabili behar den oraindik, 364 00:22:01,350 --> 00:22:03,590 baina orain pixka bat gehiago interesgarria da lortzean. 365 00:22:03,590 --> 00:22:06,520 243 line, int, c aldarrikatzen dugu. 366 00:22:06,520 --> 00:22:08,800 Hau da ergelak xehetasun sort. 367 00:22:08,800 --> 00:22:15,820 Karaktereen A 8 bit da, eta 8 bit zenbat balio ezberdinak gordetzeko? >> [Ikasleak] 256. >> 256. 368 00:22:15,820 --> 00:22:20,730 Arazoa da, nahi duzun 256 desberdinak ASCII karaktereak, ez dira izan nahi izanez gero 369 00:22:20,730 --> 00:22:23,340 uste itzuliz gero, eta hau ez da zerbait buruz ikasi. 370 00:22:23,340 --> 00:22:25,710 Baina uste itzuliz gero ASCII taula handi weeks ago izan genuen, 371 00:22:25,710 --> 00:22:30,600 Kasu horretan, 128 edo 256 ASCII karaktereak. 372 00:22:30,600 --> 00:22:32,940 0 s eta 1s sortu eredu guztiak erabili ditugu. 373 00:22:32,940 --> 00:22:36,210 Hori arazo bat da nahi duzun errore bat detektatzeko gai izan nahi izanez gero 374 00:22:36,210 --> 00:22:40,190 ari zaren dagoeneko 256 balioak erabiliz zure karaktere delako, 375 00:22:40,190 --> 00:22:43,050 ez duzu benetan planifikatu aurretik esaten ez duzulako, 376 00:22:43,050 --> 00:22:46,270 hau ez da pertsonaia bat egiaztatzeko, hau da mezu batzuk okerrak. 377 00:22:46,270 --> 00:22:50,270 Beraz, zer du hurrengo balio handiena, antzeko zerbait int bat erabiltzen dute, 378 00:22:50,270 --> 00:22:54,720 bit, 32 crazy zenbaki bat behar duzu, 4 milioi daitezkeen balioak 379 00:22:54,720 --> 00:22:58,860 beraz, besterik gabe, ahal izango duzu, azkenean, funtsean, 257 horiek erabiliz, 380 00:22:58,860 --> 00:23:01,720 1 errore bat gisa esanahi berezia du. 381 00:23:01,720 --> 00:23:03,120 >> Beraz, ikus dezagun nola obra honetan. 382 00:23:03,120 --> 00:23:07,760 246 line, hau da, berriz, loop handia izan dut, hori fgetc deituz, 383 00:23:07,760 --> 00:23:11,090 f esanahia, eta, beraz, getc, eta, ondoren, stdin. 384 00:23:11,090 --> 00:23:15,520 Bihurtzen da, hau da, teklatuaren sarrera irakurri esaten modu zehatzago. 385 00:23:15,520 --> 00:23:19,300 Standard sarrerako bide teklatua, irteera estandarrean esan nahi du pantaila, 386 00:23:19,300 --> 00:23:23,310 eta errorea, pset4 ikusi dugu, pantaila esan nahi du 387 00:23:23,310 --> 00:23:27,490 baina pantailaren zati berezi bat da, beraz, eta ez da irteera benetako conflated 388 00:23:27,490 --> 00:23:30,750 inprimatzeko asmoa duzula. Baina hori etorkizunean. 389 00:23:30,750 --> 00:23:34,440 Beraz fgetc besterik ez teklatua pertsonaia bat irakurri eta gorde non esan nahi du? 390 00:23:34,440 --> 00:23:37,350 Biltegiratu c. 391 00:23:37,350 --> 00:23:41,360 Eta, ondoren, egiaztatu - Boolean juntagailuak batzuk erabiliz besterik ez dut hemen 392 00:23:41,360 --> 00:23:46,000 egiaztatu du ez dela berdina \ n, eta, beraz, erabiltzaileak sakatu Sartu, puntu horretan gelditu nahi dugu, 393 00:23:46,000 --> 00:23:49,850 Begizta amaituko da, eta konstante berezia EOF begiratu ere nahi dugu, 394 00:23:49,850 --> 00:23:53,610 badakizu edo asmatzen, zer ez stand da? >> [Ikasleak] fitxategi amaiera. >> Fitxategi amaiera. 395 00:23:53,610 --> 00:23:56,560 Hau da, mota zentzugabeko naiz badut teklatua idazten duelako, 396 00:23:56,560 --> 00:23:58,870 dago, honetan parte hartzen duten fitxategi hori ez da benetan, 397 00:23:58,870 --> 00:24:01,150 baina hori bakarrik erabiltzen du esan nahi epe generikoa ordenatzeko 398 00:24:01,150 --> 00:24:04,220 ezer ez bestela giza behatzak etorritakoak. 399 00:24:04,220 --> 00:24:06,460 EOF - fitxategi amaieran. 400 00:24:06,460 --> 00:24:09,920 Bat alde batera utzita, hit duzun inoiz bada Control D zure teklatuan, ez dute oraindik nahi duzun 401 00:24:09,920 --> 00:24:15,230 hit duzun Control C - D Control bidaltzen izeneko EOF konstante berezia. 402 00:24:15,230 --> 00:24:19,850 Beraz, gaur egun besterik ez dugu batzuk memoria esleipena dinamiko. 403 00:24:19,850 --> 00:24:23,440 >> Beraz, (n + 1> edukiera). Orain n azaldu dut. 404 00:24:23,440 --> 00:24:26,100 N besterik ez da, zenbat byte dira Bufferreko uneko 405 00:24:26,100 --> 00:24:28,620 kate ari zaren gaur egun eraikitzeko erabiltzaileak. 406 00:24:28,620 --> 00:24:33,450 Duzu zure buffer pertsonaiak bada baino bufferraren edukiera, 407 00:24:33,450 --> 00:24:37,410 intuitiboki zer ondoren egin behar dugu esleitu edukiera gehiago. 408 00:24:37,410 --> 00:24:43,330 Beraz, baino gehiago gaingabetuak aritmetika hemen batzuk eta funtzio honetan bakarrik zentratu hemen noa. 409 00:24:43,330 --> 00:24:46,070 Badakizu zer malloc da, edo, gutxienez, oro har, ezagunak dira. 410 00:24:46,070 --> 00:24:48,970 Hartu idazketa ez asmatzeko. >> [Ikasleak] gehitzen memoria. 411 00:24:48,970 --> 00:24:52,920 Ez da nahiko memoria gehituz. Memoria honela reallocates da. 412 00:24:52,920 --> 00:24:57,220 Katearen amaieran gela dizu memoria hori baino gehiago da oraindik bada 413 00:24:57,220 --> 00:25:00,000 jatorriz ematen du, baino gero, memoria hori gehiago lortuko duzu. 414 00:25:00,000 --> 00:25:03,460 Beraz, mantendu dezakezu katea karaktere jarriz back Itzuli atzera. 415 00:25:03,460 --> 00:25:05,830 Baina hori ez bada kasua itxaron duzu luzeegia delako 416 00:25:05,830 --> 00:25:07,940 eta ausazko zerbait got memoria plopped dago 417 00:25:07,940 --> 00:25:10,290 baina ez dago aparteko memoria hemen behera, ados. 418 00:25:10,290 --> 00:25:13,100 Idazketa heavy jasotzaileen guztiak egiteko, 419 00:25:13,100 --> 00:25:16,750 mugitu katea irakurri duzula, beraz, urrun hemendik, jarri hor behera, 420 00:25:16,750 --> 00:25:19,460 eta, ondoren, emango dizu gehiago puntu horretan pista. 421 00:25:19,460 --> 00:25:22,550 >> Beraz, eskua olatu bat, utzi zer GetString egiten ari da esaten me 422 00:25:22,550 --> 00:25:26,330 buffer txiki bat, agian bakarra karaktere hasita, 423 00:25:26,330 --> 00:25:30,820 eta, erabiltzaileari bi pertsonaia motak, GetString idazketa deituz sortu da, eta dio 424 00:25:30,820 --> 00:25:33,150 karaktere bat ez zen nahikoa izan, eman dit bi pertsonaia. 425 00:25:33,150 --> 00:25:35,950 Ondoren, irakurri Begizta logika bidez, esan nahi da 426 00:25:35,950 --> 00:25:39,600 Erabiltzaile 3 karaktere idatzitako; eman me now ez 2 baina 4 karaktere, 427 00:25:39,600 --> 00:25:42,320 gero, emadazu 8, ondoren, emadazu, 16 eta 32. 428 00:25:42,320 --> 00:25:45,000 Izan ere, naiz dela I aldi bakoitzean edukiera bikoiztu 429 00:25:45,000 --> 00:25:48,570 Horregatik, buffer hori ez da, poliki-poliki hazten joan, super azkar hazten joan da. 430 00:25:48,570 --> 00:25:51,380 Eta zer da hori abantaila izan daiteke? 431 00:25:51,380 --> 00:25:54,600 Zergatik I am bufferraren tamaina bikoiztu 432 00:25:54,600 --> 00:25:58,020 nahiz eta erabiltzaileari agian nahikoa teklatua pertsonaia bat extra? 433 00:25:58,020 --> 00:26:01,750 [Inaudible ikaslearen erantzuna] >> Zer da hori? >> [Ikasleak] ez daukazu hazten bezala maiz. 434 00:26:01,750 --> 00:26:03,300 Hain zuzen ere. Ez daukazu hazten bezala maiz. 435 00:26:03,300 --> 00:26:05,510 Eta hori besterik ez duzu mota ari da zure apustuak estaldura-hemen, 436 00:26:05,510 --> 00:26:10,850 nahi ez dituzun idazketa asko deitu ohi motela izan delako ideia izanik. 437 00:26:10,850 --> 00:26:12,910 Edonoiz memoria sistema eragilearen eskatzen, 438 00:26:12,910 --> 00:26:16,990 duzu etorkizuneko arazo multzo bat ikusi bezain laster, denbora pixka bat hartu ohi da. 439 00:26:16,990 --> 00:26:20,010 Beraz, denbora-kopurua murriztuz, nahiz eta espazioa alferrik galtzen ari zaren, 440 00:26:20,010 --> 00:26:21,900 gauza ona izan ohi da. 441 00:26:21,900 --> 00:26:24,060 >> Baina hemen GetString azken zatia bidez irakurriz gero, 442 00:26:24,060 --> 00:26:27,950 eta, berriro ere, lerro bakoitzean bakarra ulertzeko hemen ez da hain garrantzitsua gaur - 443 00:26:27,950 --> 00:26:30,530 nabarituko, azkenean deiak malloc berriro 444 00:26:30,530 --> 00:26:33,880 eta, zehazki, esleitzen bytes adina katea behar bezala 445 00:26:33,880 --> 00:26:38,060 eta, ondoren, botatzen away free gehiegi handi buffer deitzen 446 00:26:38,060 --> 00:26:40,080 hain zuzen ere, got bada bikoiztu gehiegi aldiz. 447 00:26:40,080 --> 00:26:42,730 Beraz, azken finean, hori nola GetString izan da denbora honetan guztian lanean. 448 00:26:42,730 --> 00:26:47,060 Guztiak du karaktere bat irakurri aldi berean, behin eta berriro, eta berriro, 449 00:26:47,060 --> 00:26:50,750 eta bere esku dagoen guztia egiten du bere memoria pixka bat gehiago behar da, sistema eragilearen eskatu 450 00:26:50,750 --> 00:26:53,670 idazketa telefonora deituz. 451 00:26:53,670 --> 00:26:57,890 >> Edozein galdera? Guztiak eskubidea. 452 00:26:57,890 --> 00:26:59,270 >> Erasoa. 453 00:26:59,270 --> 00:27:04,060 Orain erakusleak ulertzen dugu, edo, gutxienez, gero eta gehiago dira erakusleak ezagutzen, 454 00:27:04,060 --> 00:27:06,700 kontuan hartu dezagun nola hasten da mundu osoan eta tolesteko 455 00:27:06,700 --> 00:27:10,030 nahiko ez baduzu erabiltzaile adversarial aurka defendatzeko, 456 00:27:10,030 --> 00:27:11,850 jendea zure sistema sartu hack saiatzen ari da, 457 00:27:11,850 --> 00:27:16,890 duten pertsonen erregistroa kodea batzuk circumventing zure software lapurtzen saiatzen ari dira 458 00:27:16,890 --> 00:27:19,090 bestela izan liteke dutela sartu idatzi 459 00:27:19,090 --> 00:27:22,990 >> Adibide honetan begirada bat hartu hemen, eta besterik ez C kodea duten funtzio nagusi bat, behealdean 460 00:27:22,990 --> 00:27:26,380 funtzioa foo deitzen duen. Eta zer ari da pasatzen foo? 461 00:27:26,380 --> 00:27:29,680 [Ikasleen] argumentu soil bat. >> [Malan] argumentu soil bat. 462 00:27:29,680 --> 00:27:33,450 Beraz, argv [1], erabiltzaileak komando-lerroan idatzitako lehen hitza esan nahi du 463 00:27:33,450 --> 00:27:36,360 a.out edo dena delakoa ondoren programa deitzen da. 464 00:27:36,360 --> 00:27:41,680 Goialdean foo char * batean hartzen du, beraz. Baina char * besterik ez da zer? >> [Ikasleak] katea. 465 00:27:41,680 --> 00:27:43,350 [Malan] kate bat, eta, beraz, ez dago hemen, beraz, ez da ezer berria. 466 00:27:43,350 --> 00:27:45,420 Katea arbitrarioki izeneko bar. 467 00:27:45,420 --> 00:27:51,430 Lerro hau hemen, char c [12]; erdi-tekniko English sailkatu, zer lerro hau egiten ari da? 468 00:27:51,430 --> 00:27:55,220 [Ikasleak] array bat - >> Array-? >> [Ikasleak] karaktereak. >> Karaktereak. 469 00:27:55,220 --> 00:27:58,870 Give me 12 karaktere array bat. Beraz, dei hau buffer bat izatea. 470 00:27:58,870 --> 00:28:02,920 Teknikoki izeneko c, baina programazioan buffer bat besterik ez espazioaren sorta bat esan nahi du 471 00:28:02,920 --> 00:28:04,800 stuff batzuk sartu jarri ahal izango duzula 472 00:28:04,800 --> 00:28:07,940 Gero, azkenik, memcpy ez dugu erabili baino lehen, baina seguruenik dezakezu asmatzeko zer egiten. 473 00:28:07,940 --> 00:28:10,480 Memorian kopiatzen da. Zer egiten du? 474 00:28:10,480 --> 00:28:19,270 Kopiatzen itxuraz, taberna, bere sarrera, c sartu, baina bakarrik bar luzera. 475 00:28:19,270 --> 00:28:24,930 Baina bug bat dago hemen. >> [Ikasleen], sizeof pertsonaia behar duzu. >> Ados. 476 00:28:24,930 --> 00:28:30,860 Teknikoki, benetan behar dugu strlen (bar) * sizeof (char)). Hori da zuzena. 477 00:28:30,860 --> 00:28:33,930 Baina kasu txarrenean hemen, dezagun arduratuko that's hori - 478 00:28:33,930 --> 00:28:35,950 Ongi da. Ondoren, bi bugs. 479 00:28:35,950 --> 00:28:39,160 Beraz, sizeof (char)); 480 00:28:39,160 --> 00:28:41,290 Dezagun hau pixka bat zabalagoa. 481 00:28:41,290 --> 00:28:44,910 Beraz, gaur egun oraindik bug bat, hau da, zer? >> [Inaudible ikaslearen erantzuna] 482 00:28:44,910 --> 00:28:46,990 Zer dagoen begiratu? >> [Ikasleak] NULL begiratu. 483 00:28:46,990 --> 00:28:50,270 NULL for behar dugu, oro har, gauza txarrak direlako gertatuko egiaztapena 484 00:28:50,270 --> 00:28:53,200 zure erakuslea NULL hasi behar duzu amaitzeko leza Hara joan 485 00:28:53,200 --> 00:28:57,630 eta ez behar duzu inoiz star operadorea dereferencing NULL joan. 486 00:28:57,630 --> 00:29:01,050 Beraz, ona da. Eta zer gehiago ari gara egiten? Logikoa denez, akats bat da hemen ere. 487 00:29:01,050 --> 00:29:04,450 [Ikasleak] Begiratu argc da> = 2 bada. 488 00:29:04,450 --> 00:29:10,550 Beraz, egiaztatu da argc> = 2 bada. Ongi da, eta, beraz, ez da programa honetan hiru bugs hemen, beraz. 489 00:29:10,550 --> 00:29:16,630 Orain ari gara erabiltzaileak benetan argv sartu ezer idatzi egiaztapena [1]. Good. 490 00:29:16,630 --> 00:29:20,950 Beraz, zer da hirugarren bug? Bai. >> [Ikasleak] C big nahikoa ez izatea. 491 00:29:20,950 --> 00:29:23,320 Good. Eszenatoki bat checked dugu. 492 00:29:23,320 --> 00:29:29,520 Inplizituki egiaztaturik ez kopiatu memoria gehiago bar luzera baino gaindituko luke. 493 00:29:29,520 --> 00:29:32,510 Beraz, katea idatzi erabiltzaile 10 karaktere luzea, 494 00:29:32,510 --> 00:29:36,020 hau da, soilik 10 karaktere esaten kopiatu. Eta hori da ados. 495 00:29:36,020 --> 00:29:39,940 Baina zer gertatzen da, erabiltzaileak 20-pertsonaia hitz bat bezala gonbitan hitz batean idatzitako bada? 496 00:29:39,940 --> 00:29:44,900 Honek kopia 20 karaktere esaten bar zer sartu? 497 00:29:44,900 --> 00:29:49,750 C, bestela gure buffer bezala ezagutzen da, horrek esan nahi du, idatzi besterik ez duzu datuak 498 00:29:49,750 --> 00:29:52,540 8 byte kokapenak zuk ez propioa, 499 00:29:52,540 --> 00:29:54,870 eta ez duzu jabea zentzua inoiz ez esleituko horiek. 500 00:29:54,870 --> 00:30:00,370 Beraz, hau da, oro har, buffer-gainezkatzea erasoa edo buffer inbaditu erasoa ezagutzen. 501 00:30:00,370 --> 00:30:05,580 Eta zentzu eraso bat bada erabiltzaile edo programa zure funtzioa deituz 502 00:30:05,580 --> 00:30:10,490 hau egiten maliciously, zer benetan gertatzen da hurrengo izan egia esan, nahiko txarra izango. 503 00:30:10,490 --> 00:30:12,450 >> Beraz, dezagun begirada bat argazki hau hemen. 504 00:30:12,450 --> 00:30:16,060 Argazki hau zure memoria pila adierazten du. 505 00:30:16,060 --> 00:30:19,580 Gogoratu denbora bakoitzak funtzio bat deitu pilaketan markoa txiki hau lortuko duzu 506 00:30:19,580 --> 00:30:21,520 eta, ondoren, beste bat eta, ondoren, beste bat eta beste bat. 507 00:30:21,520 --> 00:30:24,300 Eta, horrela, arte, mota dugu abstracted horiek laukizuzenak gisa 508 00:30:24,300 --> 00:30:26,290 bai taula gainean edo pantaila hemen. 509 00:30:26,290 --> 00:30:30,580 Baina dugu laukizuzenak horietako bat, funtzio foo deitu mapan handiago bada, 510 00:30:30,580 --> 00:30:35,880 bihurtzen da, ez dagoela gehiago marko horren barruan pila laukizuzenaren 511 00:30:35,880 --> 00:30:40,060 besterik ez x eta y eta a eta b, ez zuen bezala swap buruz hitz egitea baino. 512 00:30:40,060 --> 00:30:44,410 Bihurtzen da, behe-mailako xehetasun batzuk, besteak beste, Return Address. 513 00:30:44,410 --> 00:30:49,550 Beraz, izarrekin bihurtzen da foo nagusia deiak, nagusiak jakinarazi du foo 514 00:30:49,550 --> 00:30:53,520 nagusia helbidea ordenagailuaren memorian zer da 515 00:30:53,520 --> 00:30:57,770 bestela delako, ahalik eta azkarren foo exekutatzean, hemen kasu honetan bezala egiten da, 516 00:30:57,770 --> 00:31:00,830 behin kizkur giltza itxi iristen foo amaieran, 517 00:31:00,830 --> 00:31:05,310 nola demontre foo ez daki non programaren kontrola suposatzen da joan? 518 00:31:05,310 --> 00:31:08,970 Bihurtzen da galdera horri erantzuna laukizuzen gorria hemen da. 519 00:31:08,970 --> 00:31:12,670 Erakuslea bat adierazten du, eta sortu da ordenagailuaren aldi baterako gordetzeko 520 00:31:12,670 --> 00:31:17,030 deiturikoak pila nagusiaren helbidea, beraz, ahalik eta azkarren foo gisa exekutatzean egin da, 521 00:31:17,030 --> 00:31:21,120 ordenagailua daki non eta zer ildo nagusia itzuli. 522 00:31:21,120 --> 00:31:23,940 Gordetako Frame erakuslea erlazionatzen antzera. 523 00:31:23,940 --> 00:31:26,310 Char * bar hemen adierazten du zer? 524 00:31:26,310 --> 00:31:31,350 Orain blue segmentu hau hemen foo en markoa da. Zer da bar? 525 00:31:31,570 --> 00:31:35,010 Bar foo funtzioa besterik ez da argumentua. 526 00:31:35,010 --> 00:31:37,500 Beraz, gaur egun ezagutzen argazkia sort gara berriro at. 527 00:31:37,500 --> 00:31:39,850 Gehiago stuff eta oharkabetasunak gehiago pantailan, 528 00:31:39,850 --> 00:31:43,380 baina hori argi urdina segmentu besterik ez da zer egin dugu Edukien gainean marrazten 529 00:31:43,380 --> 00:31:45,790 swap antzeko zerbait. Hori foo markoa da. 530 00:31:45,790 --> 00:31:51,490 Eta gauza bakarra oraintxe bar da, eta hori da parametro hau. 531 00:31:51,490 --> 00:31:55,220 Baina zer gehiago behar pila kodea hau hemen arabera? 532 00:31:55,220 --> 00:31:57,760 [Ikasleen] char c [12]. >> [Malan] char c [12]. 533 00:31:57,760 --> 00:32:02,810 Ere ikusi behar dugu memoria 12 c izeneko aldagai bat esleitu plazetan, 534 00:32:02,810 --> 00:32:04,970 eta, hain zuzen ere, hori izan ez dugu pantailan. 535 00:32:04,970 --> 00:32:08,480 Oso goian dago c [0], eta, ondoren, diagrama honen egileak 536 00:32:08,480 --> 00:32:11,850 ez da traba laukiak marrazten, baina ez dira, hain zuzen ere, 12 bertan 537 00:32:11,850 --> 00:32:16,590 beheko eskuineko begiratzen baduzu, c [11], 0-tik zenbatzen badituzu, hala nola byte 12an. 538 00:32:16,590 --> 00:32:18,400 Baina hemen arazoa. 539 00:32:18,400 --> 00:32:22,390 Zein norabide c gero eta handiagoa da? 540 00:32:22,390 --> 00:32:27,080 Ordena top down goialdean hasten bada, eta bertan beheko aldean hazten. 541 00:32:27,080 --> 00:32:30,110 Ez du itxura utzi dugu geure burua bezala pista guztietan. 542 00:32:30,110 --> 00:32:32,090 Mota margotu dugu geure burua, izkinan, 543 00:32:32,090 --> 00:32:36,940 eta c [11] bar, hau da, eskuineko Frame Gordetako erakuslea aurka aurka 544 00:32:36,940 --> 00:32:39,960 hau da, Return Helbidea aurka. Gela gehiago ez. 545 00:32:39,960 --> 00:32:42,810 Beraz, zer inplikazio gero hondatzeko baduzu 546 00:32:42,810 --> 00:32:46,500 eta 20 byte 12 byte buffer batean irakurtzen saiatu behar baduzu? 547 00:32:46,500 --> 00:32:50,060 Non dira osagarriak 8 byte joango gara? >> [Ikasleak] Inside - 548 00:32:50,060 --> 00:32:53,200 Beste guztia barruan, eta horietatik batzuk super garrantzitsua da. 549 00:32:53,200 --> 00:32:57,260 Eta garrantzitsuena, potentzialki, koadro gorri dago, Return Address 550 00:32:57,260 --> 00:33:03,560 suposatzen delako bai ustekabean edo 4 byte horiek gainidatzi adversarially 551 00:33:03,560 --> 00:33:07,260 helbide horretan erakuslea, eta ez bakarrik zabor baina zenbaki batekin 552 00:33:07,260 --> 00:33:09,810 gertatzen den benetako memoria-helbide bat irudikatzeko. 553 00:33:09,810 --> 00:33:13,880 Zer inplikazioa da, noski? >> [Ikasleen] Funtzioa beste leku bat itzultzeko. 554 00:33:13,880 --> 00:33:15,250 Hain zuzen ere. 555 00:33:15,250 --> 00:33:19,170 Foo itzulerak eta hits kizkur giltza dela, programa jarraitu 556 00:33:19,170 --> 00:33:25,060 ez nagusira itzultzeko, edozein dela ere helbidea koadro gorri horretan itzuli egingo da. 557 00:33:25,060 --> 00:33:28,600 >> Software circumventing erregistroa kasuan, 558 00:33:28,600 --> 00:33:32,260 zer ari den itzuli helbidea normalean lortzen duen funtzioa deitzen da 559 00:33:32,260 --> 00:33:35,690 duzun softwarea ondoren ordaindu eta zure izen-emate-kodea sartu? 560 00:33:35,690 --> 00:33:39,870 Trikimailu ordenagailua ordenatzeko dezakezu hemen ez joan sartu, baizik eta hemen. 561 00:33:39,870 --> 00:33:45,100 Edo Oraindik benetan clever, aurkariarekiko bat benetan idatzi teklatua, esate baterako, 562 00:33:45,100 --> 00:33:50,690 ez da benetako hitza, 20 karaktere ez, baina suposatu zuen edo zuen benetan mota 563 00:33:50,690 --> 00:33:52,770 ordezkatzen dituzten zenbait karaktere kodea. 564 00:33:52,770 --> 00:33:55,320 Eta ez da C kode bat izan behar da, benetan pertsonaiak izango 565 00:33:55,320 --> 00:33:59,290 ordezkatzen dituzten bitar makina-kodea, 0 s eta 1s. 566 00:33:59,290 --> 00:34:01,290 Baina demagun clever nahikoa horretarako ari dira, 567 00:34:01,290 --> 00:34:06,500 nolabait gonbita GetString zerbait da, funtsean, konpilatu kodea itsatsi, 568 00:34:06,500 --> 00:34:09,980 eta azken 4 bytes gainidatzi bueltan helbide hori. 569 00:34:09,980 --> 00:34:13,360 Eta zer helbidea sarrera hori ez do? 570 00:34:13,360 --> 00:34:18,630 Laukizuzen gorria bufferraren lehenengo byte helbidea gordetzen da benetan. 571 00:34:18,630 --> 00:34:23,070 Beraz, benetan clever izan behar duzu, eta pertsona txarra trial eta akats asko dago out, 572 00:34:23,070 --> 00:34:25,639 baina irudikatu bada nola big buffer 573 00:34:25,639 --> 00:34:28,820 hala nola, sarrerako byte azken ematen duten programa 574 00:34:28,820 --> 00:34:33,540 gertatuko zure buffer Irteeran helbidea baliokidea izan behar du, hau egin ahal izango duzu. 575 00:34:33,540 --> 00:34:39,320 Esaten dugu normalean kaixo eta \ 0 bada, zer da bufferraren. 576 00:34:39,320 --> 00:34:44,420 Baina gara clever bada eta buffer hori bete dugu zer oro deitu dugu erasoa kodea 577 00:34:44,420 --> 00:34:48,860 AAA, eraso, eraso, eraso, hau da, zerbait zerbait txarra du, 578 00:34:48,860 --> 00:34:51,820 zer gertatzen ari zaren benetan clever bada, hau egin dezakezu. 579 00:34:51,820 --> 00:34:58,610 80, C0, 35, 08 - Hemen gorria kutxa zenbaki-sekuentzia da. 580 00:34:58,610 --> 00:35:01,610 Iragarki hori, eta zenbaki hori da hemen datorrenean. 581 00:35:01,610 --> 00:35:04,430 Alderantzizko ordenan, baina batzuk denbora beste gehiago. 582 00:35:04,430 --> 00:35:08,140 Oharra bueltan helbide hau que ha sido nahita aldatu 583 00:35:08,140 --> 00:35:12,020 helbide bera hemen, ez nagusiaren helbidea. 584 00:35:12,020 --> 00:35:17,500 Beraz, bada, txarra lasaia da super smart, zuen artean, erasoa kodea duten 585 00:35:17,500 --> 00:35:20,930 zerbait erabiltzailearen fitxategi guztiak ezabatu edo kopiatu pasahitzak 586 00:35:20,930 --> 00:35:24,680 edo erabiltzaile-kontu bat sortu ahal izango dut, gero, saioa hasi ezer guztiak. 587 00:35:24,680 --> 00:35:26,950 >> Eta hori bai arriskua eta C. boterea 588 00:35:26,950 --> 00:35:29,840 Memoria sarrera delako erakusleak bidez 589 00:35:29,840 --> 00:35:32,520 eta, beraz, ahal izango duzu ezer idatzi nahi duzun ordenagailu bat memoria, 590 00:35:32,520 --> 00:35:35,080 ordenagailu bat ezer egin nahi duzun egin dezakezu 591 00:35:35,080 --> 00:35:39,550 besterik gabe by ondoren inguruan salto egin du bere memoria espazio propioa barruan. 592 00:35:39,550 --> 00:35:44,650 Eta, beraz, egun honetan, programa hainbeste eta hainbeste webgune diren arriskutsua 593 00:35:44,650 --> 00:35:46,200 irakiten behera pertsonek hau aprobetxatuz. 594 00:35:46,200 --> 00:35:50,760 Eta hori super erasoa sofistikatu bat bezala dirudi, baina ez da beti bide horretatik hasteko. 595 00:35:50,760 --> 00:35:53,560 Errealitatea da, zer txarra pertsona normalean ez dela, 596 00:35:53,560 --> 00:35:58,200 ote den, komando-lerro bat programa edo GUI programa bat edo web orri bat, 597 00:35:58,200 --> 00:35:59,940 hasteko besterik ez duzu zentzugabekeria eskainiz. 598 00:35:59,940 --> 00:36:03,980 Idatzi bilaketa eremuan eta sakatu Sartu sartu hitz bat benetan handia duzu, 599 00:36:03,980 --> 00:36:05,780 eta web kraskatzen bada ikusteko itxaron behar duzun 600 00:36:05,780 --> 00:36:09,990 edo programa errore-mezu batzuk manifestuak ikusteko itxaron behar duzun 601 00:36:09,990 --> 00:36:14,330 txarra lasaia zortea izanez gero, eta crazy sarrera batzuk eman duzulako 602 00:36:14,330 --> 00:36:18,980 programa da, eta horrek esan nahi du, programatzailea ez aurrea zure portaera txarra kraskatzen, 603 00:36:18,980 --> 00:36:23,630 horrek esan nahi du, ziur aski duzu, ahalegin nahikoa, nahikoa trial eta akats 604 00:36:23,630 --> 00:36:26,650 daki nola erasoa zehatzagoa Soldata. 605 00:36:26,650 --> 00:36:31,410 Beraz, askoz ere segurtasun zati bat ez da bakarrik eraso horiek saihesteko guztiz 606 00:36:31,410 --> 00:36:34,100 baizik eta haiek detektatzeko eta benetan erregistroak begira 607 00:36:34,100 --> 00:36:36,780 eta zer input crazy zure webgunean idatzitako pertsonak ikusten dute, 608 00:36:36,780 --> 00:36:38,960 zein bilaketa-terminoak zure web tekleatutako 609 00:36:38,960 --> 00:36:42,870 buffer batzuk gainezka itxaropenak. 610 00:36:42,870 --> 00:36:45,500 Eta hau guztiak irakiten behera zer oinarriak sinpleak array bat da 611 00:36:45,500 --> 00:36:49,080 eta zer ez memoria esleitu eta erabili esan nahi du. 612 00:36:49,080 --> 00:36:51,710 >> Orduan ere da hau. 613 00:36:51,710 --> 00:36:54,280 Dezagun, besterik gabe begirada disko gogor baten barruan berriro ere. 614 00:36:54,280 --> 00:36:58,440 Aste bat edo bi ago from gogoratzen duzu fitxategiak arrastatu recycle bin edo trash, 615 00:36:58,440 --> 00:37:03,710 zer gertatzen da? >> [Ikasleak] Ezer ez. >> Absolutely ezer, ezta? 616 00:37:03,710 --> 00:37:05,740 Azkenean, diskoan leku exekutatzen duzun, baxua 617 00:37:05,740 --> 00:37:08,190 Windows edo Mac OS zuretzat fitxategiak ezabatuz hasiko da. 618 00:37:08,190 --> 00:37:10,390 Baina arrastatu duzun zerbait badago, hori ez da segurua guztietan. 619 00:37:10,390 --> 00:37:13,800 Guztiak zure gelakide edo lagun edo familiako kide egin klik bikoitza egin eta, voila, 620 00:37:13,800 --> 00:37:16,310 ez da sketchy fitxategi guztiak ezabatu saiatu duzula. 621 00:37:16,310 --> 00:37:19,590 Gurekin gehienak, gutxienez, jakin behar duzu eskuineko botoia edo egin klik kontrola 622 00:37:19,590 --> 00:37:22,310 eta hutsik zakarrontzi edo horrelako zerbait. 623 00:37:22,310 --> 00:37:25,000 Baina orduan ere ez da nahiko egin trikimailu 624 00:37:25,000 --> 00:37:28,010 zer gertatzen den fitxategia zure disko gogorrean duzulako 625 00:37:28,010 --> 00:37:32,770 Word dokumentu batzuk edo JPEG batzuk adierazten du, eta hau da zure disko gogorrean adierazten du, 626 00:37:32,770 --> 00:37:35,350 eta demagun hau hemen sliver fitxategi hori adierazten du, 627 00:37:35,350 --> 00:37:38,390 eta 0 s eta 1s osoa sorta bat osatzen dute. 628 00:37:38,390 --> 00:37:42,470 Zer gertatzen da soilik ez, arrastatu fitxategi hori zakarrontzira bota edo bin birziklatu 629 00:37:42,470 --> 00:37:48,020 baina ere hustu? Ezer agintzea. 630 00:37:48,020 --> 00:37:49,640 Ez da deus. 631 00:37:49,640 --> 00:37:54,290 Orain ezer ez da taula hau forma apur zerbait gertatzen delako. 632 00:37:54,290 --> 00:37:58,370 Beraz, ordenagailu bat memoria mota batzuk datu-basea edo taulak barruan 633 00:37:58,370 --> 00:38:03,850 funtsean fitxategiak zutabe bat 'izenak eta fitxategiak zutabe bat' kokapena 634 00:38:03,850 --> 00:38:07,720 non hau kokapena 123, ausazko zenbaki bat izan daiteke. 635 00:38:07,720 --> 00:38:14,560 Kokapena 123 x.jpeg eta antzeko zerbait izan genezake. 636 00:38:14,560 --> 00:38:18,800 Zer gertatzen da orduan, hustu benetan zure trash? 637 00:38:18,800 --> 00:38:20,330 Doan kanpoan. 638 00:38:20,330 --> 00:38:23,610 Baina zer ez irteteko 0 s eta 1s da. 639 00:38:23,610 --> 00:38:26,270 >> Beraz, zer da ondoren pset4 konexio? 640 00:38:26,270 --> 00:38:31,240 Beno, pset4, besterik ez dugu nahi gabe delako ezabatu compact flash txartela 641 00:38:31,240 --> 00:38:35,750 zuela argazki horiek guztiak, edo, besterik gabe, delako zorte txarra izan zen hondatuta 642 00:38:35,750 --> 00:38:38,000 ez du esan nahi 0 s eta 1s ez dira oraindik ez. 643 00:38:38,000 --> 00:38:40,410 Agian horietako batzuk galdu egiten dira zerbait got hondatuta dagoelako 644 00:38:40,410 --> 00:38:43,320 Zentzu 0 s batzuk izan zen eta 1s 1s bihurtu zen 0 s. 645 00:38:43,320 --> 00:38:47,240 Bad gauza,, buggy software edo hardware akastuna delako gerta daiteke. 646 00:38:47,240 --> 00:38:50,370 Baina bit horietako askok, agian, nahiz eta horien% 100 dira, oraindik ere ez dago. 647 00:38:50,370 --> 00:38:55,050 Besterik ez da ordenagailua edo kamera ez daki non JPEG1 hasi 648 00:38:55,050 --> 00:38:56,910 eta non JPEG2 hasi. 649 00:38:56,910 --> 00:39:01,070 Baina baduzu, programatzailea, adituentzat apur, non JPEGs diren jakin 650 00:39:01,070 --> 00:39:06,010 edo zer itxura dute, beraz, 0 s eta 1s eta esan JPEG, JPEG aztertu ahal izango duzu, 651 00:39:06,010 --> 00:39:09,440 programa bat idatzi dezakezu funtsean bat besterik ez edo begizta bitartean 652 00:39:09,440 --> 00:39:12,820 bakoitzak fitxategi horiek berreskuratzen. 653 00:39:12,820 --> 00:39:16,030 Ikasgaia da, beraz, segurtasunez zure fitxategiak ezabatzerakoan hasteko 654 00:39:16,030 --> 00:39:18,340 hau saihesteko guztira nahi izanez gero. Bai. 655 00:39:18,340 --> 00:39:21,010 >> [Ikasleak] Zergatik dio zure ordenagailuan 656 00:39:21,010 --> 00:39:23,550 memoria gehiago baino egin duzula? 657 00:39:23,550 --> 00:39:27,820 Have memoria gehiago baino zenuen - >> [ikasleak] memoria gehiago. 658 00:39:27,820 --> 00:39:29,630 Oh. Ona galdera. 659 00:39:29,630 --> 00:39:32,360 Beraz, zergatik ondoren, trash hustu ondoren, zure ordenagailuan ez esango dizu 660 00:39:32,360 --> 00:39:34,910 duzula leku libre baino zenuen? 661 00:39:34,910 --> 00:39:36,770 Hitz batean, etzanda delako. 662 00:39:36,770 --> 00:39:40,740 Gehiago teknikoki, ez leku gehiago esan duzulako 663 00:39:40,740 --> 00:39:43,680 beste gauza batzuk jarri ahal izango duzu non fitxategi hori behin. 664 00:39:43,680 --> 00:39:45,450 Baina horrek ez du esan nahi bit kanpoan egingo dira, 665 00:39:45,450 --> 00:39:48,590 eta horrek ez du esan nahi bit ari 0 s guztiak aldatu egin dira, esate baterako, 666 00:39:48,590 --> 00:39:50,150 zure babeserako. 667 00:39:50,150 --> 00:39:54,640 Beraz, ordea, duzu segurtasunez ezabatzeko izanez gero fitxategi edo fisikoki suntsitu telefonoa, 668 00:39:54,640 --> 00:39:57,300 benetan batzuetan inguruan modu bakarra da. 669 00:39:57,300 --> 00:40:02,020 >> , Beraz, zergatik ez scary erdi-ohar horretan utzi dugu, eta astelehena, ikusiko dugu. 670 00:40:02,020 --> 00:40:07,000 [Txalo] 671 00:40:07,780 --> 00:40:10,000 >> [CS50.TV]