1 00:00:00,000 --> 00:00:02,730 [Powered by Google Translate] [5 ATALA: GUTXIAGO eroso] 2 00:00:02,730 --> 00:00:05,180 [Nate Hardison, Harvard Unibertsitatea] 3 00:00:05,180 --> 00:00:08,260 [Hau da CS50.] [CS50.TV] 4 00:00:08,260 --> 00:00:11,690 Beraz, ongi etorria back, guys. 5 00:00:11,690 --> 00:00:16,320 Ongi etorri atalean, 5. 6 00:00:16,320 --> 00:00:20,220 Une honetan, ondoren bukatu quiz 0 eta ikusi nola egin duzun balitz, 7 00:00:20,220 --> 00:00:25,770 espero benetan ona sentitzen nintzen Atal honetan puntuazio oso harrituta. 8 00:00:25,770 --> 00:00:28,050 Gure online ikusleek, galdera pare bat izan dugu 9 00:00:28,050 --> 00:00:33,680 arazoa multzoa azken bi arazoei buruz edo galdetegiaren, baizik. 10 00:00:33,680 --> 00:00:39,690 Beraz, horietan zehar, benetan azkar, beraz, denok ikusten zer gertatu zen goaz 11 00:00:39,690 --> 00:00:45,060 eta nola ez bakarrik begiratzen konponbidea bera baino benetako irtenbidea bidez. 12 00:00:45,060 --> 00:00:50,330 Benetan azkar arazoak azken bi baino gehiago joan gara, 32 eta 33. 13 00:00:50,330 --> 00:00:53,240 Just, berriro ere, eta, beraz,, online ikusleek hori ikus daiteke. 14 00:00:53,240 --> 00:00:59,080 >> Zure arazoa 32, 13 gaitzen baduzu, 15 00:00:59,080 --> 00:01:02,730 , Arazoa 32 13 16 guztiak trukeak buruz. 16 00:01:02,730 --> 00:01:05,010 Guztiak izan da bi zenbaki osoko aldaketa. 17 00:01:05,010 --> 00:01:08,740 Arazoa litzaidake dugun hitzaldia aldiz pare bat baino gehiago joan da. 18 00:01:08,740 --> 00:01:13,590 Eta hemen, zer egin behar genuen galdetuz azkar bat memoria arrastorik. 19 00:01:13,590 --> 00:01:17,000 Aldagaien balioak bete pila dira 20 00:01:17,000 --> 00:01:20,250 kodea swap funtzio hau pasatzen. 21 00:01:20,250 --> 00:01:24,500 Hain zuzen ere, zer ari gara bilatzen - I'm iPad hau jarri du 22 00:01:24,500 --> 00:01:29,650 Zehazki, zer da bilatzen ari gara line zenbakitutako 6 eskubidea hemen. 23 00:01:29,650 --> 00:01:36,740 Eta hori zenbakitutako 6 aurreko arazoa contiguity. 24 00:01:36,740 --> 00:01:41,720 Zer egin nahi dugun edo erakutsi etiketatuko da memoria egoera 25 00:01:41,720 --> 00:01:46,090 garai hartan da lerro hau multzoko 6 abiaraziko dugu, 26 00:01:46,090 --> 00:01:52,540 hau da, modu eraginkorrean gure swap funtzioa itzulera eskubidea hemen. 27 00:01:52,540 --> 00:01:59,450 Joan gara behera bada hemen, memorian guztia helbideak Gurekin zela ikusi genuen. 28 00:01:59,450 --> 00:02:02,540 Hau oso funtsezko itzuli dugu une bat besterik ez da. 29 00:02:02,540 --> 00:02:09,240 Eta gero behera hemen behealdean, memoria apur bat diagrama izan genuen ikus ari gara. 30 00:02:09,240 --> 00:02:12,490 Benetan egiten dut nire iPad. 31 00:02:12,490 --> 00:02:20,720 Beraz, atzera eta aurrera Ordezko iPad eta kode hau erreferentzia artean noa. 32 00:02:20,720 --> 00:02:26,540 >> Dezagun hasteko. Lehenik eta behin, utzi lerro nagusiak lehen bikotea ardatz hementxe. 33 00:02:26,540 --> 00:02:30,220 Hasteko, x 1 eta y abiarazi 2 goaz. 34 00:02:30,220 --> 00:02:33,040 Dugu bi zenbaki oso aldagai Beraz, biak ari dira pila jarri behar da. 35 00:02:33,040 --> 00:02:36,050 1 eta 2 jarri gara. 36 00:02:36,050 --> 00:02:43,150 Beraz irauli dut nire iPad bada, espero dezagun ikus - 37 00:02:43,150 --> 00:02:48,660 Apple TV islatzea, eta hor dugu. Ongi da. 38 00:02:48,660 --> 00:02:51,670 Beraz, bada baino gehiago irauli dut nire iPad 39 00:02:51,670 --> 00:02:56,220 X 1 eta y abiarazi nahi dut 2. 40 00:02:56,220 --> 00:03:00,580 Nahiko, besterik gabe, ez dugu bat 1 markatu x koadroan idazten 41 00:03:00,580 --> 00:03:07,730 eta 2 koadroan markatu y. Nahiko erraza da. 42 00:03:07,730 --> 00:03:11,620 Beraz, gaur egun dezagun itzuli eramangarria, ikusi zer gertatzen den hurrengoa. 43 00:03:11,620 --> 00:03:15,810 Beraz, hurrengo lerro hau da, non gauza delikatua. 44 00:03:15,810 --> 00:03:28,110 X helbidea eta y helbidea parametro gisa pasatzen dugu eta b swap funtzioa. 45 00:03:28,110 --> 00:03:32,380 X eta y helbidea helbidea gauza ezin dugu kalkulatu dira 46 00:03:32,380 --> 00:03:36,360 bullet hauek aipatuz gabe puntu eskuineko behera hemen. 47 00:03:36,360 --> 00:03:39,750 Eta zorionez, lehen bi bullet puntu kontatuko digute, zehazki zer erantzun dira. 48 00:03:39,750 --> 00:03:44,740 X helbidea memoria 10 da, eta memoria y helbidea da 14. 49 00:03:44,740 --> 00:03:51,870 Beraz, balioak get pasa bat eta b gure swap funtzioa top. 50 00:03:51,870 --> 00:04:00,760 Beraz, berriro ere, gure diagrama modura itzuliko da, bat 10 idatzi ahal dut 51 00:04:00,760 --> 00:04:07,400 eta b 14. 52 00:04:07,400 --> 00:04:11,610 Orain, puntu honetan da swap, non jarraitu dugu. 53 00:04:11,610 --> 00:04:14,520 Beraz, atzera biratu berriro ere eramangarria 54 00:04:14,520 --> 00:04:21,079 swap funtzionatzen du I lehen dereference gertatzen da, hain zuzen ere, bat eta denda tmp emaitza ikusiko dugu. 55 00:04:21,079 --> 00:04:27,650 Beraz, dereference operadorea dioenez, "Hey Treat aldagai baten edukiak helbide bat. 56 00:04:27,650 --> 00:04:33,830 Hemendik helbidea hartan gordetzen da, eta kargatu. " 57 00:04:33,830 --> 00:04:41,720 Zer kargatu aldagaia gure tmp aldagaia gorde. 58 00:04:41,720 --> 00:04:45,150 Back to iPad iraultzea. 59 00:04:45,150 --> 00:04:51,690 Joaten gara 10 aurre egiteko bada, helbidea 10 x varible da ezagutzen dugun 60 00:04:51,690 --> 00:04:55,480 genuen gure bullet puntu x memoria helbidea dela 10 delako kontatua. 61 00:04:55,480 --> 00:05:00,180 Beraz, Hara joan ahal izango dugu, balioa, hau da, 1, gure iPad ikusten dugun bezala, 62 00:05:00,180 --> 00:05:06,300 eta sartu tmp kargatu. 63 00:05:06,300 --> 00:05:08,250 Berriz ere, hau ez da azken edukia. 64 00:05:08,250 --> 00:05:14,350 Ibili gara eta gure programaren egoera final dugu amaieran. 65 00:05:14,350 --> 00:05:17,210 Baina oraintxe bertan, balioa 1 tmp gordetzen dugu. 66 00:05:17,210 --> 00:05:19,210 >> Eta hemen galdera azkar bat da. 67 00:05:19,210 --> 00:05:23,980 [Alexander] dereference operadorea aldagaia aurrean eskubidea star? 68 00:05:23,980 --> 00:05:27,600 >> Bai. Dereference operadorea Beraz, irauliko dugu berriro gure laptop berriro ere, 69 00:05:27,600 --> 00:05:33,780 eskuinean izar hau. 70 00:05:33,780 --> 00:05:37,460 Ildo horretan, da kontrastatu biderketak 71 00:05:37,460 --> 00:05:42,400 behar duen beste bi gauza; dereference operadorea unario da. 72 00:05:42,400 --> 00:05:46,130 Just balio bat aplikatzen Eragile bitar bat aurrean, 73 00:05:46,130 --> 00:05:48,810 non bi balio ezberdinak aplikatzeko. 74 00:05:48,810 --> 00:05:52,080 Beraz, lerro hau gertatzen. 75 00:05:52,080 --> 00:05:58,390 1 balioa kargatu eta gordetako gure aldi baterako aldagaia batean osokoaren. 76 00:05:58,390 --> 00:06:05,800 Hurrengo lerroan, b edukia gordetzen dugu sartu 77 00:06:05,800 --> 00:06:12,630 edo, hobeto esanda, b hori, non dago seinalatuz seinalatuz edukia gordetzen dugu. 78 00:06:12,630 --> 00:06:17,690 Aztertzen ditugu, eskuinetik ezkerrera bada, dereference b ditugu, 79 00:06:17,690 --> 00:06:23,580 14 dira dugu, osokoa dagoela hartzen dugu, 80 00:06:23,580 --> 00:06:26,900 eta, ondoren, helbidea 10 joan gara, 81 00:06:26,900 --> 00:06:34,240 eta gure b dereference emaitza espazio horretan bota dugu. 82 00:06:34,240 --> 00:06:40,080 Iraultzea gure iPad, non apur bat gehiago hormigoizko ahal izango dugu, 83 00:06:40,080 --> 00:06:44,070 helbideak zenbakiak idazten dut bada hemen izatea. 84 00:06:44,070 --> 00:06:53,820 Beraz, y, helbidea 14 dakigu, x 10. Helbidea da. 85 00:06:53,820 --> 00:07:00,180 B at hasiko dugu, dugu dereference b, 2 balioa hartzen ari dugu. 86 00:07:00,180 --> 00:07:08,320 Balio hau hartzen duen balioa helbidea 14 bizi delako dugu. 87 00:07:08,320 --> 00:07:15,700 Eta helbidea 10 bizi aldagaia jarri dugu, 88 00:07:15,700 --> 00:07:19,160 hau da, bertan, gure variable x dagokion. 89 00:07:19,160 --> 00:07:21,810 Beraz, hemen gainidatziz pixka bat egin ahal izango dugu 90 00:07:21,810 --> 00:07:35,380 non gure 1 kentzeko lortuko dugu, eta horren ordez 2 idatzi dugu. 91 00:07:35,380 --> 00:07:39,560 Beraz, guztiak ondo eta munduko ona, nahiz eta x gainidatzi dugu orain. 92 00:07:39,560 --> 00:07:44,890 Gordetzen ditugu gure tmp aldagaia x balio zaharra. 93 00:07:44,890 --> 00:07:50,210 Beraz, swap bete ahal izango dugu hurrengo lerroan. 94 00:07:50,210 --> 00:07:53,030 Iraultzea gure laptop. 95 00:07:53,030 --> 00:07:58,150 Orain hondar hori guztia edukiak atera gure aldi baterako aldagaia zenbaki oso 96 00:07:58,150 --> 00:08:05,630 eta gordetzeko aldagaia b antolatzen helbidea bizi. 97 00:08:05,630 --> 00:08:10,230 Beraz, modu eraginkorrean dereference b sarbidea ari gara aldagaia joan 98 00:08:10,230 --> 00:08:14,340 b dela antolatzen duen helbidea da, 99 00:08:14,340 --> 00:08:19,190 eta balioa tmp da sartu eusten Stuff goaz. 100 00:08:19,190 --> 00:08:23,280 Atzera iraultzea iPad behin gehiago. 101 00:08:23,280 --> 00:08:31,290 Balio hau ezabatu ahal izango dut hemen, 2, 102 00:08:31,290 --> 00:08:41,010 eta horren ordez, 1 eskubidea kopiatu dugu sartu. 103 00:08:41,010 --> 00:08:43,059 Ondoren, hurrengo lerroan exekutatzen, noski - 104 00:08:43,059 --> 00:08:47,150 irauli dugu itzuliz gero eramangarria puntu 6 hau da, 105 00:08:47,150 --> 00:08:52,500 puntua da gure diagrama erabat bete nahi dugu. 106 00:08:52,500 --> 00:08:58,940 Beraz, atzera biratu iPad behin gehiago, besterik ez, beraz, bukatu diagrama ikusi ahal izango dituzu, 107 00:08:58,940 --> 00:09:06,610 dugula bat 10, 14 b, tmp 1, 2 x, eta y 1 ikusi ahal izango dituzu. 108 00:09:06,610 --> 00:09:11,000 Ba al dago honi buruzko edozein zalantza argitzeko? 109 00:09:11,000 --> 00:09:14,640 Ez du gehiago zentzu honetan, eta horren bidez ibili? 110 00:09:14,640 --> 00:09:24,850 Egin gutxiago zentzua? Zorionez ez. Ongi da. 111 00:09:24,850 --> 00:09:28,230 >> Erakusleak oso gai delikatua bat dira. 112 00:09:28,230 --> 00:09:33,420 Guys batera egiten dugu lan honetan oso ohikoa ditu: 113 00:09:33,420 --> 00:09:36,590 "Erakusleak ulertzeko, lehenik eta behin behar duzu ulertzen dutenentzako." 114 00:09:36,590 --> 00:09:40,530 Zein da oso egia dela uste dut. Pixka bat hartu da erabiliko du. 115 00:09:40,530 --> 00:09:45,360 Argazkien zozketa, memoria hau atsegin diagrama zozketa oso lagungarria dira, 116 00:09:45,360 --> 00:09:49,480 eta adibide baten bitartez oinez ondoren adibidez ondoren Adibidez ondoren, 117 00:09:49,480 --> 00:09:54,450 apur bat gehiago zentzua eta apur bat gehiago zentzua eta apur bat gehiago zentzu egiteko izango da. 118 00:09:54,450 --> 00:10:01,560 Azkenik, egun batean, dena erabat menperatzen duzu. 119 00:10:01,560 --> 00:10:13,800 Edozein galdera aurretik mugitzen dugu hurrengo arazoa? Guztiak eskubidea. 120 00:10:13,800 --> 00:10:18,840 Beraz, irauli back eramangarria. 121 00:10:18,840 --> 00:10:23,300 Dugun hurrengo arazoa arazo kopurua 33 fitxategi I / O. 122 00:10:23,300 --> 00:10:26,350 Hau apur Txikiagotu. 123 00:10:26,350 --> 00:10:28,710 Arazoa 33 - Bai? 124 00:10:28,710 --> 00:10:32,110 >> [Daniel] azkar galdera bat izan dut. Izar hori, edo izartxoa, 125 00:10:32,110 --> 00:10:35,590 deitzen izartxoa erabili aurretik dereferencing. 126 00:10:35,590 --> 00:10:38,820 Zer da ampersand erabili aurretik deitu? 127 00:10:38,820 --> 00:10:43,140 >> Ampersand aurretik helbide-operadorea da. 128 00:10:43,140 --> 00:10:45,880 Hargatik joan kopiak. 129 00:10:45,880 --> 00:10:49,310 Oops. Zoom moduan, beraz, ezin dut benetan gurpila nago. 130 00:10:49,310 --> 00:10:52,780 Kode hau begiratzen badiogu, benetan azkar hementxe, 131 00:10:52,780 --> 00:10:54,980 berriro ere, gauza bera gertatzen ari da. 132 00:10:54,980 --> 00:10:59,180 Kode hau begiratzen badiogu, hemen, lerro hau non deia trukatu egiten dugu, 133 00:10:59,180 --> 00:11:10,460 ampersand besterik ez da esaten "helbidea zein aldakorreko x bizitza." 134 00:11:10,460 --> 00:11:14,460 Zure kodea zure konpilatzailea biltzen, 135 00:11:14,460 --> 00:11:20,590 benetan fisikoki zure aldagai bizi guztien memoria leku bat markatu du. 136 00:11:20,590 --> 00:11:24,910 Eta beraz, zer Konpilatzailearen ondoren egin du guztia konpilatu behin, 137 00:11:24,910 --> 00:11:31,110 , badaki "Oh, x jarri dut helbidea 10 y jarri dut helbidea 14." 138 00:11:31,110 --> 00:11:34,640 Zuretzat balio horiek bete ahal izango da, orduan. 139 00:11:34,640 --> 00:11:44,740 Orduan dezakezu - izan daiteke, ondoren, gainditu, eta baita pass eta y. 140 00:11:44,740 --> 00:11:50,730 Guys hauek lortu helbidea, baina, gainera, duzunean horiek pasatzen swap funtzioa sartu 141 00:11:50,730 --> 00:11:55,690 informazio mota, int * hemen, konpiladore kontatzen du, 142 00:11:55,690 --> 00:12:01,350 "Ados, interpretatzeko helbide hau osoko aldagai helbide bat dugu." 143 00:12:01,350 --> 00:12:05,900 Int baten helbide bat bezala, hau da, karaktere aldagai baten helbidea 144 00:12:05,900 --> 00:12:09,930 int bat hartzen duelako, 32-bit makina bat hartzen du, 4 byte espazioa, 145 00:12:09,930 --> 00:12:13,310 pertsonaia bat bakarrik hartzen du, berriz, byte 1 espazioa. 146 00:12:13,310 --> 00:12:17,310 Beraz, garrantzitsua da ere jakin zer da zer bizi, zer balio mota 147 00:12:17,310 --> 00:12:20,340 gainditu sartu got helbidea bizi 148 00:12:20,340 --> 00:12:22,020 Edo helbidea aurre ari zaren. 149 00:12:22,020 --> 00:12:29,020 Horrela, zenbat byte informazio benetan kargatu zure RAM badakizu. 150 00:12:29,020 --> 00:12:31,780 Eta gero, bai, hau dereference operadorea, zu bezalako eskatuz, 151 00:12:31,780 --> 00:12:37,200 doa, eta informazio jakin baten helbidea sartzen. 152 00:12:37,200 --> 00:12:42,820 Beraz, dio aldakorreko hemen, tratatzeko edukiak helbide gisa, 153 00:12:42,820 --> 00:12:47,880 helbide horretara joan, eta tira, prozesagailua, karga sartu erregistro bat kargatu 154 00:12:47,880 --> 00:12:56,340 benetako balioak edo helbide hartan bizi diren edukiak. 155 00:12:56,340 --> 00:12:59,620 Edozein galdera bat baino gehiago? Hauek onak galderak dira. 156 00:12:59,620 --> 00:13:01,650 Terminologia berri asko ere. 157 00:13:01,650 --> 00:13:09,800 Ere funky mota da, eta * ikusteko leku desberdinetan. 158 00:13:09,800 --> 00:13:13,180 >> Guztiak eskubidea. 159 00:13:13,180 --> 00:13:18,530 Beraz, arazoa 33, fitxategian I / O. 160 00:13:18,530 --> 00:13:22,540 Hau uste dut gauza pare bat gertatu da duten arazo bat izan zen. 161 00:13:22,540 --> 00:13:25,400 One, nahiko gai berri bat da. 162 00:13:25,400 --> 00:13:30,590 Pretty laster aurkeztu quiz aurretik, 163 00:13:30,590 --> 00:13:33,400 eta, ondoren, mota math arazoak hitz horietako bat bezalakoa izan dela uste dut 164 00:13:33,400 --> 00:13:39,720 non ematen dute informazio asko, baina benetan ez duzu bukatzen ez tona bat erabili beharrik. 165 00:13:39,720 --> 00:13:44,060 Arazo hau lehen zatia da, zer da CSV fitxategi bat deskribatzeko. 166 00:13:44,060 --> 00:13:50,620 Orain, CSV fitxategi bat, deskribapen arabera, komaz bereizitako balioak fitxategia da. 167 00:13:50,620 --> 00:13:55,300 Arrazoi horiek interesgarri guztiak, eta horregatik erabili al duzu inoiz, 168 00:13:55,300 --> 00:14:00,800 da, izan ere, nola asko inoiz erabili Excel bezalako stuff? 169 00:14:00,800 --> 00:14:03,240 Irudikatu duzun gehienak ez du, ziurrenik, edo zure bizitzan uneren batean erabili. 170 00:14:03,240 --> 00:14:06,430 Excel bezalako zerbait erabiliko duzu. 171 00:14:06,430 --> 00:14:10,940 Datuak lortzeko Excel kalkulu-orri baten edo prozesatzeko inolako 172 00:14:10,940 --> 00:14:17,240 nahi duzun C programa edo Python programa, Java programa idatzi nahi izanez gero, 173 00:14:17,240 --> 00:14:20,070 bertan gordetzen dituzun datuak aurre egiteko, 174 00:14:20,070 --> 00:14:23,170 CSV fitxategi batean ateratzeko modu ohikoena bat da. 175 00:14:23,170 --> 00:14:26,850 Eta ireki dezakezu Excel eta noiz joan elkarrizketa 'bezala gorde', 176 00:14:26,850 --> 00:14:32,840 dezakezu benetako CSV fitxategi bat. 177 00:14:32,840 --> 00:14:35,890 >> Handy gauza horiek nola aurre egin jakiteko. 178 00:14:35,890 --> 00:14:42,010 Funtzionatzen du antzekoa dela esan nahi dut, funtsean, kalkulu orri bat mimicking 179 00:14:42,010 --> 00:14:47,590 non ikusten dugun bezala, hemen, pieza oso utzi-gehienak, 180 00:14:47,590 --> 00:14:49,910 dugu azken izen guztiak. 181 00:14:49,910 --> 00:14:54,670 Beraz, Malan, ondoren Hardison, eta, ondoren, Bowden, MacWilliam, eta, ondoren, Chan dugu. 182 00:14:54,670 --> 00:14:59,470 Azken izen guztiak. Eta gero, komaz bereizten lehenengo izenak azken izenak. 183 00:14:59,470 --> 00:15:02,970 David, Nate, Rob, Tommy, eta Zamyla. 184 00:15:02,970 --> 00:15:06,850 Nahastu dut beti sortu Robby eta Tom. 185 00:15:06,850 --> 00:15:10,940 Eta gero, azkenik, hirugarren zutabean helbide elektronikoak. 186 00:15:10,940 --> 00:15:18,500 Ulertzen dituzula eta gero, gainerako programa da nahiko erraza inplementatzeko. 187 00:15:18,500 --> 00:15:23,850 Zer egin dugu egitura bera gure C programa hau imitatzen 188 00:15:23,850 --> 00:15:27,510 erabili dugu egitura bat. 189 00:15:27,510 --> 00:15:30,520 Horiek apur bat gehiago baita jolasean hasten gara. 190 00:15:30,520 --> 00:15:35,790 Arazo multzo 3, hiztegiak ginen aurre lehen apur ikusi dugu. 191 00:15:35,790 --> 00:15:40,290 Hala ere, langile eta egitura honen azken izena, lehen izen bat, eta mezu elektroniko bat gordetzen ditu. 192 00:15:40,290 --> 00:15:44,500 CSV fitxategia Just gordetzeko. 193 00:15:44,500 --> 00:15:47,950 Beraz, hori besterik ez da bat formatu batetik bestera bihurtzeko. 194 00:15:47,950 --> 00:15:54,630 Bihurtzeko, kasu honetan, langileak eta egitura bat lerro bat sartu behar dugu, 195 00:15:54,630 --> 00:15:59,060 komaz bereizitako line, besterik gabe. 196 00:15:59,060 --> 00:16:01,500 Ez duela zentzurik? Zaudete guztiak hartu quiz, 197 00:16:01,500 --> 00:16:07,680 beraz, gutxienez, duzu, denbora pixka bat izan zuten honi buruz uste imajinatzen dut. 198 00:16:07,680 --> 00:16:16,410 >> Alokatzeko funtzioa, arazoa galdetzen digu hau apur zoom we'll 199 00:16:16,410 --> 00:16:22,480 langileen egitura, langileak eta egitura, izena s 200 00:16:22,480 --> 00:16:30,900 eta gure staff.csv fitxategitik eransteko bere edukia. 201 00:16:30,900 --> 00:16:34,230 Bihurtzen da hori nahiko erraza da erabiltzea. 202 00:16:34,230 --> 00:16:37,430 Mota play funtzio horiek gaur egun pixka bat gehiago dugu inguruan. 203 00:16:37,430 --> 00:16:44,510 Baina kasu honetan, fprintf funtzioa da benetan gakoa. 204 00:16:44,510 --> 00:16:51,960 Beraz, fprintf batera, inprimatu, ezin dugu bezala guys dira printf osoa epe hau erabiliz. 205 00:16:51,960 --> 00:16:55,050 Printf fitxategi batean lerro bat egin dezakezu. 206 00:16:55,050 --> 00:16:59,030 Beraz, ohiko printf dei egiten ordez, non eman duzu formatu katea 207 00:16:59,030 --> 00:17:05,380 eta, ondoren, aldagai guztiak ordezkatu ondorengo argumentuak, 208 00:17:05,380 --> 00:17:11,290 fprintf, zure lehen argumentua idatzi nahi duzun fitxategia ordez. 209 00:17:11,290 --> 00:17:21,170 Ginen eta begiratu tresnan, adibidez, gizon fprintf bada, 210 00:17:21,170 --> 00:17:25,980 printf eta fprintf arteko ezberdintasuna ikusi ahal izango dugu. 211 00:17:25,980 --> 00:17:28,960 Hemen mapan handiago dut pixka bat. 212 00:17:28,960 --> 00:17:33,140 Beraz, printf batera, emango dugu formatu katea, eta, ondoren, ondorengo argudioak 213 00:17:33,140 --> 00:17:37,580 gure formatu katea sartu ordezkatzeko ordezkapen aldagai guztiak dira. 214 00:17:37,580 --> 00:17:47,310 Fprintf batera, berriz, lehen argumentua da, hain zuzen, erreka bat izeneko fitxategi * honetan. 215 00:17:47,310 --> 00:17:51,800 >> Moving hemen gure alokairua 216 00:17:51,800 --> 00:17:54,550 Jadanik dugu gure file * korrontea eskuratu Gurekin inauguratu zen. 217 00:17:54,550 --> 00:17:57,810 Hori zer, lehenengo lerroan honek staff.csv fitxategia irekitzen du, 218 00:17:57,810 --> 00:18:01,690 append moduan irekiko da, eta guztiak guri utzi da 219 00:18:01,690 --> 00:18:08,640 fitxategia idazteko langile egitura. 220 00:18:08,640 --> 00:18:10,870 Eta, dezagun, ikus iPad erabili nahi dut? 221 00:18:10,870 --> 00:18:17,900 IPad erabili dut. Void ditugu utzi hau jarri du mahai gainean pixka bat hobeto idatzi ahal izateko 222 00:18:17,900 --> 00:18:33,680 gal alokairua eta argumentu bat hartzen du, s izeneko langile egitura bat. 223 00:18:33,680 --> 00:18:44,120 Got gure giltza, lortu dugu gure file * izeneko fitxategia, 224 00:18:44,120 --> 00:18:48,380 gure fopen-line eman digu ditugu, 225 00:18:48,380 --> 00:18:51,890 eta besterik ez dut idazteko puntu gisa pedia, dagoeneko geroztik. 226 00:18:51,890 --> 00:19:00,530 Eta gero gure hurrengo on line, dei bat egin nahi fprintf dugu 227 00:19:00,530 --> 00:19:03,700 eta fitxategia pasatuko dugu nahi dugun inprimatu 228 00:19:03,700 --> 00:19:10,290 eta, ondoren, gure formatu katea, eta horrek - 229 00:19:10,290 --> 00:19:14,300 You guys tell me zer itxura utzi dut. 230 00:19:14,300 --> 00:19:20,500 Nola duzu, Stella? Zer formatu katea lehenengo zatian, itxura ezagutzen al duzu? 231 00:19:20,500 --> 00:19:24,270 [Stella] ez nago ziur. >> Feel free Jimmy eskatu. 232 00:19:24,270 --> 00:19:27,690 Ez, badakizu, Jimmy? 233 00:19:27,690 --> 00:19:31,000 [Jimmy] litzateke besterik ez da azken? Ez dakit. Ez nago erabat ziur. 234 00:19:31,000 --> 00:19:39,020 >> Ados. Nola buruz, ez zuen inor zuzena hau Proba Orokorra? 235 00:19:39,020 --> 00:19:41,770 N º eskubidea guztiak. 236 00:19:41,770 --> 00:19:47,920 Bihurtzen da hori guztia egin behar dugu gertatzen da, hain zuzen ere, gure langileen egituraren zati bakoitza nahi dugu 237 00:19:47,920 --> 00:19:53,290 inprimatutako, gure fitxategi kate bat gisa. 238 00:19:53,290 --> 00:19:59,900 Erabili besterik ez dugu kate ordezkapena pertsonaia hiru aldiz dugu azken izen bat delako 239 00:19:59,900 --> 00:20:07,160 koma ondoren, eta, ondoren, lehen izen bat koma bat ondoren, 240 00:20:07,160 --> 00:20:12,430 eta, ondoren, azkenik, helbide elektronikoa da, eta ondoren, ez da 241 00:20:12,430 --> 00:20:15,140 nire pantailan prestaturik, baina karaktere newline ondoren. 242 00:20:15,140 --> 00:20:20,060 Beraz, idatzi besterik ez hor behera noa. 243 00:20:20,060 --> 00:20:23,560 Eta gero, gure formatu katea jarraituz, 244 00:20:23,560 --> 00:20:27,880 Aski dugu ordezkapenak, dot idazkera erabiliz dugu 245 00:20:27,880 --> 00:20:31,370 arazo multzo 3 ikusi dugu. 246 00:20:31,370 --> 00:20:48,820 Erabili ahal izango ditugu. S.last, s.first, eta s.email 247 00:20:48,820 --> 00:20:58,990 gure formatu katea, hiru balio horiek ordezkatzeko. 248 00:20:58,990 --> 00:21:06,190 Beraz, nola ez? Zentzurik? 249 00:21:06,190 --> 00:21:09,700 Bai? Ez? Baliteke? Ongi da. 250 00:21:09,700 --> 00:21:14,180 >> Egiten dugun gauza behin betiko dugu eta inprimatutako ondoren dugu ondoren, gure fitxategia ireki: 251 00:21:14,180 --> 00:21:17,370 bakoitzean fitxategi bat ireki dugu, beti dugu ixteko gogoratzeko. 252 00:21:17,370 --> 00:21:19,430 Bestela amaituko delako dugu memoria leaking, 253 00:21:19,430 --> 00:21:22,500 file deskriptoreak erabiliz. 254 00:21:22,500 --> 00:21:25,950 Beraz, ixteko, duen funtzioa egiten dugu? Daniel? 255 00:21:25,950 --> 00:21:30,120 [Daniel] fclose? >> Fclose, zehazki. 256 00:21:30,120 --> 00:21:37,520 Beraz, arazo honen azken zatia izan da behar bezala fitxategia itxi, fclose funtzioa erabiliz, 257 00:21:37,520 --> 00:21:40,370 besterik ez da itxura. 258 00:21:40,370 --> 00:21:43,880 Not too crazy. 259 00:21:43,880 --> 00:21:46,990 Cool. 260 00:21:46,990 --> 00:21:49,520 Beraz, 33 galdetegiaren arazoa da. 261 00:21:49,520 --> 00:21:52,480 I / O datozen behin betiko gehiago fitxategia izango dugu. 262 00:21:52,480 --> 00:21:55,130 Do pixka bat gehiago dugu gaur hitzaldi batean, edo atalean, gaur egun, 263 00:21:55,130 --> 00:22:01,710 hori delako zer Datorren pset soltean osatzeko. 264 00:22:01,710 --> 00:22:05,020 Dezagun mugitu puntu honetan galdetegia. Bai? 265 00:22:05,020 --> 00:22:10,880 >> [Charlotte]] Zergatik fclose (file) ordez fclose (staff.csv)? 266 00:22:10,880 --> 00:22:19,100 >> Ah. Bihurtzen da delako - beraz, galdera, eta hori handia da, 267 00:22:19,100 --> 00:22:27,800 dago zergatik, fclose idazten dira, fclose (fitxategia) star aldagaia idazten dugu 268 00:22:27,800 --> 00:22:33,680 fitxategi-izena, staff.csv aurrean? Dela zuzena? Bai. 269 00:22:33,680 --> 00:22:39,570 Beraz, dezagun begirada bat. Aldatzen I itzuli bada, nire laptop 270 00:22:39,570 --> 00:22:45,040 eta dezagun fclose funtzio begiratu. 271 00:22:45,040 --> 00:22:51,460 Beraz, fclose funtzioa erreka bat itxi eta erakuslea hartzen da korrontea itxi nahi dugu, 272 00:22:51,460 --> 00:22:57,010 itxi nahi dugun uneko fitxategi izena ez bezala. 273 00:22:57,010 --> 00:23:01,620 Eta hau eszenak atzean delako, dei bat egin nahi duzun fopen 274 00:23:01,620 --> 00:23:12,020 ireki fitxategia, benetan ari zaren memoria esleitzean fitxategia buruzko informazioa gordetzeko. 275 00:23:12,020 --> 00:23:16,380 Beraz, fitxategiari buruzko informazioa duen fitxategia erakuslea 276 00:23:16,380 --> 00:23:23,080 esate baterako, zabalik da, bere tamaina, non ari zaren fitxategia 277 00:23:23,080 --> 00:23:29,100 deiak irakurtzen eta idazten fitxategia barruan leku jakin hori horrela egin ahal izango dituzu. 278 00:23:29,100 --> 00:23:38,060 Azkenean erakuslea fitxategi-izenaren ordez ixteko ixteko. 279 00:23:38,060 --> 00:23:48,990 >> Bai? [Daniel] Beraz, alokairua erabili, esango duzu nola erabiltzaile sarrera ez da? 280 00:23:48,990 --> 00:23:53,830 Fprintf ez du GetString bezala jardun zentzuan egingo duela erabiltzailearen sarrera itxaron 281 00:23:53,830 --> 00:23:57,180 galdetu eta idatzi - edo itxaron hiru gauza hauek idatzi nahi? 282 00:23:57,180 --> 00:24:00,480 Edo zerbait erabili alokairua ezartzeko behar duzu? 283 00:24:00,480 --> 00:24:04,100 >> Bai. Beraz, ez gara - Galdera zen, nola ez erabiltzailearen sarrera lortuko dugu 284 00:24:04,100 --> 00:24:09,220 alokairua ezartzeko? Eta hemen dugu alokatzeko deitzailearen 285 00:24:09,220 --> 00:24:17,690 struct langileak hau struct en gordetzen dagoeneko datu guztiak gainditu. 286 00:24:17,690 --> 00:24:22,990 Beraz fprintf gai da bakarrik datuak idatzi fitxategi zuzenean. 287 00:24:22,990 --> 00:24:25,690 Ez dago erabiltzailearen sarrera zain. 288 00:24:25,690 --> 00:24:32,110 Erabiltzaileak dagoeneko eman sarrera, langileek struct hau behar bezala jarri. 289 00:24:32,110 --> 00:24:36,510 Eta gauza jakina, erakusleak duten edozein izan ziren null bada apur 290 00:24:36,510 --> 00:24:40,370 beraz, atzera joan gara eta hemen gure egiturari begiratzen dugu. 291 00:24:40,370 --> 00:24:43,640 Azken katea, katea lehen, kate email ditugu. 292 00:24:43,640 --> 00:24:48,530 Orain badakigu horiek benetan hori guztia, kanpaia azpian, char * aldagaiak dira. 293 00:24:48,530 --> 00:24:53,470 Hori daiteke edo ez da null seinalatuz. 294 00:24:53,470 --> 00:24:55,800 Zeure, memoria daitezke seinalatuz, 295 00:24:55,800 --> 00:24:59,650 agian pilaketan memoria. 296 00:24:59,650 --> 00:25:04,580 Ez ditugu benetan ezagutzen, baina erakusleak horietako edozein null, edo baliogabea bada, 297 00:25:04,580 --> 00:25:08,120 dugu zalantzarik gabe kraska gure alokairua funtzioa. 298 00:25:08,120 --> 00:25:11,050 Zerbait izan zen mota azterketa esparrutik kanpo izan zen. 299 00:25:11,050 --> 00:25:16,440 Ez ari gara buruz kezkagarria da. 300 00:25:16,440 --> 00:25:22,170 Great. Ongi da. Beraz, mugitzen galdetegia. 301 00:25:22,170 --> 00:25:25,760 >> Dezagun guy hau ixteko, eta 4 pset begiratu dugu. 302 00:25:25,760 --> 00:25:34,700 Beraz, baduzu guys pset zehaztapenak begiratu, behin sartu ahal izango duzu, cs50.net/quizzes, 303 00:25:34,700 --> 00:25:42,730 atalean arazoak gaur egun gutxi baten bidez joan gara. 304 00:25:42,730 --> 00:25:52,240 Korritu ditut galdera atala pset zehaztutako hirugarren orrian hasten da. 305 00:25:52,240 --> 00:25:57,800 Eta lehen zatia eskatuko dizu eta joan labur ikusi eta berbideratu hodiak. 306 00:25:57,800 --> 00:26:02,820 Zein izan da, labur bat cool mota erakusten dizu, batzuk berriak, cool komando-lerroan trikimailuak erabil ditzakezun. 307 00:26:02,820 --> 00:26:06,050 Eta gero, galdera batzuk lortu dugu baita. 308 00:26:06,050 --> 00:26:10,860 Erreka lehen buruzko galdera, printf default idazten du, 309 00:26:10,860 --> 00:26:15,920 motatako apur bat besterik ez dugu ukitu duela une bat. 310 00:26:15,920 --> 00:26:22,380 Fprintf ziren gara eztabaidatzen file * korronteak bere argumentu gisa hartzen du. 311 00:26:22,380 --> 00:26:26,580 fclose file * korrontean hartzen baita, 312 00:26:26,580 --> 00:26:32,660 fopen-itzulera balioa ematen dizu file * korrontea baita. 313 00:26:32,660 --> 00:26:36,060 Arrazoia ez duten ikusi dugu aurretik printf landu dugu 314 00:26:36,060 --> 00:26:39,450 printf default korronte bat duelako. 315 00:26:39,450 --> 00:26:41,810 Eta lehenetsia korronte bertan idazten du 316 00:26:41,810 --> 00:26:45,190 aurkituko duzu labur buruz. 317 00:26:45,190 --> 00:26:50,080 Beraz, behin betiko begirada bat hartu. 318 00:26:50,080 --> 00:26:53,010 >> Gaur egungo atalean, GDB buruz apur bat hitz egin dugu, 319 00:26:53,010 --> 00:26:57,720 gehiago ezagutzen dira denez, praktika gehiago lortu, 320 00:26:57,720 --> 00:27:01,390 hobeto ahal izateko benetan ehizatu behera zure kodea bugs duzu. 321 00:27:01,390 --> 00:27:05,540 Arazteko izugarri prozesua bizkortzen. 322 00:27:05,540 --> 00:27:09,230 Printf erabiliz, aldi bakoitzean zure kodea konpilatu duzula egin duzu, 323 00:27:09,230 --> 00:27:13,000 berriro exekutatu behar duzu, batzuetan printf deia inguruan mugitu behar duzu, 324 00:27:13,000 --> 00:27:17,100 komentatu kodea, pixka bat besterik ez da. 325 00:27:17,100 --> 00:27:20,850 Gure helburua da, eta saiatu duzu konbentzitu GDB, funtsean ahal izango duzu 326 00:27:20,850 --> 00:27:26,810 printf, zure kodea edozein puntutan ezer eta inoiz ez dute konpilatu. 327 00:27:26,810 --> 00:27:35,120 Inoiz ez duzu hasteko eta mantentzeko non printf hurrengo jakitea. 328 00:27:35,120 --> 00:27:40,910 Lehenik eta behin, ez da lerro hau kopiatu eta atalaren kodea lortzeko web-off. 329 00:27:40,910 --> 00:27:47,530 Dioenez, "wget ​​http://cdn.cs50.net" kode line naiz kopiatzean. 330 00:27:47,530 --> 00:27:49,510 Kopiatu dut. 331 00:27:49,510 --> 00:27:55,950 Nire-tresna baino gehiago joan nahi dut, mapan handiago ikusi zer egiten ari naiz dezakezu, 332 00:27:55,950 --> 00:28:01,890 itsasten ez dago, eta Sartu sakatu dut, wget komandoa hau literalki web bat lortzeko. 333 00:28:01,890 --> 00:28:06,210 Fitxategi hau behera tira off Interneten egingo da, 334 00:28:06,210 --> 00:28:11,790 eta gorde uneko direktorioa da. 335 00:28:11,790 --> 00:28:21,630 Orain zerrendara nire uneko direktorioan ikusi ditudan file section5.zip eskubide hau bertan lortu ahal izango dituzu. 336 00:28:21,630 --> 00:28:25,260 Guy hori aurre egiteko modua da unzip 337 00:28:25,260 --> 00:28:27,650 komando-lerroa egin dezakezu, besterik ez hau atsegin dute. 338 00:28:27,650 --> 00:28:31,880 Section5.zip. 339 00:28:31,880 --> 00:28:36,980 Deskonprimitu izango dela, niretzat karpeta sortu, 340 00:28:36,980 --> 00:28:40,410 puzten eduki guztiak, jarri hor. 341 00:28:40,410 --> 00:28:47,410 Beraz, orain nire atalean, 5 direktorioa cd komandoa erabiliz joan ahal izango dut. 342 00:28:47,410 --> 00:28:58,310 Garbitu pantaila argia erabiliz. Beraz garbitu pantailan. 343 00:28:58,310 --> 00:29:02,280 Orain nice garbi terminal landu dut. 344 00:29:02,280 --> 00:29:06,200 >> Orain, bada, fitxategiak direktorio honetan ikusten dut guztien zerrenda dut, 345 00:29:06,200 --> 00:29:12,270 buggy1, buggy2, buggy3, eta buggy4: Behin I got lau fitxategiak ikusi duzu. 346 00:29:12,270 --> 00:29:16,180 Nik lortu dagozkien c fitxategiak. 347 00:29:16,180 --> 00:29:20,400 Ez gara oraingoz. C fitxategiak bilatzeko. 348 00:29:20,400 --> 00:29:24,140 Horren ordez, horiek erabili ireki dugu GDB goaz. 349 00:29:24,140 --> 00:29:28,220 Mantenduko dugu horien inguruan beraz, benetako iturburu-kodea sartzeko dugun denean GDB erabiltzen ari gara, 350 00:29:28,220 --> 00:29:32,740 , baina atalaren zati honen helburua tinker da GDB inguruan 351 00:29:32,740 --> 00:29:40,370 ikusi eta nola erabili ahal izango dugu irudikatu zer oker horiek lau buggy programak bakoitzean. 352 00:29:40,370 --> 00:29:43,380 Beraz, ari gara, gela inguruan gertatzen benetan azkar, 353 00:29:43,380 --> 00:29:47,000 eta norbaitek galdetu, buggy programa bat exekutatu behar dut 354 00:29:47,000 --> 00:29:54,730 eta, ondoren, GDB bidez talde bat egingo dugu, eta ikusiko dugu zer egin programa horiek konpondu ahal izango dugu, 355 00:29:54,730 --> 00:29:58,460 edo, gutxienez, identifikatzeko zer oker joan, eta horietako bakoitzean. 356 00:29:58,460 --> 00:30:04,760 Dezagun hasi hemen Daniel. Egingo buggy1 exekutatu duzu? Dezagun zer gertatzen den ikus-en. 357 00:30:04,760 --> 00:30:09,470 [Daniel] aplikazioa matxura bat esaten du. >> Bai. Hain zuzen ere. 358 00:30:09,470 --> 00:30:12,460 Beraz, exekutatu I buggy1 izanez gero, seg matxura bat lortuko dut. 359 00:30:12,460 --> 00:30:16,210 Puntu honetan, joan eta nuen ireki buggy1.c 360 00:30:16,210 --> 00:30:19,450 saiatu eta irudikatu zer oker joan 361 00:30:19,450 --> 00:30:22,000 baina errua seg error buruzko gauzarik obnoxious bat 362 00:30:22,000 --> 00:30:27,610 ez dela esango dizu line programa gauzak benetan oker joan da eta hautsi. 363 00:30:27,610 --> 00:30:29,880 Dute mota kodea begiratu 364 00:30:29,880 --> 00:30:33,990 eta etxebizitza bidez irudikatu eta egiaztatu edo printf zer oker joan ikusteko. 365 00:30:33,990 --> 00:30:37,840 GDB buruzko gauza coolest bat da benetan, oso erraza 366 00:30:37,840 --> 00:30:42,170 programa bat kraskatzen lerro irudikatu. 367 00:30:42,170 --> 00:30:46,160 Guztiz da erabili merezi du, nahiz eta hori bakarrik baldin bada. 368 00:30:46,160 --> 00:30:56,190 Beraz abiarazteko GDB, GDB idazten nuen, eta, ondoren, eman nahi dut exekutatu exekutagarriaren bide-izena. 369 00:30:56,190 --> 00:31:01,960 Hemen gdb ./buggy1 ari naiz idazten. 370 00:31:01,960 --> 00:31:06,600 Sakatu Sartu. Ematen dit copyright informazio hori guztia, 371 00:31:06,600 --> 00:31:13,000 eta behera hemen lerro hori dio, "Irakurri / home / ikurrak ikusiko duzu 372 00:31:13,000 --> 00:31:17,680 jharvard/section5/buggy1 ". 373 00:31:17,680 --> 00:31:22,060 Dena ondo badoa izanez gero, ikus mezu bat inprimatu itxura duzu. 374 00:31:22,060 --> 00:31:25,500 Ikurrak irakurri ahal izango da, esan "sinboloak naiz irakurtzen zure fitxategi exekutagarria," egingo 375 00:31:25,500 --> 00:31:29,900 eta, ondoren, "egin" mezu bat izango da hemen. 376 00:31:29,900 --> 00:31:35,410 Beste aldaketa batzuk sartuz gero ikusiko duzu, edo ikusten duzun ezin aurkitu sinboloak 377 00:31:35,410 --> 00:31:41,460 edo horrelako zerbait, zer esan nahi du, besterik ez da, ez konpilatu zure exekutagarri bezala. 378 00:31:41,460 --> 00:31:49,980 GDB-ekin erabiltzeko programak konpilatu dugu, berezi-g Ez hori erabili behar dugu, 379 00:31:49,980 --> 00:31:54,540 eta hori lehenetsi gisa egiten konpilatu zure programak, egin idatziz 380 00:31:54,540 --> 00:31:59,320 egin edo buggy edo berreskuratzen, horietako edozein. 381 00:31:59,320 --> 00:32:07,800 Baina eskuz bazara konpilatzean Clang, eta ondoren joan eta-g Ez duzu. 382 00:32:07,800 --> 00:32:10,310 >> Une honetan, gaur egun dugun gure GDB gonbitean, 383 00:32:10,310 --> 00:32:12,310 nahiko erraza da programa exekutatu. 384 00:32:12,310 --> 00:32:19,740 Idatzi ahal izango dugu, bai exekuzio, edo, besterik gabe, ahal izango dugu r idatzi. 385 00:32:19,740 --> 00:32:22,820 GDB komandoak gehienek laburtua izan daiteke. 386 00:32:22,820 --> 00:32:25,940 Normalean bakar edo pare hizkiak, pretty nice da. 387 00:32:25,940 --> 00:32:30,980 Beraz, Saad idazten duzunean, r bada, eta sakatu Sartu, zer gertatzen da? 388 00:32:30,980 --> 00:32:39,390 [Saad] SIGSEGV, segmentaziuo hutsegitea,, eta ondoren gobbledygook hau guztia lortu nuen. 389 00:32:39,390 --> 00:32:43,650 >> Bai. 390 00:32:43,650 --> 00:32:47,990 Atsegin dugu pantailan oraintxe ikusita, eta Saad esan zuen bezala, 391 00:32:47,990 --> 00:32:53,430 exekutatu edo r idazten, eta sakatu Sartu, seg errua bera jarraitzen dugu. 392 00:32:53,430 --> 00:32:55,830 Beraz, GDB erabiliz ez da gure arazoa konpontzen. 393 00:32:55,830 --> 00:32:59,120 Baina ematen digu gobbledygook batzuk, eta bihurtzen da gobbledygook hori 394 00:32:59,120 --> 00:33:03,080 benetan esaten digu, non gertatzen ari da. 395 00:33:03,080 --> 00:33:10,680 Hau pixka bat analizatu, bit hau lehen funtzioa, hain zuzen, dena gaizki joan da. 396 00:33:10,680 --> 00:33:20,270 __ Hau strcmp_sse4_2 kontatzen digu, eta duela fitxategi hau gertatzen 397 00:33:20,270 --> 00:33:29,450 izeneko sysdeps/i386, hori guztia, berriz, gaizki mota - baina line 254. 398 00:33:29,450 --> 00:33:31,670 Hori da mota gogorra izan da. Normalean hau atsegin stuff ikusten duzu, 399 00:33:31,670 --> 00:33:38,770 horrek esan nahi du, dela sistemaren liburutegi batean faulting seg. 400 00:33:38,770 --> 00:33:43,220 Strcmp zerikusia duten zerbait, beraz. Zaudete ikusi strcmp aurretik. 401 00:33:43,220 --> 00:33:52,730 Not too crazy, baina esan nahi du horrek strcmp hondatuta dago edo ez dagoela strcmp arazo bat da? 402 00:33:52,730 --> 00:33:57,110 Zer uste duzu Alexander? 403 00:33:57,110 --> 00:34:04,890 [Alexander] - 254 line? Eta ez bitarra, baina ez da bere sabaiak, 404 00:34:04,890 --> 00:34:10,590 eta, ondoren, beste funtzio bakoitzeko hizkuntza. - Funtzio hori 254, edo da hori? 405 00:34:10,590 --> 00:34:21,460 >> Line 254 da. Itxura hau. S fitxategia bezalakoa da, beraz muntaia da kodea ziurrenik. 406 00:34:21,460 --> 00:34:25,949 >> Hala eta guztiz ere, premiazko gauza da, dugu ahaztuak seg matxura bat dela uste dut, 407 00:34:25,949 --> 00:34:29,960 eta strcmp funtzio bezala datozen itxura du, 408 00:34:29,960 --> 00:34:38,030 du esan nahi, beraz, strcmp hori hautsi? 409 00:34:38,030 --> 00:34:42,290 Ez da, zorionez. Beraz, besterik ez delako segmentaziuo hutsegitea duzu 410 00:34:42,290 --> 00:34:49,480 sistemaren funtzio bat, normalean, horrek esan nahi du, besterik ez da, ez dute deitu behar bezala. 411 00:34:49,480 --> 00:34:52,440 Figuraren inguruan zer ari den benetan gertatzen ari gauzarik azkarrena 412 00:34:52,440 --> 00:34:55,500 zerbait crazy atsegin dute hau, ikusten duzun bakoitzean seg matxura bat ikusiko duzu, 413 00:34:55,500 --> 00:34:59,800 batez ere, programa bat gehiago besterik ez nagusia baino erabiltzen baduzu, 414 00:34:59,800 --> 00:35:03,570 backtrace bat erabili da. 415 00:35:03,570 --> 00:35:13,080 Backtrace laburtu I bt idatziz, backtrace osoa hitza aurrean. 416 00:35:13,080 --> 00:35:16,510 Baina Charlotte, zer gertatzen den bt idatzi eta sakatu Sartu? 417 00:35:16,510 --> 00:35:23,200 [Charlotte] me erakusten da, bi lerro, lerro 0 eta 1 errenkadaren. 418 00:35:23,200 --> 00:35:26,150 >> Bai. Beraz, lerro 0 eta 1 line. 419 00:35:26,150 --> 00:35:34,560 Benetako pila hauek izan ziren, gaur egun jokoan markoak programa kraskatu denean. 420 00:35:34,560 --> 00:35:42,230 , 0 markoa marko lehenbiziko hasita, eta beheko-gehienak, hau da, 1. Fotograman joan. 421 00:35:42,230 --> 00:35:45,140 Gure lehengo marko strcmp markoa da. 422 00:35:45,140 --> 00:35:50,080 Hau dela pentsa dezakezu arazo hori besterik ez genuen egiten erakusleak duen galdetegiaren antzekoa da, 423 00:35:50,080 --> 00:35:54,890 non pila marko swap izan dugu pila nagusia markoaren gainean, 424 00:35:54,890 --> 00:35:59,700 eta aldagai swap zen aldagai nagusia izan zen erabiliz gainean izan genuen. 425 00:35:59,700 --> 00:36:08,440 Hona hemen gure kraskadura gure funtzioa strcmp izan zen, gure funtzio nagusia deitu gertatu zen, 426 00:36:08,440 --> 00:36:14,370 eta backtrace emango digu, ez bakarrik funtzio gauzak huts egin du, 427 00:36:14,370 --> 00:36:16,440 baina ere gurekin kontatu non guztia deitzen zen. 428 00:36:16,440 --> 00:36:18,830 Beraz, bada, joan apur bat gehiago I eskubidea, 429 00:36:18,830 --> 00:36:26,110 yeah, line 254 strcmp sse4.s fitxategia honetan dugu. 430 00:36:26,110 --> 00:36:32,540 Baina deia egin zen buggy1.c, line 6. 431 00:36:32,540 --> 00:36:35,960 Horrek esan nahi du, egin ahal izango dugu, beraz, besterik ez da joan gaitezke begiratu eta ikusi zer zen joan 432 00:36:35,960 --> 00:36:39,930 buggy1.c, line 6. 433 00:36:39,930 --> 00:36:43,780 Berriz ere, badaude pare bat hau egiteko modu bat. Irtetzeko GDB 434 00:36:43,780 --> 00:36:49,460 edo zure kodea beste leiho bat eta gurutze-erreferentzia batean irekiko da. 435 00:36:49,460 --> 00:36:54,740 , Eta bera, nahiko praktikoa da orain bada Oraindik delako bulegoan etan 436 00:36:54,740 --> 00:36:57,220 eta lortu duzun seg matxura bat eta zure TF da, non dena zen hautsi galdetzen, 437 00:36:57,220 --> 00:36:59,710 besterik ez dezakezu esan, "Oh, linea 6., ez dakit zer ari den gertatzen, 438 00:36:59,710 --> 00:37:03,670 baina linea 6 zerbait da nire programa hondatu eragiten. " 439 00:37:03,670 --> 00:37:10,430 Beste modu batera egin behar da izeneko zerrenda GDB komando hau erabili ahal izango duzu. 440 00:37:10,430 --> 00:37:13,650 Ere egin dezakezu laburtu du l. 441 00:37:13,650 --> 00:37:18,910 Beraz hit dugu l bada, zer iritsi dugu? 442 00:37:18,910 --> 00:37:21,160 Stuff bitxi sorta oso bat lortuko dugu. 443 00:37:21,160 --> 00:37:26,030 Hau da benetako muntaia kodea 444 00:37:26,030 --> 00:37:29,860 strcmp_sse4_2 da. 445 00:37:29,860 --> 00:37:32,440 Funky mota itxura, 446 00:37:32,440 --> 00:37:36,520 eta horregatik ari gara lortzean oraintxe delako, 447 00:37:36,520 --> 00:37:40,160 GDB ditu gurekin 0 markoan. 448 00:37:40,160 --> 00:37:43,070 >> Beraz, edonoiz dugu aldagai, iturburu-kodea begiratzen dugu, edozein unetan 449 00:37:43,070 --> 00:37:50,530 iturburu kodea pila markoaren batena ari gara, gaur egun sartu bilatzen ari gara 450 00:37:50,530 --> 00:37:53,200 Beraz, ezer esanguratsua lortu behar dugu 451 00:37:53,200 --> 00:37:57,070 pila marko zentzuzkoa mugitu. 452 00:37:57,070 --> 00:38:00,180 Kasu honetan, pila marko nagusia apur bat gehiago zentzurik, 453 00:38:00,180 --> 00:38:02,680 izan zen benetan delako kodea idatzi dugun. 454 00:38:02,680 --> 00:38:05,330 Ez strcmp kodea. 455 00:38:05,330 --> 00:38:08,650 Fotograma artean mugitu ahal izango duzu, kasu honetan, gure bi delako, 456 00:38:08,650 --> 00:38:10,430 0 eta 1 dugu, 457 00:38:10,430 --> 00:38:13,650 Horretarako gora eta behera komandoak. 458 00:38:13,650 --> 00:38:18,480 Mugitzen I fotograma bat badu, 459 00:38:18,480 --> 00:38:21,770 naiz pila nagusiak marko dut. 460 00:38:21,770 --> 00:38:24,330 Eraman behera atzera joan nintzen, 461 00:38:24,330 --> 00:38:32,830 joan berriro, joan berriro, eta joan berriro. 462 00:38:32,830 --> 00:38:39,750 Al duzu inoiz ez bada zure programa GDB, kraskatzea bat lortuko duzu, backtrace 463 00:38:39,750 --> 00:38:42,380 eta fitxategi batzuk ez duzula jakin zer ari den gertatzen dela ikusiko duzu. 464 00:38:42,380 --> 00:38:45,460 Zerrenda saiatu, kodea ez itxura ezagutzen duzu, 465 00:38:45,460 --> 00:38:48,150 zure markoak begirada bat hartu eta irudikatu non zauden. 466 00:38:48,150 --> 00:38:51,010 Ziurrenera duzu pila okerreko fotograma. 467 00:38:51,010 --> 00:38:58,760 Edo, gutxienez, Oraindik pila marko hori ez da benetan arazteko ditzakezun duzu. 468 00:38:58,760 --> 00:39:03,110 Orain pila fotograma egokiak Oraindik dugun, Oraindik nagusia dugu, 469 00:39:03,110 --> 00:39:08,100 orain zerrendako komandoa erabili ahal izango dugu irudikatu zer line izan zen. 470 00:39:08,100 --> 00:39:13,590 Eta ikusi ahal izango duzu; inprimatu Gurekin hemen. 471 00:39:13,590 --> 00:39:19,470 Baina, sakatu zerrendara bera ahal izango dugu, eta zerrenda ematen digu nice inprimaketaren honetan 472 00:39:19,470 --> 00:39:23,920 iturburu kodea duten gertatzen da hemen. 473 00:39:23,920 --> 00:39:26,420 >> Hain zuzen ere, linea 6 dugu. 474 00:39:26,420 --> 00:39:29,330 Zer gertatzen da hemen ikusi ahal izango dugu. 475 00:39:29,330 --> 00:39:31,250 Eta katea konparaketa bat bezala egiten ari gara badirudi 476 00:39:31,250 --> 00:39:41,050 arteko katea "CS50 arroka" eta argv [1]. 477 00:39:41,050 --> 00:39:45,700 Honi buruz zerbait izan zen bertan behera gelditzen. 478 00:39:45,700 --> 00:39:54,120 Missy Beraz, zer izango da hemen pentsamenduak edozein duzu? 479 00:39:54,120 --> 00:39:59,400 [Missy] Ez dakit zergatik bertan behera gelditzen da. >> Ez dakizu zergatik bertan behera gelditzen da? 480 00:39:59,400 --> 00:40:02,700 Jimmy, pentsamenduak edozein? 481 00:40:02,700 --> 00:40:06,240 [Jimmy] Ez nago erabat ziur, baina azken denbora katea erabili dugu konparatu, 482 00:40:06,240 --> 00:40:10,260 edo strcmp azpian hiru kasu ezberdin bezala, izan dugu. 483 00:40:10,260 --> 00:40:12,800 Ez dugu ==, ez dut uste, lehen lerroan. 484 00:40:12,800 --> 00:40:16,700 Beharrean izan zen hiru bereizten ditu, eta bat izan zen == 0, 485 00:40:16,700 --> 00:40:19,910 bat izan zen <0, uste dut, eta bat izan zen:> 0. 486 00:40:19,910 --> 00:40:22,590 Beraz, agian horrelako zerbait? >> Bai. Beraz, gai honen 487 00:40:22,590 --> 00:40:27,200 dira egiten konparazioa duzula? 488 00:40:27,200 --> 00:40:31,660 Stella? Pentsamenduak Any? 489 00:40:31,660 --> 00:40:38,110 [Stella] ez nago ziur. >> Ez da ziur. Daniel? Pentsamenduak? Ongi da. 490 00:40:38,110 --> 00:40:44,770 Bihurtzen da, zer hemen gertatzen ari denean, programa zuena dugu 491 00:40:44,770 --> 00:40:48,370 eta seg-matxura lortu dugu, lehen aldiz programa, Daniel ran duzu, 492 00:40:48,370 --> 00:40:50,800 ez du ematen duzun edozein komando-lerroko argumentuak? 493 00:40:50,800 --> 00:40:58,420 [Daniel] n. >> Zb Kasu horretan, zer argv balioa da [1]? 494 00:40:58,420 --> 00:41:00,920 >> Balioa ez da ". >> Right. 495 00:41:00,920 --> 00:41:06,120 Beno, ez dago kate balio egokia da. 496 00:41:06,120 --> 00:41:10,780 Baina balio batzuk. Zer da hor gordetzen duen balioa lortzen da? 497 00:41:10,780 --> 00:41:15,130 >> Zabor balioa? >> Bai da zabor-balio bat edo, kasu honetan, 498 00:41:15,130 --> 00:41:19,930 argv array amaiera da beti null amaitu da. 499 00:41:19,930 --> 00:41:26,050 Beraz, zer benetan got gordetako ez da null. 500 00:41:26,050 --> 00:41:30,810 Beste modu hau konpontzeko, beharrean pentsatzen bidez baino, 501 00:41:30,810 --> 00:41:33,420 inprimatzeko out saiatzeko. 502 00:41:33,420 --> 00:41:35,880 , Non nintzen GDB erabiliz handia dela esaten da, 503 00:41:35,880 --> 00:41:40,640 inprimatu delako aldagai guztiak, nahi duzun baloreak guztiak 504 00:41:40,640 --> 00:41:43,230 hau handy-dandy p komandoa erabiliz. 505 00:41:43,230 --> 00:41:48,520 Beraz, idatzi dut p bada, eta, ondoren, balioa aldagai edo aldagai baten izena idatzi dut, 506 00:41:48,520 --> 00:41:55,320 esan, argc, argc dela 1 ikusten dut. 507 00:41:55,320 --> 00:42:01,830 Nahi dut inprimatu argv [0], egin dut besterik gabe. 508 00:42:01,830 --> 00:42:04,840 Ikusi eta atsegin dugu, argv [0] beti da programaren izena, 509 00:42:04,840 --> 00:42:06,910 beti exekutagarriaren izena. 510 00:42:06,910 --> 00:42:09,740 Hemen bide-izena osoa lortu ikusiko duzu. 511 00:42:09,740 --> 00:42:15,920 Ere inprima ezin dut argv [1], eta ikusi zer gertatzen den. 512 00:42:15,920 --> 00:42:20,890 >> Balio mistiko mota hau lortu dugu. 513 00:42:20,890 --> 00:42:23,890 0x0 hau lortu dugu. 514 00:42:23,890 --> 00:42:27,850 Gogoratu terminoa hasieratik hitz egiten denean zenbakiak hamaseitarretan gara? 515 00:42:27,850 --> 00:42:34,680 Edo nola 50 irudikatzeko hex little 0 pset amaieran galdera? 516 00:42:34,680 --> 00:42:39,410 CS zenbakiak hex idazten dugu, ez geure burua nahastu 517 00:42:39,410 --> 00:42:46,080 Zenbaki hamartar batekin, beti jarri dugu horietako 0x. 518 00:42:46,080 --> 00:42:51,420 Beraz, 0x aurrizkia hau beti, besterik gabe esan nahi du zenbaki hamaseitar bat bezala kopuru hauek interpretatzeko, 519 00:42:51,420 --> 00:42:57,400 ez kate gisa, ez zenbaki hamartar bat bezala, ez da zenbaki bitar bat bezala. 520 00:42:57,400 --> 00:43:02,820 Kopurua 5-0 hamaseitarrean baliozko zenbaki bat denez. 521 00:43:02,820 --> 00:43:06,240 Eta zenbaki hamartar, 50. 522 00:43:06,240 --> 00:43:10,050 Beraz, hau da, besterik ez dugu nola disambiguate. 523 00:43:10,050 --> 00:43:14,860 Beraz, 0x0 bitartez hamaseitarra 0, hau da, hamartar 0, 'binary 0. 524 00:43:14,860 --> 00:43:17,030 0 balioa besterik ez da. 525 00:43:17,030 --> 00:43:22,630 Bihurtzen da, hori dela null da, benetan, memoria. 526 00:43:22,630 --> 00:43:25,940 Null 0 besterik ez da. 527 00:43:25,940 --> 00:43:37,010 Bertan, elementu argv at gordetzen [1] null da. 528 00:43:37,010 --> 00:43:45,220 Beraz, gure "CS50 arroka" kate alderatu null kate bat saiatzen ari gara. 529 00:43:45,220 --> 00:43:48,130 Beraz, null dereferencing, null at gauzak sartzeko saiatzen ari da, 530 00:43:48,130 --> 00:43:55,050 horiek normalean segmentaziuo hutsegitea edo beste, gauza txarrak gertatuko nolabaiteko eragin du. 531 00:43:55,050 --> 00:43:59,350 Eta bihurtzen da strcmp ez ikusteko 532 00:43:59,350 --> 00:44:04,340 ala ez, balio bat da null dituzun pasa da. 533 00:44:04,340 --> 00:44:06,370 Izan ere, doan besterik ez da aurretik, saiatuko da bere gauza, 534 00:44:06,370 --> 00:44:14,640 eta matxurak seg bada, Seg matxurak, eta zure arazoa da. Konpondu behar duzu. 535 00:44:14,640 --> 00:44:19,730 Benetan azkar, nola izan liteke arazo hau konpondu dugu? Charlotte? 536 00:44:19,730 --> 00:44:23,540 [Charlotte] erabiliz gero, egiaztatu ahal izango duzu. 537 00:44:23,540 --> 00:44:32,240 Beraz, bada argv [1] da, null, == 0, eta gero itzuli 1, edo zerbait [ulertezina]. 538 00:44:32,240 --> 00:44:34,590 >> Bai. Beraz, modu bikaina da egiten da, ikusi dugun bezala, egiaztatu ahal 539 00:44:34,590 --> 00:44:39,230 strcmp sartu pasatuko gara balioa, argv [1], hau da, null? 540 00:44:39,230 --> 00:44:45,830 Bere null bada, orduan esan ados ahal izango dugu, bertan behera utzi. 541 00:44:45,830 --> 00:44:49,450 >> Horretarako modurik ohikoagoa argc balioa erabili da. 542 00:44:49,450 --> 00:44:52,040 Hemen ikusten dezakezu nagusia hasieran, 543 00:44:52,040 --> 00:44:58,040 Lehenengo proba zehazten ez dugu normalean egiten dugu komando-lerroko argumentuak erabiltzen ditugu, 544 00:44:58,040 --> 00:45:05,240 den ala ez, gure argc balioa zer espero probatzeko. 545 00:45:05,240 --> 00:45:10,290 Kasu honetan, gutxienez, bi argumentuen zain ari gara, 546 00:45:10,290 --> 00:45:13,660 programaren izena gehi bat beste. 547 00:45:13,660 --> 00:45:17,140 Gara bigarren argumentua hemen erabili delako. 548 00:45:17,140 --> 00:45:21,350 Beraz, test moduko bat izatea aldez aurretik, gure dei strcmp aurretik 549 00:45:21,350 --> 00:45:37,390 argv duten ala ez, gutxienez 2 probak ere egin gauza bera sort. 550 00:45:37,390 --> 00:45:40,620 Duten programa berriro exekutatzen ari bada ikus dezakegu. 551 00:45:40,620 --> 00:45:45,610 Beti berrabiarazi dezakezu zure GDB, hau da, benetan nice programaren barruan. 552 00:45:45,610 --> 00:45:49,310 Exekutatu dezakezu, eta noiz pasako argumentuetan duzu zure programa, 553 00:45:49,310 --> 00:45:53,060 exekutatutakoan deia pasatzen duzu, ez GDB abiarazteko. 554 00:45:53,060 --> 00:45:57,120 Horrela, gorde dezakezu zure programa deitu argumentuak desberdinak aldi bakoitzean. 555 00:45:57,120 --> 00:46:08,080 Beraz, korrika egin, edo berriro, r idatzi dut, eta zer gertatzen da idazten badugu "hello" ikus dezagun. 556 00:46:08,080 --> 00:46:11,140 Beti izango da eskatu nahi duzun hasteko hasieratik berriro. 557 00:46:11,140 --> 00:46:17,490 Normalean, nahi ez baduzu hasteko hasieratik berriro. 558 00:46:17,490 --> 00:46:25,010 Eta, puntu honetan, berrabiarazi, berriz it bistaratzen out 559 00:46:25,010 --> 00:46:28,920 Programa ari gara, korrika buggy1, argumentua kaixo, 560 00:46:28,920 --> 00:46:32,720 eta hau estandarra bistaratzen du; dio, "D bat lortu ahal izango dituzu," triste aurpegia. 561 00:46:32,720 --> 00:46:37,610 Baina ez dugu errua seg. Prozesu hori amaitu da normalean, esan du. 562 00:46:37,610 --> 00:46:39,900 Beraz, itxura nahiko ona da. 563 00:46:39,900 --> 00:46:43,050 Errua seg No, iraganean egin genuen, 564 00:46:43,050 --> 00:46:48,190 horrela izan zen, hain zuzen ere, atsegin seg errua bug gara begira. 565 00:46:48,190 --> 00:46:51,540 Zoritxarrez, kontatzen digu ari gara D. bat eskuratzerakoan 566 00:46:51,540 --> 00:46:54,090 >> Itzuliko gara eta begiratu kodea ikusi eta zer izan zen han gertatzen ari 567 00:46:54,090 --> 00:46:57,980 out irudikatu zer zen zergatik zen kontatzea lortu dugu D. 568 00:46:57,980 --> 00:47:03,690 Ikus dezagun, hemen zen printf lortu D. bat esaten 569 00:47:03,690 --> 00:47:08,540 Zerrenda idatzi dugu bada, mantendu idazten zerrenda, errepikatzean zure programaren bidez jarraitzen du, 570 00:47:08,540 --> 00:47:10,940 beraz, erakutsiko dizu izango zure programaren lehen lerro batzuk. 571 00:47:10,940 --> 00:47:15,450 Ondoren erakutsiko dizu dugu hurrengo lerro gutxitan, eta hurrengo zatia eta hurrengo zatia. 572 00:47:15,450 --> 00:47:18,240 Eta jaisten saiatzen dugu. 573 00:47:18,240 --> 00:47:21,180 Eta orain "lerro kopurua 16 barrutitik kanpo dago." Dugu 574 00:47:21,180 --> 00:47:23,940 Bakarrik duelako 15 lerro. 575 00:47:23,940 --> 00:47:30,310 Puntu honetan lortzen bada, eta, galdetzen "Zer egin dezaket?" Laguntza komandoa erabili ahal izango duzu. 576 00:47:30,310 --> 00:47:34,340 Erabili laguntzeko, eta, ondoren, komando baten izena eman. 577 00:47:34,340 --> 00:47:36,460 Eta GDB ematen digu, stuff sort hori guztia ikusiko duzu. 578 00:47:36,460 --> 00:47:43,870 , Dio, "argumentu gabe, hamar gehiago edo ondoren inguruan aurreko listing ildoak zerrendatzen dira. 579 00:47:43,870 --> 00:47:47,920 Zerrenda - zerrendak hamar lerro baino lehen " 580 00:47:47,920 --> 00:47:52,960 Hargatik saiatu zerrenda ken erabiliz. 581 00:47:52,960 --> 00:47:57,000 Eta hori aurreko 10 lerro zerrendatzen; inguruan play dezakezu zerrenda pixka bat. 582 00:47:57,000 --> 00:48:02,330 Zerrendan, zerrenda egin dezakezu, baita eman zerrendara zenbaki bat, zerrenda 8 atsegin, 583 00:48:02,330 --> 00:48:07,500 eta 10 lerro lerro 8 inguruan zerrenda izango da. 584 00:48:07,500 --> 00:48:10,290 Ikusi eta zer gertatzen da hemen dezakezu da lortu duzun sinple bat bestela,. 585 00:48:10,290 --> 00:48:13,980 CS50 arroka idazten baduzu, bistaratzen "A. bat lortu ahal izango dituzu" 586 00:48:13,980 --> 00:48:16,530 Bestela bistaratzen da "D. bat lortu ahal izango dituzu" 587 00:48:16,530 --> 00:48:23,770 Bummer herri. Guztiak eskubidea. Bai? 588 00:48:23,770 --> 00:48:26,730 >> [Daniel] CS50 arroka komatxorik gabe egiten saiatu nintzen, 589 00:48:26,730 --> 00:48:29,290 "D. bat lortu ahal izango dituzu", dio 590 00:48:29,290 --> 00:48:32,560 Komatxorik behar nuen lanean, zergatik da hori? 591 00:48:32,560 --> 00:48:38,490 >> Bai. Bihurtzen da hori - hau da beste apur tidbit fun - 592 00:48:38,490 --> 00:48:47,900 programa exekutatzen duzunean, exekutatu badugu eta idatzi dugu CS50 arroka, 593 00:48:47,900 --> 00:48:50,800 bezala Daniel zuen esaten, eta Sartu sakatu duzu, 594 00:48:50,800 --> 00:48:52,870 dio, hala ere, D. bat lortu dugu 595 00:48:52,870 --> 00:48:55,580 Eta galdera da, zergatik da hau? 596 00:48:55,580 --> 00:49:02,120 Eta bihurtzen da, bai gure terminal eta GDB analizatu horiek bi argumentuak independente gisa. 597 00:49:02,120 --> 00:49:04,800 Ez den espazio bat, engaiatuko gisa delako 598 00:49:04,800 --> 00:49:08,730 Lehen argumentua amaitu; Hurrengo argumentua hasiko da. 599 00:49:08,730 --> 00:49:13,260 Bi horiek konbinatzeko, edo barkatu, argumentu bat sartu, 600 00:49:13,260 --> 00:49:18,510 komatxorik erabili da. 601 00:49:18,510 --> 00:49:29,560 Beraz, gaur egun, jarri badugu komatxo artean, eta berriro exekutatu, A. bat lortuko dugu 602 00:49:29,560 --> 00:49:38,780 Beraz, laburpena, komatxorik gabe, CS50 eta Arroka independente gisa bi argumentuak analizatu. 603 00:49:38,780 --> 00:49:45,320 Komatxorik, argumentu bat guztiz analizatu. 604 00:49:45,320 --> 00:49:53,070 >> Hau etendura bat ikusi ahal izango dugu. 605 00:49:53,070 --> 00:49:54,920 Orain arte izan dugu gure programa exekutatzen ari da, eta izan da exekutatzen ari 606 00:49:54,920 --> 00:49:58,230 , bai matxurak edo hits seg errore bat arte 607 00:49:58,230 --> 00:50:05,930 edo arte gdb irten da, eta guztiak guztiz fina izan da. 608 00:50:05,930 --> 00:50:08,360 Hau ez da zertan gauza lagungarria, batzuetan delako 609 00:50:08,360 --> 00:50:11,840 duzu zure programa errore bat da, baina ez da segmentaziuo hutsegitea eragiten. 610 00:50:11,840 --> 00:50:16,950 Ez da zure programa gelditzeko edo horrelako ezer eragiten. 611 00:50:16,950 --> 00:50:20,730 Gelditzeko GDB lortzeko programa bat amaitzen da jakin 612 00:50:20,730 --> 00:50:23,260 etendura bat ezarri nahi du. 613 00:50:23,260 --> 00:50:26,520 Egin dezakezu bai etendura funtzio-izen bat 614 00:50:26,520 --> 00:50:30,770 edo etendura bat bereziki kode lerro bat ezar dezakezu. 615 00:50:30,770 --> 00:50:34,450 Eten - puntu funtzioa izen ezarri nahi dut, delako erraz gogoratzeko, 616 00:50:34,450 --> 00:50:37,700 eta benetan joan behar izanez gero, eta pixka bat zure iturburu kodea aldatzeko sortu 617 00:50:37,700 --> 00:50:42,020 orduan zure etendura-puntua izango da benetan zure kodea barruan leku berean jarraituko du. 618 00:50:42,020 --> 00:50:44,760 Ari zaren lerro-zenbakiak erabiliz gero, eta lerro-zenbakiak aldatzeko, berriz, 619 00:50:44,760 --> 00:50:51,740 kodea batzuk gehitu edo ezabatu, eta gero zure eten - puntu guztiak erabat izorratu du. 620 00:50:51,740 --> 00:50:58,590 , Ez dut gauza ohikoena bat da funtzio nagusia etendura. 621 00:50:58,590 --> 00:51:05,300 Askotan abiarazi sortu dut GDB, b nagusia idatzi dut, sakatu Sartu, eta hori etendura bat ezarri dugu 622 00:51:05,300 --> 00:51:10,630 funtzioa besterik ez dio, "Pausatu programa bezain laster hasten dira martxan," 623 00:51:10,630 --> 00:51:17,960 eta, era horretan, nire programa exekutatzen dut, esan, CS50 arroka bi argumentuen 624 00:51:17,960 --> 00:51:24,830 eta sakatu Sartu, lortzen funtzio nagusia gelditzen da, eta eskubidea lehen lerroan 625 00:51:24,830 --> 00:51:30,620 eskubidea funtzio aurretik strcmp ebaluatzen. 626 00:51:30,620 --> 00:51:34,940 >> Dut pausatuta geroztik, gaur egun hasteko inguruan mucking eta zer ari den gertatzen ikusten dut 627 00:51:34,940 --> 00:51:40,250 diren aldagai desberdinak pasa nire programa guztiak. 628 00:51:40,250 --> 00:51:43,670 Hemen inprimatu dezaket argc ikusi eta zer ari den gertatzen. 629 00:51:43,670 --> 00:51:50,030 Ikusi argc 3, 3 balio ezberdinak lortu delako bertan. 630 00:51:50,030 --> 00:51:54,060 Got programaren izena, got argumentu lehen eta bigarren argumentua. 631 00:51:54,060 --> 00:52:09,330 Horiek inprimatu ahal izango dugu argv begira [0], argv [1], eta argv [2]. 632 00:52:09,330 --> 00:52:12,030 Beraz, gaur egun ere ikus dezakezu zergatik strcmp dei hori huts egin du, 633 00:52:12,030 --> 00:52:21,650 zatitu dela bi argumentuak bereizi CS50 eta harkaitz ikusten duzulako. 634 00:52:21,650 --> 00:52:27,250 Une honetan, behin etendura duzun hit, zure programaren bidez jarraitzeko urratsa dezakezu 635 00:52:27,250 --> 00:52:32,920 lerroz lerro, zure programa berriro hasten ez bezala. 636 00:52:32,920 --> 00:52:35,520 Beraz, ez baduzu nahi zure programa berriro hasteko eta bakarrik jarraitu hemendik 637 00:52:35,520 --> 00:52:41,970 Jarraitu komandoa erabili ahal izango duzu eta jarraitu programa izango da amaieran. 638 00:52:41,970 --> 00:52:45,010 Just hemen ez bezala. 639 00:52:45,010 --> 00:52:54,880 Hala eta guztiz ere, programa berrabiarazi I, CS50 arroka bada, nire etendura doakizula ikustean, berriro ere, 640 00:52:54,880 --> 00:52:59,670 eta une honetan, ez bada ez dut nahi bakarrik modu guztiak gainerako programaren bidez, 641 00:52:59,670 --> 00:53:08,040 Hurrengo komandoa, n ere I laburtu erabili ahal izango dut. 642 00:53:08,040 --> 00:53:12,960 Eta hau izango da programa line bidez urratsa line. 643 00:53:12,960 --> 00:53:17,530 Beraz, ikusten gauzak exekutatu dezakezu, aldagai-aldaketa, gauzak eguneratuko. 644 00:53:17,530 --> 00:53:21,550 Zein da pretty nice. 645 00:53:21,550 --> 00:53:26,570 Beste cool gauza komandoa bera errepikatuz baizik eta baino gehiago baino gehiago berriz baino gehiago da, 646 00:53:26,570 --> 00:53:30,670 besterik ez duzu hit bada Sartu - Hemen ikusten duzu ez dut ezer idatzi 647 00:53:30,670 --> 00:53:33,780 dut hit balitz Sartu, aurreko komandoa errepikatu egingo da, 648 00:53:33,780 --> 00:53:36,900 edo aurreko GDB komandoa Hori besterik ez dut sartu 649 00:53:36,900 --> 00:53:56,000 Sartu sakatuz gorde ahal izango dut, eta nire kodea line by line bidez hurrats dugu. 650 00:53:56,000 --> 00:53:59,310 Sustatzeko duzu guys ikusteko beste buggy programak baita joan nahi nuke. 651 00:53:59,310 --> 00:54:01,330 Ez dugu denbora horiek guztiak gaur egun atalean. 652 00:54:01,330 --> 00:54:05,890 Iturburu-kodea hor dago, beraz, ikusteko zer ari den gertatzen mota 653 00:54:05,890 --> 00:54:07,730 gero benetan itsatsita eszenak atzean, 654 00:54:07,730 --> 00:54:11,940 baina, gutxienez, lantzeko sortu abiarazteko GDB, 655 00:54:11,940 --> 00:54:13,940 Programa exekutatzen ari da hausten arte, 656 00:54:13,940 --> 00:54:18,260 backtrace lortzean, kalkulatzen Kraskadurari funtzionatzen zer zen, 657 00:54:18,260 --> 00:54:24,450 zer on line izan zen, out inprimatzeko aldakorreko balio batzuk, 658 00:54:24,450 --> 00:54:30,140 besterik ez da, beraz, sentitzen bat lortuko duzu, benetan delako joan aurrera duzu. 659 00:54:30,140 --> 00:54:36,340 Une honetan, irten GDB, irten ez erabiltzen duzun edo, besterik gabe, q goaz. 660 00:54:36,340 --> 00:54:40,460 Zure programa oraindik exekutatzen erdian bada, eta ez da gdb irten, 661 00:54:40,460 --> 00:54:43,510 beti izango da eskatu baduzu, "Ziur zaude irten nahi duzula?" 662 00:54:43,510 --> 00:54:48,770 Sartu sakatzea nahikoa izango bai. 663 00:54:48,770 --> 00:54:55,250 >> Orain hurrengo arazoa dugu, cat programa da begiratu dugu. 664 00:54:55,250 --> 00:54:59,880 Ikusten duzu eta berbideratu hodi labur bada, ikus Tommy programa hau erabiltzen duzu 665 00:54:59,880 --> 00:55:07,540 funtsean irteera fitxategi bat bistaratzen du pantaila. 666 00:55:07,540 --> 00:55:12,660 Beraz, bada cat exekutatu dut, hau da, benetan eraikitako programa bat aparatuaren 667 00:55:12,660 --> 00:55:16,860 eta MACS bada hau egin ahal izango duzu zure Mac on ere, ireki terminal sortu bada. 668 00:55:16,860 --> 00:55:25,630 Eta gure cat, demagun, cp.c, eta sakatu Sartu. 669 00:55:25,630 --> 00:55:29,640 Zer da hau egin zuten, joan gara pixka bat ikusi eta non line ran dugu bada, 670 00:55:29,640 --> 00:55:40,440 edo non, cat komandoa zuena dugu, besterik ez literalki inprimatu cp.c edukiak gure pantailan. 671 00:55:40,440 --> 00:55:44,140 Exekutatu ahal izango dugu berriro eta fitxategiak hainbat bildu dezakezu. 672 00:55:44,140 --> 00:55:49,880 Beraz, cat cp.c egin dezakezu, eta ondoren ere egin ahal izango dugu cat.c fitxategia kateatu 673 00:55:49,880 --> 00:55:53,250 buruz idazten ari gara programa da, 674 00:55:53,250 --> 00:55:58,140 eta bi fitxategiak inprimatzeko izango da berriro gure pantailan atzera. 675 00:55:58,140 --> 00:56:05,490 Beraz korritu dugu pixka bat izanez gero, ikusten dugun, cat cp.c hau, cat.c zuena dugu, 676 00:56:05,490 --> 00:56:17,110 lehen inprimatutakoak cp fitxategia, eta ondoren, azpian, inprimatutakoak cat.c fitxategia behera hemen. 677 00:56:17,110 --> 00:56:19,650 Hau erabili ahal izateko gure oinak bustita lortu dugu. 678 00:56:19,650 --> 00:56:25,930 Play inguruan terminalera simple inprimatzeko, ikusi, nola lan egiten duen. 679 00:56:25,930 --> 00:56:39,170 You guys ireki gedit cat.c, sakatu Sartu, 680 00:56:39,170 --> 00:56:43,760 idazten ari buruzko programa ikusi ahal izango duzu. 681 00:56:43,760 --> 00:56:48,980 Sartu dugu hau nice galdara plaka, beraz, ez dugu denbora out hori guztia idatziz. 682 00:56:48,980 --> 00:56:52,310 Ere egiaztatu dugu argumentu kopurua gainditu sartu 683 00:56:52,310 --> 00:56:56,910 Inprimatzen ditugu erabilera mezu polit bat. 684 00:56:56,910 --> 00:57:00,950 >> Gauza ordena, berriz, Nik atsegin dugu izan buruz hitz egiten da, 685 00:57:00,950 --> 00:57:04,490 ia gihar memoria bezala. 686 00:57:04,490 --> 00:57:07,190 Just gogoratu stuff sort bera egiten jarraitzeko 687 00:57:07,190 --> 00:57:11,310 eta beti inprimatzeko mezua lagungarria nolabaiteko 688 00:57:11,310 --> 00:57:17,670 da, beraz, jendeak jakin nola zure programa exekutatu. 689 00:57:17,670 --> 00:57:21,630 Cat, nahiko erraza da; ari gara hainbat argumentu guztietan barrena joango gara 690 00:57:21,630 --> 00:57:24,300 gure programa pasa ziren, eta inprimatu goaz 691 00:57:24,300 --> 00:57:29,950 beren edukia pantaila bat denbora batean. 692 00:57:29,950 --> 00:57:35,670 Fitxategiak inprimatu pantaila, oso antzeko zerbait egin behar dugu 693 00:57:35,670 --> 00:57:38,120 zer egin dugu galdetegiaren amaieran. 694 00:57:38,120 --> 00:57:45,350 Quiz, kontratatzen programa amaieran, fitxategi bat ireki behar izan genuen, 695 00:57:45,350 --> 00:57:48,490 eta, ondoren, inprimatu izan genuen. 696 00:57:48,490 --> 00:57:54,660 Kasu honetan, fitxategi bat ireki dugu, eta irakurri ordez goaz. 697 00:57:54,660 --> 00:58:00,630 Ondoren, inprimatu ordez, fitxategi batean goaz, pantaila inprimatu goaz. 698 00:58:00,630 --> 00:58:05,830 Beraz egiten duzun printf aurretik pantaila inprimatzean. 699 00:58:05,830 --> 00:58:08,290 Beraz, ez da oso crazy da. 700 00:58:08,290 --> 00:58:12,190 Baina fitxategi bat irakurtzen bitxi mota da. 701 00:58:12,190 --> 00:58:17,300 Bat apur dugu aldi berean. 702 00:58:17,300 --> 00:58:20,560 You guys Joan atzera, zure quiz, 33 arazoa, azken arazo hori bada 703 00:58:20,560 --> 00:58:27,280 lehen lerroan ari gara hemen egin du, fitxategia irekitzeko, zer genuen oso antzekoa da. 704 00:58:27,280 --> 00:58:36,370 Stella Beraz, zer da, esate baterako fitxategi bat ireki dugu lerro horren itxura? 705 00:58:36,370 --> 00:58:47,510 [Stella] Capital FITXATEGIA * file - >> Ados. >> - Da fopen berdinak. >> Yup. 706 00:58:47,510 --> 00:58:55,980 Zein da kasu honetan? Iruzkina da. 707 00:58:55,980 --> 00:59:06,930 >> Iruzkina da? argv [i] eta r? 708 00:59:06,930 --> 00:59:11,300 >> Zehazki. Eskuin. Beraz, Stella erabat eskubidea. 709 00:59:11,300 --> 00:59:13,720 Hau da, zein itxura. 710 00:59:13,720 --> 00:59:19,670 Fitxategia korronte aldagaia lortzeko FITXATEGIA * gorde dugu, beraz, txanoak guztiak, 711 00:59:19,670 --> 00:59:25,720 FITXATEGIA, *, eta aldagai honen izena fitxategia izango da. 712 00:59:25,720 --> 00:59:32,250 Deitu izan dugu, edozein izanda ere gustatuko. Deitu, first_file edo file_i, edozein nahi genuke genezake. 713 00:59:32,250 --> 00:59:37,590 Eta gero, fitxategiaren izena komando-lerroa programa hau pasa zen. 714 00:59:37,590 --> 00:59:44,450 Beraz, hasi gordetzen argv [i] eta, gero, fitxategi hau irekitzeko moduan irakurri dugu. 715 00:59:44,450 --> 00:59:48,100 Orain fitxategia ireki dugu, zer gauza beti egin dugun gogoratu 716 00:59:48,100 --> 00:59:52,230 bakoitzean fitxategi bat ireki dugu? Itxi. 717 00:59:52,230 --> 00:59:57,220 Missy Beraz, nola ez fitxategi bat itxi dugu? 718 00:59:57,220 --> 01:00:01,020 [Missy] fclose (fitxategia) >> fclose (fitxategia). Hain zuzen ere. 719 01:00:01,020 --> 01:00:05,340 Great. Ongi da. Hau begiratzen badiogu iruzkina egin hemen 720 01:00:05,340 --> 01:00:11,940 , dio "Open argv [i], eta bere edukia inprimatu irteera estandarrean." 721 01:00:11,940 --> 01:00:15,460 >> Standard out name bitxi bat da. Irteera estandarrean gure esateko modu bat da 722 01:00:15,460 --> 01:00:22,880 terminalean inprimatu nahi dugu; irteeraren korrontea estandarra inprimatu nahi dugu. 723 01:00:22,880 --> 01:00:26,450 Benetan ahal izango dugu iruzkin hau kentzeko eskubidea hemen. 724 01:00:26,450 --> 01:00:36,480 Kopiatu eta itsatsi hori egin dugu geroztik noa. 725 01:00:36,480 --> 01:00:41,290 Une honetan, gaur egun bit by file bit irakurri dugu. 726 01:00:41,290 --> 01:00:46,300 Fitxategiak irakurtzeko modu pare bat eztabaidatu dugu. 727 01:00:46,300 --> 01:00:51,830 Zein dira zure gogokoetara dira orain arte? 728 01:00:51,830 --> 01:00:57,960 Zein bide edo ikusi ez, gogoratzen duzu fitxategiak irakurtzeko? 729 01:00:57,960 --> 01:01:04,870 [Daniel] fread? >> Fread? Beraz fread bat da. Jimmy, ez beste edozein ezagutzen al duzu? 730 01:01:04,870 --> 01:01:12,150 [Jimmy] n. >> Ados. Laguia. Charlotte? Alexander? Beste edozein? Ongi da. 731 01:01:12,150 --> 01:01:20,740 Beraz, beste batzuk dira fgetc da, asko erabili ahal izango dugu. 732 01:01:20,740 --> 01:01:26,410 Ere fscanf duzu guys eredu bat ikusi hemen? 733 01:01:26,410 --> 01:01:29,170 F hasten. Fitxategi batekin egin ezer. 734 01:01:29,170 --> 01:01:35,260 Ez fread, fgetc, fscanf. Hauek dira irakurtzen funtzio guztiak. 735 01:01:35,260 --> 01:01:49,120 Fwrite idazten ditugu, ordez fgetc fputc dugu. 736 01:01:49,120 --> 01:01:58,250 Era berean, fprintf nahi galdetegiaren ikusi dugu. 737 01:01:58,250 --> 01:02:01,680 Arazo bat egiten duten fitxategi batetik irakurtzen denez, 738 01:02:01,680 --> 01:02:04,940 hiru funtzio hauetako bat erabili dugu. 739 01:02:04,940 --> 01:02:10,890 Ari gara funtzio hauek erabiltzeko behera hemen. 740 01:02:10,890 --> 01:02:14,880 Funtzio horiek guztiak I / O liburutegi estandarrak aurkitu. 741 01:02:14,880 --> 01:02:17,510 Beraz, bada, programa honen goialdean, 742 01:02:17,510 --> 01:02:24,110 ikusi ditudan dugun liburutegi estandarrak I / O fitxategi goiburua dezakezu. 743 01:02:24,110 --> 01:02:27,120 Nahi dugu irudikatu nahi izanez gero bat erabili nahi dugu, 744 01:02:27,120 --> 01:02:29,690 man orriak beti ireki ahal izango dugu. 745 01:02:29,690 --> 01:02:34,350 Beraz, gizon stdio idatzi ahal izango dugu 746 01:02:34,350 --> 01:02:43,180 guztiak irakurri eta sarrera stdio eta irteera funtzioak C. buruz 747 01:02:43,180 --> 01:02:49,870 Eta dagoeneko ikus dezakegu oh, itxura. Fgetc da aipatzea, fputc aipatzea. 748 01:02:49,870 --> 01:02:57,220 Beraz, zulatzeko dezakezu pixka bat eta begiratzen, esan, fgetc 749 01:02:57,220 --> 01:03:00,060 eta bere man orrialdea begiratu. 750 01:03:00,060 --> 01:03:03,430 Ikusi dezakezu doan dela batera beste funtzio sorta bat osoa: 751 01:03:03,430 --> 01:03:12,640 fgetc, fgets, getc, getchar, lortzen, ungetc, eta bere pertsonaiak eta kateak sarrera. 752 01:03:12,640 --> 01:03:19,180 Beraz, hau da nola pertsonaia eta kateak irakurriko dugu sarrera estandarretik fitxategiak 753 01:03:19,180 --> 01:03:21,990 hau da, funtsean, erabiltzaileari. 754 01:03:21,990 --> 01:03:24,780 Eta hori nola egiten dugun C. benetako 755 01:03:24,780 --> 01:03:30,850 Beraz, hau da, ez GetString eta GetChar funtzioak erabiliz 756 01:03:30,850 --> 01:03:36,840 CS50 liburutegia erabiltzen dugula. 757 01:03:36,840 --> 01:03:39,710 Arazo hau konpontzeko modu pare bat egin dugu 758 01:03:39,710 --> 01:03:43,430 beraz, bi modu ezberdinetan egiten duten ikusi ahal izango duzu. 759 01:03:43,430 --> 01:03:48,490 Fread Bi funtzio Daniel aipatu eta fgetc modu ona egin dira. 760 01:03:48,490 --> 01:03:53,790 Fgetc da pixka bat errazagoa dela uste dut, besterik ez duelako, ikusten duzun bezala, 761 01:03:53,790 --> 01:03:59,660 argumentu bat, pertsonaia irakurri nahian ari gara FITXATEGIA * 762 01:03:59,660 --> 01:04:02,740 eta bere bueltan balioa int bat da. 763 01:04:02,740 --> 01:04:05,610 Eta hau da, pixka bat nahasgarria, eskuineko? 764 01:04:05,610 --> 01:04:11,450 >> Karaktere bat delako lortzean ari gara, eta, beraz, zergatik ez du itzulera hau char? 765 01:04:11,450 --> 01:04:18,700 Zaudete zergatik hori ez itzultzeko char edozein ideia? 766 01:04:18,700 --> 01:04:25,510 [Missy erantzun, ulertezinak] >> Bai. Beraz, Missy erabat eskubidea. 767 01:04:25,510 --> 01:04:31,570 ASCII bada, orduan osokoa hau benetako char bat izan badu. 768 01:04:31,570 --> 01:04:33,520 ASCII karaktere bat izan daiteke, eta hori da. 769 01:04:33,520 --> 01:04:36,220 Hori da zehazki zer ari den gertatzen. 770 01:04:36,220 --> 01:04:39,190 Int bat erabiltzen ari gara, besterik gabe, delako gehiago bit du. 771 01:04:39,190 --> 01:04:44,750 Char bat baino handiagoa da; gure karakterra bakarrik 8 bit, gure makina 32-bit byte 1. 772 01:04:44,750 --> 01:04:48,520 Eta int 4 bytes espazioaren merezi du. 773 01:04:48,520 --> 01:04:50,940 Eta bihurtzen da modu bat dela fgetc funtzionatzen du, 774 01:04:50,940 --> 01:04:53,940 joan gara behera man orri hau pixka bat izanez gero, gure laburpena 775 01:04:53,940 --> 01:05:05,000 mugitzeko modu guztiak behera. Bihurtzen da izeneko EOF balio berezi hau erabiltzen dutela. 776 01:05:05,000 --> 01:05:09,640 Funtzioa fgetc itzulera gisa balio konstantea berezi bat da 777 01:05:09,640 --> 01:05:14,570 betiere, fitxategi amaieran hit duzu, edo errore bat lortzen baduzu. 778 01:05:14,570 --> 01:05:18,170 Eta bihurtzen da konparazioak horiek EOF batera egin behar bezala, 779 01:05:18,170 --> 01:05:24,060 int batean informazio kopuru gehigarria duzula izan nahi duzun 780 01:05:24,060 --> 01:05:28,420 char aldagai bat erabiliz aurka. 781 01:05:28,420 --> 01:05:32,130 Nahiz eta fgetc eraginkortasunez fitxategi batetik, karaktere bat lortzeko 782 01:05:32,130 --> 01:05:38,450 da mota int duzu zerbait itzuli dela gogoratu nahi duzun. 783 01:05:38,450 --> 01:05:41,360 Hori esanda, nahiko erraza da. 784 01:05:41,360 --> 01:05:44,960 Karaktere bat ezagutzera emango da, beraz, mantendu egin behar dugu fitxategia eskatuz, 785 01:05:44,960 --> 01:05:48,440 "Give me hurrengo karakterea, eman dit hurrengo karakterea, eman dit hurrengo karakterea," 786 01:05:48,440 --> 01:05:51,400 lerro amaierara iritsi arte. 787 01:05:51,400 --> 01:05:54,730 Eta hori izango da gure fitxategia aldi berean, karaktere bat tira 788 01:05:54,730 --> 01:05:56,250 eta, ondoren, edozein dela ere nahi dugu. 789 01:05:56,250 --> 01:06:00,160 Gorde ahal izango ditugu, gehitu ahal izango dugu kate bat, inprimatu ahal izango dugu. 790 01:06:00,160 --> 01:06:04,630 Egin duten edozein. 791 01:06:04,630 --> 01:06:09,600 >> Atzera zooma handitzea eta atzera egingo gure cat.c programa, 792 01:06:09,600 --> 01:06:16,170 ari gara fgetc erabili nahi izanez gero, 793 01:06:16,170 --> 01:06:21,710 nola izan liteke hurrengo kode lerro hau hurbilduko gara? 794 01:06:21,710 --> 01:06:26,020 Erabili goaz - fread zerbait apur bat desberdinak egingo. 795 01:06:26,020 --> 01:06:32,600 Eta oraingoan, besterik ez ari gara fgetc erabili karaktere bat aldi berean egingo. 796 01:06:32,600 --> 01:06:40,910 Osoa fitxategi bat prozesatzeko, eta agian egin behar dugu? 797 01:06:40,910 --> 01:06:44,030 Zenbat karaktere dira fitxategi batean? 798 01:06:44,030 --> 01:06:47,390 Asko daude. Beraz, nahi ziurrenik bat lortzeko 799 01:06:47,390 --> 01:06:49,860 eta, ondoren, beste bat, eta beste bat, eta beste bat lortzeko. 800 01:06:49,860 --> 01:06:53,330 Nolako algoritmoa erabili dugu uste al duzu? 801 01:06:53,330 --> 01:06:55,470 Zer mota? [Alexander] loop A? >> Zehazki. 802 01:06:55,470 --> 01:06:57,500 Begizta mota batzuk. 803 01:06:57,500 --> 01:07:03,380 Loop A benetan handia da, kasu honetan. 804 01:07:03,380 --> 01:07:08,620 Eta esaten ari zaren bezala, nahi duzun fitxategi osoa zehar begizta bat bezala soinuak, 805 01:07:08,620 --> 01:07:11,820 aldi berean pertsonaia bat eskuratzerakoan. 806 01:07:11,820 --> 01:07:13,850 Edozein zer on dezaketen iradokizun itxura? 807 01:07:13,850 --> 01:07:22,090 [Alexander, ulertezina] 808 01:07:22,090 --> 01:07:30,050 >> Ados, ingelesez tell me zer egin saiatzen ari zaren? [Alexander, ulertezina] 809 01:07:30,050 --> 01:07:36,270 Beraz, kasu honetan, ari gara Fitxategi osoa zehar loop bezala saiatzen soinuak. 810 01:07:36,270 --> 01:07:45,330 [Alexander] Beraz, i > Tamaina -? 811 01:07:45,330 --> 01:07:49,290 Fitxategiaren tamaina uste dut, ezta? Tamaina - we'll idatzi hau atsegin dute. 812 01:07:49,290 --> 01:07:57,470 Fitxategi tamaina oraingoz, i + +. 813 01:07:57,470 --> 01:08:04,610 Beraz, izarrekin bihurtzen da modu honetan daukazu fgetc erabiliz, eta hori berria da, 814 01:08:04,610 --> 01:08:10,460 ez dagoela erraz besterik ez fitxategi baten tamaina 815 01:08:10,460 --> 01:08:16,979 hau "sizeof" eraikitzeko duzula ikusi. 816 01:08:16,979 --> 01:08:20,910 Funtzio hori erabiltzen ditugu fgetc, nolabaiteko ari gara sartuz 817 01:08:20,910 --> 01:08:29,069 berri, funky sintaxia begizta hau, non ordez counter besterik ez oinarrizko bat erabiliz 818 01:08:29,069 --> 01:08:33,920 karaktere karaktere joan, aldi berean karaktere bat zabaltzen dugu, 819 01:08:33,920 --> 01:08:37,120 aldi berean pertsonaia bat, eta ezagutzen dugun Oraindik amaieran 820 01:08:37,120 --> 01:08:41,290 ez da zenbatuko dugu karaktere kopuru jakin bat, 821 01:08:41,290 --> 01:08:49,939 baina izarrekin tira dugu pertsonaia fitxategi pertsonaia amaiera berezia dela. 822 01:08:49,939 --> 01:08:58,689 Beraz, hau egin ahal izango dugu - ch honetan deitzen dut, eta abiarazi dugu 823 01:08:58,689 --> 01:09:08,050 gure lehen deialdian lehen karaktere fitxategia daudelarik. 824 01:09:08,050 --> 01:09:14,979 Zati honetan hemen, beraz, hau da, pertsonaia bat ateratzeko fitxategia 825 01:09:14,979 --> 01:09:20,840 eta gordetzeko aldagaia ch. 826 01:09:20,840 --> 01:09:25,420 Horretan mantendu ari gara lerro amaierara iritsi arte, 827 01:09:25,420 --> 01:09:41,170 for probatzeko karaktere ez EOF karaktere berezi berdina izan dugu. 828 01:09:41,170 --> 01:09:48,750 Eta gero, ch egiten ordez + +, zein litzateke Kontatzailea balioa, 829 01:09:48,750 --> 01:09:52,710 , hala badagokio fitxategia out A, kapital-A, esan irakurri dugu, 830 01:09:52,710 --> 01:09:56,810 ch + + gurekin luke b, eta, ondoren, c eta, ondoren, d genuke. 831 01:09:56,810 --> 01:09:59,310 Hau ez da, argi eta garbi zer nahi dugun. Zer nahi dugu hemen 832 01:09:59,310 --> 01:10:05,830 a bit honetan hurrengo karakterea fitxategia nahi dugu. 833 01:10:05,830 --> 01:10:09,500 >> Beraz, nola liteke hurrengo fitxategia izaera lortuko dugu? 834 01:10:09,500 --> 01:10:13,470 Nola lortuko dugu lehen karaktere fitxategia? 835 01:10:13,470 --> 01:10:17,200 [Student] fgetfile? >> Fgetc, edo, barkatu, erabat eskuineko zinen. 836 01:10:17,200 --> 01:10:20,470 Gaizki idatzitako dut bertan. Beraz, bai. 837 01:10:20,470 --> 01:10:26,240 Hemen ch egiten ordez + +, 838 01:10:26,240 --> 01:10:29,560 fgetc (file) berriro deitu besterik ez ari gara 839 01:10:29,560 --> 01:10:39,180 gordetzeko eta gure ch aldagai berarekin emaitza. 840 01:10:39,180 --> 01:10:43,730 [Student galdera, ulertezina] 841 01:10:43,730 --> 01:10:52,390 >> Hau da, non FITXATEGIA * guys horiek bereziak dira. 842 01:10:52,390 --> 01:10:59,070 Dute lan - irekitzeko lehen - lehen fopen dei hori egin, 843 01:10:59,070 --> 01:11:04,260 * FITXATEGIA eraginkortasunez fitxategiaren hasieran erakuslea gisa balio. 844 01:11:04,260 --> 01:11:12,830 Eta gero, denbora guztietan fgetc deitu, karaktere bat mugitzen fitxategi bidez. 845 01:11:12,830 --> 01:11:23,280 Beraz, beti ere deitzen duzunean, fitxategi-erakuslea zaren incrementing karaktere bat. 846 01:11:23,280 --> 01:11:26,210 Eta berriro fgetc, ari zaren beste pertsonaia bat mugitzen 847 01:11:26,210 --> 01:11:28,910 eta beste pertsonaia bat eta beste pertsonaia bat eta beste pertsonaia bat. 848 01:11:28,910 --> 01:11:32,030 [Ikasleentzako galdera, ulertezina] >> Eta that's - bai. 849 01:11:32,030 --> 01:11:34,810 Magia hau mota da kanpaia azpian. 850 01:11:34,810 --> 01:11:37,930 Mantentzea besterik ez duzu bidez incrementing. 851 01:11:37,930 --> 01:11:46,510 Puntu honetan, gai benetan pertsonaia batekin lan egiten zara. 852 01:11:46,510 --> 01:11:52,150 Orduan, nola liteke hau inprimatu dugu pantailan, orain? 853 01:11:52,150 --> 01:11:58,340 Printf gauza bera baino lehen erabili ahal izango dugu. 854 01:11:58,340 --> 01:12:00,330 Behin seihilekoa guztiak erabiliz. 855 01:12:00,330 --> 01:12:05,450 Printf deitu ahal izango dugu, 856 01:12:05,450 --> 01:12:21,300 eta pertsonaia gainditu ahal izango dugu, besterik gabe. 857 01:12:21,300 --> 01:12:27,430 Egiteko beste modu bat, baizik eta printf erabiliz eta formatu katea Horretarako beharrik baino, 858 01:12:27,430 --> 01:12:29,490 beste funtzio bat ere erabili ahal izango dugu. 859 01:12:29,490 --> 01:12:40,090 Fputc, pertsonaia bat bistaratzen du pantaila erabili ahal izango ditugu, 860 01:12:40,090 --> 01:12:52,580 bada izan ezik, itxura fputc - utzi urruntzeko me pixka bat. 861 01:12:52,580 --> 01:12:56,430 Ikusten dugu zer nice pertsonaia hartzen irakurri dugu fgetc erabiliz, 862 01:12:56,430 --> 01:13:05,100 emateko, baina gero, korronte bat inprimatu behar dugu. 863 01:13:05,100 --> 01:13:11,850 Putchar funtzioa, zuzenean jarriko standard out ere erabili ahal izango dugu. 864 01:13:11,850 --> 01:13:16,070 Beraz, ez dira inprimatzeko erabili ahal izango dugu, aukera desberdinen artean sorta osoa. 865 01:13:16,070 --> 01:13:19,580 I / O liburutegi estandarrak Oraindik dute. 866 01:13:19,580 --> 01:13:25,150 Bakoitzean inprimatu nahi duzun beraz printf, berez, korronte out estandar berezia inprimatzeko, 867 01:13:25,150 --> 01:13:27,910 stdout dela. 868 01:13:27,910 --> 01:13:41,300 Beraz, ezin dugu erreferentzia balioa magia, hemen stdout mota gisa. 869 01:13:41,300 --> 01:13:48,410 Oops. Jarri puntu eta komaz kanpo. 870 01:13:48,410 --> 01:13:52,790 >> Hau da, hemen informazio berria funky asko. 871 01:13:52,790 --> 01:13:58,600 Hau asko oso hizkuntza, eta zentzu hori da kodea 872 01:13:58,600 --> 01:14:05,700 hori modu hau idatzi besterik ez delako garbia da, irakurri, erraz irakurtzen. 873 01:14:05,700 --> 01:14:11,520 Daude hainbat bide egin ahal izateko, hainbat funtzio erabili ahal izango dituzu, 874 01:14:11,520 --> 01:14:14,680 baina berdina jarraitzen Zaindari hauek eta gehiago gorako joera dugu. 875 01:14:14,680 --> 01:14:20,180 Beraz, ez da harritu datozen behin eta berriro atsegin kodea ikusiko duzu. 876 01:14:20,180 --> 01:14:25,690 Guztiak eskubidea. Une honetan, eguneko apurtu behar dugu. 877 01:14:25,690 --> 01:14:31,300 Eskerrik asko etortzeagatik. Eskerrik asko Oraindik duzun online bada ikusteko. Eta ikusiko dugu datorren astean. 878 01:14:31,300 --> 01:14:33,890 [CS50.TV]