1 00:00:00,000 --> 00:00:02,500 [Powered by Google Translate] [Kafli 5 - öruggari] 2 00:00:02,500 --> 00:00:04,690 [Rob Bowden - Harvard University] 3 00:00:04,690 --> 00:00:07,250 [Þetta er CS50. - CS50.TV] 4 00:00:08,990 --> 00:00:14,250 >> Eins og ég sagði í tölvupósti mínum, there ert a einhver fjöldi af hlutur sem þú getur notað 5 00:00:14,250 --> 00:00:17,060 annað en tæki til að raunverulega gera the vandamál setur. 6 00:00:17,060 --> 00:00:19,910 Við mælum með að þú gera það í tækinu bara því þá geta fleiri auðveldlega hjálpað þér 7 00:00:19,910 --> 00:00:22,070 og við vitum hvernig allt er að fara að vinna. 8 00:00:22,070 --> 00:00:26,950 En eins og eitt dæmi um hvar þú getur gert það ef td þú hefur ekki aðgang 9 00:00:26,950 --> 00:00:31,570 við tækið eða þú vilt vinna í miðju Science kjallara - 10 00:00:31,570 --> 00:00:33,090 sem í raun þeir hafa tæki líka - 11 00:00:33,090 --> 00:00:35,150 Ef þú vilt vinna hvar sem er. 12 00:00:35,150 --> 00:00:42,370 Eitt dæmi er hefurðu séð / heyrt um SSH? 13 00:00:44,380 --> 00:00:47,780 SSH er í grundvallaratriðum eins og tengja við eitthvað. 14 00:00:47,780 --> 00:00:51,340 Reyndar, núna er ég SSHed í tækinu. 15 00:00:51,340 --> 00:00:54,290 Ég vinn aldrei beint í tækið. 16 00:00:55,930 --> 00:01:01,060 Hér er tæki, og ef þú lítur niður hér sjá þetta IP tölu. 17 00:01:01,060 --> 00:01:03,650 Ég vinn aldrei í tækinu sjálfu, 18 00:01:03,650 --> 00:01:08,840 Ég kem alltaf yfir til iTerm2 glugga / Terminal glugga. 19 00:01:08,840 --> 00:01:15,910 Þú getur SSH til að þessi IP tölu, ssh jharvard@192.168.129.128. 20 00:01:15,910 --> 00:01:20,390 Ég man að tala mjög auðveldlega því það er svo gott mynstur. 21 00:01:20,390 --> 00:01:24,920 En það mun biðja mig um lykilorðið mitt, og nú er ég í tækið. 22 00:01:24,920 --> 00:01:33,060 Í grundvallaratriðum, á þessum tímapunkti, ef þú opnað upp flugstöðinni inni á tækinu sjálfu, 23 00:01:33,060 --> 00:01:36,350 þetta tengi, en þú vilt nota það, er nákvæmlega það sama 24 00:01:36,350 --> 00:01:40,010 sem tengi ég nota hérna en nú þú ert SSHed. 25 00:01:42,240 --> 00:01:44,920 Þú þarft ekki að SSH til að tækið. 26 00:01:44,920 --> 00:01:52,360 Eitt dæmi um annan stað sem þú gætir SSH til er ég nokkuð viss um að þú ert með sjálfgefið - 27 00:01:52,360 --> 00:01:55,020 Oh. Stærri. 28 00:01:55,020 --> 00:02:01,130 Allt sem þú ættir að sjálfgefið FAS reikninga á FAS netþjónum. 29 00:02:01,130 --> 00:02:06,840 Fyrir mig, myndi ég SSH til rbowden@nice.fas.harvard.edu. 30 00:02:06,840 --> 00:02:11,610 Það er að fara að biðja þig um að í fyrsta skipti, og þú segir já. 31 00:02:11,610 --> 00:02:15,840 Lykilorðið mitt er bara að fara að vera FAS lykilorðið mitt. 32 00:02:15,840 --> 00:02:22,650 Og nú, er ég SSHed til ágætur netþjóna, og ég get gert hvað sem ég vil hér. 33 00:02:22,650 --> 00:02:28,560 A einhver fjöldi af flokkum sem þú getur tekið, eins og 124, eru að fara að fá þig senda efni hingað 34 00:02:28,560 --> 00:02:30,950 að í raun leggja vandamál setur þinn. 35 00:02:30,950 --> 00:02:34,100 En að segja að þú hefur ekki aðgang að tækinu. 36 00:02:34,100 --> 00:02:37,910 Þá er hægt að gera hlutina, eins og hér mun segja - 37 00:02:37,910 --> 00:02:42,160 Þetta er bara hluti okkar spurningum. 38 00:02:42,160 --> 00:02:45,070 Það mun biðja þig um að gera þetta í tækið. 39 00:02:45,070 --> 00:02:47,790 Í stað þess að ég verð bara að gera það á þjóninum. 40 00:02:47,790 --> 00:02:50,560 Ég ætla að renna niður það. 41 00:02:50,560 --> 00:02:55,670 Vandamálið er að fara að vera að þú ert að nota til að nota eitthvað eins og gedit 42 00:02:55,670 --> 00:02:58,160 eða hvað inni í tækinu. 43 00:02:58,160 --> 00:03:01,830 Þú ert ekki að fara að hafa það á FAS miðlara. 44 00:03:01,830 --> 00:03:04,110 Það er allt bara að fara að vera svona texta tengi. 45 00:03:04,110 --> 00:03:09,180 Svo þú getur annaðhvort einn, reyna að læra texta ritil sem þeir hafa. 46 00:03:09,180 --> 00:03:12,130 Þeir hafa Nano. 47 00:03:12,130 --> 00:03:14,990 Nano er yfirleitt mjög auðvelt að nota. 48 00:03:14,990 --> 00:03:19,470 Þú getur notað örvarnar og slá eðlilega. 49 00:03:19,470 --> 00:03:21,250 Svo er það ekki erfitt. 50 00:03:21,250 --> 00:03:24,720 Ef þú vilt fá virkilega fínt þú getur notað EmacsName, 51 00:03:24,720 --> 00:03:29,850 sem ég líklega ætti ekki að hafa opnað vegna þess að ég veit ekki einu sinni hvernig á að loka EmacsName. 52 00:03:29,850 --> 00:03:32,760 Control X, Control C? Já. 53 00:03:32,760 --> 00:03:35,310 Eða þú getur notað vim, sem er það sem ég nota. 54 00:03:35,310 --> 00:03:37,800 Og svo þá eru möguleikar þínir. 55 00:03:37,800 --> 00:03:43,830 Ef þú vilt ekki að gera það, getur þú líka, ef þú lítur á manual.cs50.net-- 56 00:03:43,830 --> 00:03:45,410 Oh. 57 00:03:45,410 --> 00:03:49,920 Á tölvu, getur þú SSH með kítti, 58 00:03:49,920 --> 00:03:51,940 sem þú ert að fara að þurfa að sækja sérstaklega. 59 00:03:51,940 --> 00:03:55,460 Á Mac, getur þú bara sjálfgefið nota Terminal eða þú getur sótt iTerm2, 60 00:03:55,460 --> 00:03:58,490 sem er eins og a ágætur, fínt Terminal. 61 00:03:58,490 --> 00:04:03,780 Ef þú ferð að manual.cs50.net þú munt sjá tengil á Notepad + +, 62 00:04:03,780 --> 00:04:07,120 sem er það sem þú getur notað í tölvu. 63 00:04:07,120 --> 00:04:13,340 Það gerir þér kleift að SFTP úr Notepad + +, sem er í grundvallaratriðum SSH. 64 00:04:13,340 --> 00:04:17,750 Hvað þetta mun leyfa þér að gera er að breyta skrám á staðnum, 65 00:04:17,750 --> 00:04:20,670 og þá alltaf þegar þú vilt spara þá, mun það spara til nice.fas, 66 00:04:20,670 --> 00:04:23,670 þar sem þú getur þá keyrt þá. 67 00:04:23,670 --> 00:04:26,880 Og samsvarandi á Mac er að fara að vera TextWrangler. 68 00:04:26,880 --> 00:04:28,760 Svo gerir það þú gerir það sama. 69 00:04:28,760 --> 00:04:32,800 Það leyfir þér að breyta skrám á staðnum og spara þá til nice.fas, 70 00:04:32,800 --> 00:04:35,730 þar sem þú getur þá keyrt þá. 71 00:04:35,730 --> 00:04:40,400 Svo ef þú ert alltaf fastur án tæki, hefur þú þessa valkosti 72 00:04:40,400 --> 00:04:44,230 til enn gera vandamál setur þinn. 73 00:04:44,230 --> 00:04:48,250 Eina vandamálið er að fara að vera að þú sért ekki að fara að hafa CS50 bókasafn 74 00:04:48,250 --> 00:04:51,580 því nice.fas ekki sjálfgefið að hafa það. 75 00:04:51,580 --> 00:04:55,970 Þú getur annað hvort að sækja CS50 bókasafn - 76 00:04:55,970 --> 00:04:58,470 Ég held ekki að ég þarf að á þessum tímapunkti. 77 00:04:58,470 --> 00:05:03,270 Þú getur annað hvort að sækja CS50 bókasafn og afrita það yfir til nice.fas, 78 00:05:03,270 --> 00:05:07,450 eða ég held að á þessum tímapunkti sem við ekki nota það aftur hvort eð er. 79 00:05:07,450 --> 00:05:12,720 Eða ef við gerum, getur þú um sinn skipta um það með 80 00:05:12,720 --> 00:05:18,480 the gerð af hlutverkum í CS50 bókasafn samt. 81 00:05:18,480 --> 00:05:21,370 Svo það ætti ekki að vera mikið takmarkana. 82 00:05:21,370 --> 00:05:23,710 Og það er það. 83 00:05:26,460 --> 00:05:29,820 >> Ég fer aftur í tækið núna, við munum gera allt sem í tækið. 84 00:05:29,820 --> 00:05:37,510 Þegar litið er á hluta okkar spurningum í upphafi, eins og ég sagði í bréfinu mínu, 85 00:05:37,510 --> 00:05:43,620 við verðum að tala um eitt stutt þú varst ætlað að horfa á. 86 00:05:43,620 --> 00:05:51,980 Við höfum Áframsendi & Lagnir og þessar þrjár spurningar. 87 00:05:51,980 --> 00:05:56,070 >> Sem streyma ekki virka eins og skrifa printf sjálfgefið? 88 00:05:56,070 --> 00:05:59,130 Svo á. Hvað er straumur? 89 00:06:06,520 --> 00:06:15,100 A straum er í grundvallaratriðum eins og það er bara - 90 00:06:15,100 --> 00:06:21,450 Það er ekki einu sinni uppspretta 1s og 0s. 91 00:06:21,450 --> 00:06:24,920 The Stream það er að biðja um hér er staðall út. 92 00:06:24,920 --> 00:06:27,250 Og svo staðall út er læk að þegar þú skrifar á það, 93 00:06:27,250 --> 00:06:30,940 það birtist á skjánum. 94 00:06:30,940 --> 00:06:36,860 Standard út með á, þýðir það að þú skrifar bara 1s og 0s henni, 95 00:06:36,860 --> 00:06:40,220 og hinum enda staðall út les bara úr því á. 96 00:06:40,220 --> 00:06:43,540 Það er bara band af 1s og 0s. 97 00:06:43,540 --> 00:06:45,570 Þú getur skrifað læki eða þú getur lesið úr lækjum 98 00:06:45,570 --> 00:06:47,950 eftir hvaða straumi raunverulega er. 99 00:06:47,950 --> 00:06:52,800 Hinir tveir vanræksla vatnsföll eru staðalbúnaður í og ​​staðall villa. 100 00:06:52,800 --> 00:06:57,540 Standard í er þegar þú GetString, það er að bíða eftir þér að inntak efni. 101 00:06:57,540 --> 00:07:01,570 Svo það að bíða eftir þér, það er í raun að bíða eftir staðall í, 102 00:07:01,570 --> 00:07:04,880 sem er í raun það sem þú færð þegar þú skrifar á lyklaborðinu. 103 00:07:04,880 --> 00:07:07,530 Þú ert að slá inn staðall tommu 104 00:07:07,530 --> 00:07:10,050 Standard villa er í grundvallaratriðum jafngildir staðlaða út, 105 00:07:10,050 --> 00:07:13,280 en það er sérhæft sig í að þegar þú hefur prentað út á staðlað villu úttak, 106 00:07:13,280 --> 00:07:16,770 þú ert að ætlast til að aðeins prentað villa skilaboð til að 107 00:07:16,770 --> 00:07:20,200 svo þú getur aðgreint milli reglulegra skilaboð prentuð á skjáinn 108 00:07:20,200 --> 00:07:24,560 móti villa skilaboð eftir því hvort þeir fóru í venjulegt út eða staðalskekkja. 109 00:07:24,560 --> 00:07:28,660 Skrá of. 110 00:07:28,660 --> 00:07:32,440 Standard út staðall og staðall villa eru bara sérstakar læki, 111 00:07:32,440 --> 00:07:36,810 en í raun allir skrá, þegar þú opnar skrá, verður það straum af bæti 112 00:07:36,810 --> 00:07:40,740 þar sem þú getur bara lesið af þeim straumi. 113 00:07:40,740 --> 00:07:47,770 Þú, að mestu leyti, get bara hugsa um skrá sem straum af bæti. 114 00:07:47,770 --> 00:07:51,190 Svo streymir Hvað skrifa þeir við vanræksla? Standard út. 115 00:07:51,190 --> 00:07:56,980 >> Hver er munurinn á milli> og >>? 116 00:07:58,140 --> 00:08:03,710 Var einhver að horfa á vídeó áður? Allt í lagi. 117 00:08:03,710 --> 00:08:10,960 > Er að fara að vera hvernig beina í skrá, 118 00:08:10,960 --> 00:08:15,240 og >> er líka að fara að beina framleiðslu í skrá, 119 00:08:15,240 --> 00:08:17,820 en það er í stað þess að fara að bæta við skrána. 120 00:08:17,820 --> 00:08:23,430 Til dæmis, segjum að við skulum ég átt dict hérna, 121 00:08:23,430 --> 00:08:27,020 og eina efni inni dict er köttur, köttur, hundur, fiskur, hundur. 122 00:08:27,020 --> 00:08:31,530 Ein stjórn sem þú hefur á the stjórn lína er köttur, 123 00:08:31,530 --> 00:08:34,539 sem er bara að fara að prenta það sem er í skránni. 124 00:08:34,539 --> 00:08:40,679 Svo þegar ég segi köttur dict, það er að fara að prenta köttur, köttur, hundur, fiskur, hundur. Það er allt köttur gerir. 125 00:08:40,679 --> 00:08:46,280 Það þýðir að það prentað til staðall út kött, köttur, hundur, fiskur, hundur. 126 00:08:46,280 --> 00:08:53,240 Ef ég vil þess í stað að beina því að skrá, get ég notað> og áframsenda það til hvað skráin er. 127 00:08:53,240 --> 00:08:56,460 Ég hringi í skrá skrá. 128 00:08:56,460 --> 00:09:00,320 Svo nú ef ég LS, ég sjá að ég er með nýja skrá sem heitir skrá. 129 00:09:00,320 --> 00:09:05,700 Og ef ég opna það upp, það er að fara að hafa nákvæmlega hvað köttur setja á stjórn lína. 130 00:09:05,700 --> 00:09:11,040 Svo nú ef ég geri það aftur, þá er það að fara að beina framleiðslu í skrá, 131 00:09:11,040 --> 00:09:13,930 og ég ætla að hafa sama nákvæmlega hlutur. 132 00:09:13,930 --> 00:09:17,910 Svo tæknilega, overrode það alveg það sem við þurftum. 133 00:09:17,910 --> 00:09:22,970 Og við munum sjá hvort ég breyti dict, tók ég út hundur. 134 00:09:22,970 --> 00:09:29,980 Nú ef við köttur dict í skrá aftur, við erum að fara að hafa nýja útgáfu með fjarlægð hundur. 135 00:09:29,980 --> 00:09:32,400 Svo kemur í það alveg það. 136 00:09:32,400 --> 00:09:36,640 Staðinn, ef við notum >>, það er að fara til að bæta skrá. 137 00:09:36,640 --> 00:09:40,860 Nú opna skrá, sjáum við að við höfum bara það sama prentuð tvisvar 138 00:09:40,860 --> 00:09:44,920 vegna þess að það var það einu sinni, þá erum við bætt við upprunalega. 139 00:09:44,920 --> 00:09:48,130 Hvað svo sem er> og >> gera. 140 00:09:48,130 --> 00:09:50,580 Er næsta einn spyrja - Það er ekki að spyrja um það. 141 00:09:50,580 --> 00:09:59,050 >> Hinn sem við höfum er að <, en ef> tilvísanir staðall út, 142 00:09:59,050 --> 00:10:01,970 00:10:12,050 Við skulum sjá hvort við höfum dæmi. 144 00:10:14,750 --> 00:10:16,930 Ég get skrifað einn raunverulegur fljótur. 145 00:10:17,870 --> 00:10:25,700 Við skulum taka hvaða skrá, hello.c. 146 00:10:56,060 --> 00:10:59,070 Tiltölulega einfalt skrá. 147 00:10:59,070 --> 00:11:03,570 Ég ætla bara að fá band og prentun "Halló" hvað strengur ég kom var bara. 148 00:11:03,570 --> 00:11:07,990 Svo gera halló og þá. / Halló. 149 00:11:07,990 --> 00:11:10,720 Nú það vekur mig til að slá eitthvað, 150 00:11:10,720 --> 00:11:15,070 sem þýðir að það er að bíða eftir hlutum til að koma inn í staðall tommu 151 00:11:15,070 --> 00:11:20,450 Svo inn hvað sem ég vil í staðall inn Við erum bara að fara að segja Halló, Rob! 152 00:11:20,450 --> 00:11:23,310 Þá er prentun staðall út Halló, Rob! 153 00:11:23,310 --> 00:11:28,860 Ef ég geri. / Halló og þá beina, 154 00:11:30,740 --> 00:11:34,310 að nú getur þú bara sent úr skrá. 155 00:11:34,310 --> 00:11:41,720 Svo ef ég setti í sumum skrá, txt, og ég setti Rob, 156 00:11:41,720 --> 00:11:52,300 ef ég hlaupa Halló og síðan beina skrá txt í. / halló, það er að fara að segja Halló, Rob! strax. 157 00:11:52,300 --> 00:11:57,160 Þegar það gerist fyrst GetString og það er að bíða á lífskjörum í, 158 00:11:57,160 --> 00:12:01,730 staðalbúnaður í er ekki lengur að bíða á lyklaborðinu fyrir gögn til að fá gert. 159 00:12:01,730 --> 00:12:05,980 Þess í stað höfum við vísað staðall til að lesa úr skrá txt. 160 00:12:05,980 --> 00:12:10,290 Og svo er að fara að lesa úr skrá txt, sem er bara línu Rob, 161 00:12:10,290 --> 00:12:13,380 og þá það er að fara að prenta Hello, Rob! 162 00:12:13,380 --> 00:12:18,180 Og ef ég vildi, gæti ég líka að gera. / Halló 00:12:21,500 og þá staðall út að það er prentun, sem er Halló, Rob!, 164 00:12:21,500 --> 00:12:24,700 Ég get sent það í eigin skrá sína. 165 00:12:24,700 --> 00:12:29,790 Ég verð bara að hringja í skrá Halló - nei, ég mun ekki, því það er executable - txt2. 166 00:12:29,790 --> 00:12:40,150 Nú txt2 er að fara að hafa úttak. / Hello 00:12:43,520 >> Spurningar? 168 00:12:45,900 --> 00:12:49,090 >> Allt í lagi. Svo hér höfum við leiðsla. 169 00:12:49,090 --> 00:12:53,510 Pípur eru síðustu eining utanáskrift. 170 00:12:53,510 --> 00:12:58,750 >> Oh. Ég giska á einn eining utanáskrift er ef í stað þess að> þú 2>, 171 00:12:58,750 --> 00:13:01,070 sem er Áframsendi staðalvillu. 172 00:13:01,070 --> 00:13:06,280 Þannig að ef eitthvað fór í venjulegt villa, myndi það ekki að fá að setja inn txt2. 173 00:13:06,280 --> 00:13:12,480 En taka ef ég 2>, þá er það samt prentun Hello, Rob! til the stjórn lína 174 00:13:12,480 --> 00:13:18,600 vegna þess að ég er bara Áframsendi staðalvillu, ég er ekki Áframsendi staðall út. 175 00:13:18,600 --> 00:13:22,210 Standard villa og staðall út eru öðruvísi. 176 00:13:24,210 --> 00:13:27,080 Ef þú vilja til raunverulega skrifa staðall villa, 177 00:13:27,080 --> 00:13:35,080 þá gæti ég breytt þessu til að vera fprintf til stderr. 178 00:13:35,080 --> 00:13:37,850 Svo printf, við vanræksla, prentar við hefðbundna út. 179 00:13:37,850 --> 00:13:41,720 Ef ég vil prenta staðall villa handvirkt, þá er ég að nota fprintf 180 00:13:41,720 --> 00:13:45,010 og tilgreina það sem ég vil prenta út. 181 00:13:45,010 --> 00:13:49,720 Ef í staðinn ég gerði fprintf stdout, þá er það í rauninni jafngild printf. 182 00:13:49,720 --> 00:13:55,530 En fprintf við hefðbundna villu. 183 00:13:57,790 --> 00:14:03,650 Svo nú, ef ég áframsenda þetta í txt2, Hello, Rob! er enn að fá prentuð á the stjórn lína 184 00:14:03,650 --> 00:14:08,270 þar sem það er að fá prentað á venjulegt villa og ég er bara Áframsendi staðall út. 185 00:14:08,270 --> 00:14:16,420 Ef ég beina nú staðall villa, nú var það ekki fá prentað, og txt2 er að fara að vera Hello, Rob! 186 00:14:16,420 --> 00:14:21,910 Svo nú er hægt að prenta raunverulegum villur til staðall villa 187 00:14:21,910 --> 00:14:24,720 og prenta reglulega skilaboð til staðlaða út. 188 00:14:24,720 --> 00:14:31,420 Og svo þegar þú keyrir forritið, er hægt að keyra það eins og. / Hello þessa tegund með 2> 189 00:14:31,420 --> 00:14:33,800 svo að kerfið þitt er að fara að keyra venjulega, 190 00:14:33,800 --> 00:14:38,400 en allir villa skilaboð sem þú færð þér getur athugað síðar Innskráning villa þinn, 191 00:14:38,400 --> 00:14:44,500 svo villur, og síðan leita seinna og villur skrá mun hafa einhverjar villur sem gerðist. 192 00:14:45,200 --> 00:14:47,540 >> Spurningar? 193 00:14:47,540 --> 00:14:58,070 >> Sú síðasta er pípa, sem hægt er að hugsa um eins og að taka staðalinn út frá einni stjórn 194 00:14:58,070 --> 00:15:01,210 og gera það venjulegt í í næstu stjórn. 195 00:15:01,210 --> 00:15:05,570 Dæmi hér er echo er a stjórn lína hlutur 196 00:15:05,570 --> 00:15:11,840 það er bara að fara að echo hvað sem ég setti sem rök hennar. Ég mun ekki setja tilvitnanir. 197 00:15:11,840 --> 00:15:16,150 Echo bla, bla, bla er bara að fara að prenta bla, bla, bla. 198 00:15:16,150 --> 00:15:20,600 Áður, þegar ég sagði að ég þurfti að setja Rob í txt skrá 199 00:15:20,600 --> 00:15:28,830 því ég get bara sent txt skrá, í stað, / ef ég echo Rob 200 00:15:28,830 --> 00:15:35,520 og þá pípa það inn. / halló, það mun einnig gera the sami tegund af hlutur. 201 00:15:35,520 --> 00:15:39,160 Þetta er að taka framleiðslugetu þessa skipun, echo Rob, 202 00:15:39,160 --> 00:15:43,610 og nota það sem inntak fyrir. / Halló. 203 00:15:44,790 --> 00:15:49,560 Þú getur hugsað um það sem fyrst beina echo Rob í skrá 204 00:15:49,560 --> 00:15:54,160 og síðan inntak í. / Halló þessi skrá sem var bara outputted. 205 00:15:54,160 --> 00:15:57,850 En það tekur tímabundna skrá úr myndinni. 206 00:16:01,890 --> 00:16:04,460 >> Spurningar um það? 207 00:16:04,460 --> 00:16:07,150 >> Næsta spurning er að fara að taka á þessu. 208 00:16:07,150 --> 00:16:15,310 Hvaða leiðsla væri hægt að nota til að finna fjölda einstakra nöfn í skrá sem kallast names.txt? 209 00:16:15,310 --> 00:16:24,160 Skipanir sem við erum að fara til að vilja nota hér eru einstök, svo Uniq og síðan wc. 210 00:16:24,160 --> 00:16:28,840 Þú getur gert mann Uniq í raun líta á það sem það gerir, 211 00:16:28,840 --> 00:16:34,840 og það er bara að fara að sía aðliggjandi samsvarandi línur af inntak. 212 00:16:34,840 --> 00:16:40,690 Og maður wc er að fara að prenta newline, orð og bæti telja fyrir hverja skrá. 213 00:16:40,690 --> 00:16:43,760 Og sá síðasti sem við erum að fara til að vilja nota er tegund, 214 00:16:43,760 --> 00:16:47,410 sem er að fara að bara raða línur txt skrá. 215 00:16:47,410 --> 00:16:58,080 Ef ég gera sumir txt skrá, names.txt, og það er Rob, Tommy, Joseph, Tommy, Joseph, RJ, Rob, 216 00:16:58,080 --> 00:17:03,910 það sem ég vil gera hér er að finna fjölda einstakra nöfn í þessari skrá. 217 00:17:03,910 --> 00:17:08,750 Svo hvað ætti svarið að vera? >> [Nemandi] 4. >> Já. 218 00:17:08,750 --> 00:17:13,780 Það ætti að vera 4 frá Rob, Tommy, Jósef, eru RJ einu einstök nöfn í þessari skrá. 219 00:17:13,780 --> 00:17:20,180 Fyrsta skrefið, ef ég geri bara orð telja á names.txt, 220 00:17:20,180 --> 00:17:24,290 þetta er í raun að segja mér allt. 221 00:17:24,290 --> 00:17:32,560 Þetta er í raun prentun - við skulum sjá, maður wc - newlines, orð og bæti telja. 222 00:17:32,560 --> 00:17:38,270 Ef ég hugsa aðeins um línur, þá get ég bara gert wc-l names.txt. 223 00:17:41,730 --> 00:17:44,300 Svo er það skref 1. 224 00:17:44,300 --> 00:17:50,510 En ég vil ekki að wc-l names.txt því names.txt bara inniheldur öll nöfn, 225 00:17:50,510 --> 00:17:54,170 og ég vil að sía út allir non-einstakt sjálfur. 226 00:17:54,170 --> 00:18:01,200 Svo ef ég Uniq names.txt, sem er ekki alveg að gefa mér það sem ég vil 227 00:18:01,200 --> 00:18:03,760 vegna þess að afrit nöfn eru enn þarna. 228 00:18:03,760 --> 00:18:07,690 Hvers vegna er það? Hvers vegna er Uniq gera ekki það sem ég vil? 229 00:18:07,690 --> 00:18:10,500 [Nemandi] The afrit eru ekki [inaudible] >> Já. 230 00:18:10,500 --> 00:18:16,370 Mundu að maður síðu fyrir Uniq segir sía samliggjandi línur samsvörun. 231 00:18:16,370 --> 00:18:19,680 Þeir eru ekki samliggjandi, þannig að það mun ekki sía þau. 232 00:18:19,680 --> 00:18:31,100 Ef ég raða þeim fyrstu, flokka names.txt er að fara að setja öll afrit línur saman. 233 00:18:31,100 --> 00:18:34,450 Svo nú er tegund names.txt það. 234 00:18:34,450 --> 00:18:40,550 Ég ætla að vilja nota það sem inntak í Uniq, sem er | Uniq. 235 00:18:40,550 --> 00:18:43,390 Það gefur mér Jósef, RJ, Rob, Tommy, 236 00:18:43,390 --> 00:18:49,260 og ég vil nota það sem inntak í wc-l, 237 00:18:49,260 --> 00:18:52,740 sem er að fara að gefa mér 4. 238 00:18:52,740 --> 00:18:56,930 Eins og hér segir, hvaða leiðsla væri hægt að nota? 239 00:18:56,930 --> 00:19:01,390 Þú geta gera a einhver fjöldi af hlutur eins og að nota röð af skipunum 240 00:19:01,390 --> 00:19:05,130 þar sem þú ert að nota framleiðsla frá einum stjórn sem inntak í næstu stjórn. 241 00:19:05,130 --> 00:19:08,780 Þú geta gera a einhver fjöldi af hlutur, fullt af snjöllum hlutum. 242 00:19:08,780 --> 00:19:11,440 >> Spurningar? 243 00:19:12,910 --> 00:19:14,600 Allt í lagi. 244 00:19:14,600 --> 00:19:17,880 Það er það fyrir rör og utanáskrift. 245 00:19:18,370 --> 00:19:24,090 >> Nú erum við að fara á til the raunverulegur efni, kóðun stuff. 246 00:19:24,090 --> 00:19:29,100 Inni í þessu PDF sérðu þessa skipun, 247 00:19:29,100 --> 00:19:32,950 og þú þarft að keyra þessa skipun í tækinu þínu. 248 00:19:36,240 --> 00:19:42,250 wget er skipunin fyrir bara að fá eitthvað af internetinu, í grundvallaratriðum, 249 00:19:42,250 --> 00:19:45,180 svo wget og þetta URL. 250 00:19:45,180 --> 00:19:49,110 Ef þú fórst í þessa slóð í vafranum þínum, það myndi sækja þá skrá. 251 00:19:49,110 --> 00:19:52,510 Ég smellti bara á það, svo það sótt skrána fyrir mig. 252 00:19:52,510 --> 00:19:55,650 En skrifa wget af þessi hlutur inni í flugstöðinni 253 00:19:55,650 --> 00:19:58,620 er bara að fara að sækja hana inn í flugstöðinni. 254 00:19:58,620 --> 00:20:02,750 Ég hef section5.zip, og þú þarft að renna niður section5.zip, 255 00:20:02,750 --> 00:20:06,520 sem er að fara að gefa þér möppu sem heitir section5, 256 00:20:06,520 --> 00:20:11,550 sem er að fara að hafa allar skrár sem við erum að fara að vera með í dag inni í henni. 257 00:20:33,380 --> 00:20:37,710 Eins og skrá nöfn þessara áætlana 'benda, eru þeir dálítið þrjótur, 258 00:20:37,710 --> 00:20:40,990 svo er hlutverk þitt til að reikna út hvers vegna nota gdb. 259 00:20:40,990 --> 00:20:44,560 Þurfa allir þá niður / vita hvernig á að sækja þá 260 00:20:44,560 --> 00:20:47,480 í tæki þeirra? Allt í lagi. 261 00:20:47,480 --> 00:20:56,400 >> Running ./buggy1, mun það segja Sundurliðun kenna (algerlega varpað), 262 00:20:56,400 --> 00:21:00,500 sem hvenær þú færð segfault, er það slæmt. 263 00:21:00,500 --> 00:21:03,810 Undir hvaða kringumstæðum þú færð segfault? 264 00:21:03,810 --> 00:21:08,210 [Nemandi] Dereferencing núll músina. >> Já. Svo er það eitt dæmi. 265 00:21:08,210 --> 00:21:11,580 Dereferencing núll músina sem þú ert að fara að fá segfault. 266 00:21:11,580 --> 00:21:16,720 Hvað segfault þýðir er að þú ert að snerta minni sem þú ættir ekki að vera að snerta. 267 00:21:16,720 --> 00:21:21,350 Svo dereferencing núll bendillinn er að snerta tölu 0, 268 00:21:21,350 --> 00:21:28,060 og í rauninni segja allar tölvur nú á dögum að tölu 0 er minni sem þú ættir ekki að vera að snerta. 269 00:21:28,060 --> 00:21:31,920 Svo er það hvers vegna dereferencing núll árangri músina í að segfault. 270 00:21:31,920 --> 00:21:37,210 Þegar þú skyldir ekki frumstilla bendi, þá er það sorp gildi, 271 00:21:37,210 --> 00:21:41,520 og svo þegar þú reynir að dereference það, að öllum líkindum þú ert að snerta minni 272 00:21:41,520 --> 00:21:43,540 sem er í miðju hvergi. 273 00:21:43,540 --> 00:21:45,650 Ef þú skyldir fá heppinn og sorp gildi 274 00:21:45,650 --> 00:21:48,440 kom til að benda á einhvers staðar á mánudaginn eða eitthvað, 275 00:21:48,440 --> 00:21:50,820 svo þegar þú dereference sem músina sem þú hefur ekki frumstilla, 276 00:21:50,820 --> 00:21:52,730 ekkert mun fara úrskeiðis. 277 00:21:52,730 --> 00:21:55,480 En ef það er að benda á, segja, einhvers staðar á milli stafla og hrúga, 278 00:21:55,480 --> 00:21:59,850 eða það er að benda bara á eitthvað sem hefur ekki verið notuð af forritinu enn, 279 00:21:59,850 --> 00:22:02,240 þá þú ert að snerta minni sem þú ættir ekki að vera að snerta og þú segfault. 280 00:22:02,240 --> 00:22:06,370 Þegar þú skrifar endurkvæma virka og það recurses of oft 281 00:22:06,370 --> 00:22:08,720 og stafla þitt vex of stór og stafla rekst inn í hlutina 282 00:22:08,720 --> 00:22:12,270 að það ætti ekki að rekast á við, þú ert að snerta minni sem þú ættir ekki að vera að snerta, 283 00:22:12,270 --> 00:22:14,810 svo þú segfault. 284 00:22:14,810 --> 00:22:17,010 Það er það sem segfault er. 285 00:22:17,010 --> 00:22:21,810 >> Það er einnig sama ástæða að ef þú hafa a band eins og - 286 00:22:21,810 --> 00:22:23,930 við skulum fara aftur á fyrri áætlun. 287 00:22:23,930 --> 00:22:28,530 Í hello.c--Ég er að fara bara að gera eitthvað annað. 288 00:22:28,530 --> 00:22:33,770 char * s = "Halló heimur!"; 289 00:22:33,770 --> 00:22:42,310 Ef ég nota * s = eitthvað eða s [0] = 'X'; 290 00:22:42,310 --> 00:22:47,290 þannig að halló,. / halló, af hverju kom þessi segfault? 291 00:22:48,410 --> 00:22:51,250 Hvers vegna var þetta segfault? 292 00:22:55,660 --> 00:22:57,890 Hvað myndir þú búist við að gerast? 293 00:22:57,890 --> 00:23:06,640 Ef ég gerði printf ("% s \ n", s), hvað myndir þú búast við að prenta? 294 00:23:06,640 --> 00:23:09,930 [Nemandi] X Halló. >> Já. 295 00:23:09,930 --> 00:23:15,140 Vandamálið er að þegar þú lýsa í band eins og þetta, 296 00:23:15,140 --> 00:23:18,190 s er bendir sem er að fara á mánudaginn, 297 00:23:18,190 --> 00:23:25,880 og hvað er að benda á er þetta band sem er að finna í lesa-eini minni. 298 00:23:25,880 --> 00:23:30,560 Svo bara með nafninu, lesa-eini minni, ættir þú að fá hugmynd 299 00:23:30,560 --> 00:23:33,010 að ef þú reynir að breyta því sem er hægt að lesa aðeins minni, 300 00:23:33,010 --> 00:23:36,670 þú ert að gera eitthvað sem þú ættir ekki að vera að gera við minni og þú segfault. 301 00:23:36,670 --> 00:23:45,360 Þetta er í raun stór munur char * s og char s []. 302 00:23:45,360 --> 00:23:48,790 Svo bleikju s [], nú þetta band er að fara að setja á mánudaginn, 303 00:23:48,790 --> 00:23:53,960 og stafla er ekki að lesa-eini, sem þýðir að það ætti að vinna fullkomlega fínn. 304 00:23:55,500 --> 00:23:57,370 Og það gerir. 305 00:23:57,370 --> 00:24:06,250 Mundu að þegar ég char * s = "Halló heimur!", S sig er á mánudaginn 306 00:24:06,250 --> 00:24:10,390 en s benda til annars staðar, og að eitthvað annað gerist að lesa-eini. 307 00:24:10,390 --> 00:24:15,640 En bleikju s [] er bara eitthvað á mánudaginn. 308 00:24:17,560 --> 00:24:21,760 Svo er það annað dæmi um segfault gerast. 309 00:24:21,760 --> 00:24:27,820 >> Við sáum að ./buggy1 leiddi til segfault. 310 00:24:27,820 --> 00:24:31,810 Fræðilega séð, þá ættir þú ekki að líta á buggy1.c strax. 311 00:24:31,810 --> 00:24:35,170 Þess í stað munum við líta á það í gegnum gdb. 312 00:24:35,170 --> 00:24:37,750 Takið eftir að þegar þú færð Sundurliðun kenna (algerlega varpað), 313 00:24:37,750 --> 00:24:40,850 þú færð þessa skrá hérna sem heitir algerlega. 314 00:24:40,850 --> 00:24:45,200 Ef við LS-L, munum við sjá að algerlega er yfirleitt mjög stór skrá. 315 00:24:45,200 --> 00:24:51,580 Þetta er fjöldi bæti á skrá, svo það lítur út eins og það er 250-eitthvað kílóbæti. 316 00:24:51,580 --> 00:24:56,120 Ástæðan fyrir þessu er að það algerlega sorphaugur í raun er 317 00:24:56,120 --> 00:25:01,410 er þegar program hrun, stöðu minni program 318 00:25:01,410 --> 00:25:05,230 bara fær afrita og líma inn í þessa skrá. 319 00:25:05,230 --> 00:25:07,270 Það verður varpað inn í þessi skrá. 320 00:25:07,270 --> 00:25:13,060 Þetta forrit, á meðan það var í gangi, kom að minni notkun á um 250 kílóbæti, 321 00:25:13,060 --> 00:25:17,040 og svo er það sem fékk varpað inn í þessa skrá. 322 00:25:17,040 --> 00:25:23,630 Nú er hægt að líta á þessi skrá ef við gerum gdb buggy1 kjarna. 323 00:25:23,630 --> 00:25:30,130 Við getum bara gert gdb buggy1, og það verður bara að byrja upp gdb reglulega, 324 00:25:30,130 --> 00:25:33,800 nota buggy1 sem skrá inntak þess. 325 00:25:33,800 --> 00:25:38,260 En ef þú gerir gdb buggy1 kjarna, þá er það sérstaklega að fara að byrja upp GDB 326 00:25:38,260 --> 00:25:40,330 með því að horfa á þessi algerlega skrá. 327 00:25:40,330 --> 00:25:45,560 Og þú að segja buggy1 þýðir gdb veit að það algerlega skrá kemur frá buggy1 program. 328 00:25:45,560 --> 00:25:49,580 Svo gdb buggy1 algerlega er að fara að strax koma okkur 329 00:25:49,580 --> 00:25:52,060 að þar sem kerfið varð að segja. 330 00:25:57,720 --> 00:26:02,340 Við sjáum hér Program slitið með merki 11, skiptingu kenna. 331 00:26:02,340 --> 00:26:10,110 Við koma til að sjá línu samkoma, sem sennilega er ekki mjög gagnlegt. 332 00:26:10,110 --> 00:26:15,360 En ef þú skrifar BT eða rakningarskýrslu, sem er að fara til vera the fall 333 00:26:15,360 --> 00:26:19,430 sem gefur okkur lista yfir núverandi stafla okkar ramma. 334 00:26:19,430 --> 00:26:23,150 Svo aftur keyrslu. Það lítur út eins og við höfum aðeins tvær stakkur ramma. 335 00:26:23,150 --> 00:26:26,310 Í fyrsta lagi er helsta stafla ramma okkar, 336 00:26:26,310 --> 00:26:29,810 og annað er stafla ramma fyrir þessa aðgerð sem við verður að vera í, 337 00:26:29,810 --> 00:26:34,440 sem lítur út eins og við höfum aðeins samkoma kóða fyrir. 338 00:26:34,440 --> 00:26:38,050 Svo við skulum fara aftur til meginvirkni okkar, 339 00:26:38,050 --> 00:26:42,300 og til að gera það sem við getum gert ramma 1, og ég held að við getum líka gert niður, 340 00:26:42,300 --> 00:26:45,160 en ég næstum aldrei að gera niður - eða upp. Já. 341 00:26:45,160 --> 00:26:50,710 Upp og niður. Upp koma þér upp einn stafla ramma, niður færir þig niður stafla ramma. 342 00:26:50,710 --> 00:26:53,240 ÉG hafa tilhneigingu til að aldrei nota það. 343 00:26:53,240 --> 00:26:59,120 Ég bara sérstaklega segja ramma 1, sem er að fara í ramma merkt 1. 344 00:26:59,120 --> 00:27:01,750 Rammi 1 er að fara að koma okkur inn í helstu stafla ramma, 345 00:27:01,750 --> 00:27:05,570 og það segir hér línu af kóða sem við verður að vera á. 346 00:27:05,570 --> 00:27:07,950 Ef við vildum nokkrar fleiri línur af kóða, getum við sagt lista, 347 00:27:07,950 --> 00:27:11,280 og það er að fara að gefa okkur allar línur af kóða í kringum það. 348 00:27:11,280 --> 00:27:13,360 Línan við segfaulted á var 6: 349 00:27:13,360 --> 00:27:17,360 if (strcmp ("CS50 björg", argv [1]) == 0). 350 00:27:17,360 --> 00:27:24,130 Ef það er ekki augljóst enn, hægt að fá það beint frá hér bara með því að hugsa hvers vegna það segfaulted. 351 00:27:24,130 --> 00:27:28,800 En við getum tekið það einu skrefi lengra og segja: "Hvers vegna vildi argv [1] segfault?" 352 00:27:28,800 --> 00:27:38,830 Prenta skulum argv [1], og það lítur út eins og 0x0 það er, sem er null músina. 353 00:27:38,830 --> 00:27:44,750 Við erum strcmping CS50 steina og núll, og svo er að fara að segfault. 354 00:27:44,750 --> 00:27:48,280 Og hvers vegna er argv [1] null? 355 00:27:48,640 --> 00:27:51,280 [Nemandi] Þar sem við ekki gefa það allir stjórn-lína rök. 356 00:27:51,280 --> 00:27:53,390 Já. Við vildum ekki gefa það allir stjórn-lína rök. 357 00:27:53,390 --> 00:27:58,460 Svo ./buggy1 er bara að fara að hafa argv [0] er ./buggy1. 358 00:27:58,460 --> 00:28:02,100 Það er ekki að fara að hafa argv [1], svo það er að fara að segfault. 359 00:28:02,100 --> 00:28:07,450 En ef í stað, ég bara CS50, það er að fara að segja að þú færð D 360 00:28:07,450 --> 00:28:09,950 því það er það sem það er að gera. 361 00:28:09,950 --> 00:28:15,240 Þegar litið er á buggy1.c, það er ætlast til að prenta "Þú færð D" - 362 00:28:15,240 --> 00:28:20,820 Ef argv [1] er ekki "CS50 björg", "Þú færð D", annars "Þú færð A!" 363 00:28:20,820 --> 00:28:25,660 Þannig að ef við viljum að A, við þurfum þetta til að bera saman eins og sannur, 364 00:28:25,660 --> 00:28:28,710 sem þýðir að það jafnast á 0. 365 00:28:28,710 --> 00:28:31,100 Svo argv [1] þarf að vera "CS50 steina". 366 00:28:31,100 --> 00:28:35,660 Ef þú vilt gera það á the stjórn lína, þú þarft að nota \ að flýja rúm. 367 00:28:35,660 --> 00:28:41,690 Svo CS50 \ björg og þú færð a! 368 00:28:41,690 --> 00:28:44,060 Ef þú gera ekki sviga, af hverju virkar þetta ekki? 369 00:28:44,060 --> 00:28:47,190 [Nemandi] Það er tvö mismunandi rök. >> Já. 370 00:28:47,190 --> 00:28:52,540 Argv [1] er að fara að vera CS50 og argv [2] er að fara að vera björg. Allt í lagi. 371 00:28:52,540 --> 00:28:56,470 >> Nú ./buggy2 er að fara að segfault aftur. 372 00:28:56,470 --> 00:29:01,880 Í stað þess að opna það með skrá kjarna þess, munum við bara að opna buggy2 beint, 373 00:29:01,880 --> 00:29:05,000 svo gdb buggy2. 374 00:29:05,000 --> 00:29:09,590 Nú ef við hlaupum bara kerfi okkar, svo það er að fara að segja Program merkið SIGSEGV, 375 00:29:09,590 --> 00:29:15,530 sem er segfault merki, og þetta er þar sem það gerðist að gerast. 376 00:29:15,530 --> 00:29:21,250 Þegar litið er á rakningarskýrslu okkar, sjáum við að við vorum í aðgerðina oh_no, 377 00:29:21,250 --> 00:29:23,900 sem var kallað eftir virka Dinky, sem hét af virka binky, 378 00:29:23,900 --> 00:29:26,460 sem var kölluð helsta. 379 00:29:26,460 --> 00:29:31,680 Við getum einnig séð rök að þessar aðgerðir. 380 00:29:31,680 --> 00:29:34,680 Þau rök að Dinky og binky var 1. 381 00:29:34,680 --> 00:29:44,390 Ef við lista virka oh_no, sjáum við að oh_no er bara að gera bleikju ** S = null; 382 00:29:44,390 --> 00:29:47,410 * S = "Boom"; 383 00:29:47,410 --> 00:29:50,330 Hvers vegna vildi að mistakast? 384 00:29:54,330 --> 00:29:58,380 [Nemandi] Þú getur ekki dereference núll músina? >> Já. 385 00:29:58,380 --> 00:30:06,090 Þetta er bara að segja s er NULL, án tillits til hvort það gerist að vera bleikju **, 386 00:30:06,090 --> 00:30:12,070 sem, eftir því hvernig þú túlka það, gæti það verið vísir að bendi á streng 387 00:30:12,070 --> 00:30:15,550 eða fylki af strengjum. 388 00:30:15,550 --> 00:30:21,430 Það er s er NULL, svo * s er dereferencing núll músina, 389 00:30:21,430 --> 00:30:24,800 og svo þetta er að fara að hrun. 390 00:30:24,800 --> 00:30:27,540 Þetta er einn af þeim hraða leiðir sem þú getur hugsanlega segfault. 391 00:30:27,540 --> 00:30:31,300 Það er bara að lýsa yfir núll músina og strax segfaulting. 392 00:30:31,300 --> 00:30:34,570 Það er það sem oh_no er að gera. 393 00:30:34,570 --> 00:30:43,400 Ef við förum upp einn ramma, þá erum við að fara að fá inn í aðgerð sem kallast oh_no. 394 00:30:43,400 --> 00:30:44,830 Ég þarf að gera það niður. 395 00:30:44,830 --> 00:30:48,610 Ef þú ekki inn skipun og þú högg bara inn aftur, 396 00:30:48,610 --> 00:30:52,350 það verður bara að endurtaka fyrri stjórn sem þú hleypur. 397 00:30:52,350 --> 00:30:56,610 Við erum í ramma 1. 398 00:30:56,610 --> 00:31:04,650 Skráning þessum ramma, sjáum við hér er hlutverk okkar. 399 00:31:04,650 --> 00:31:08,520 Þú getur högg lista aftur, eða þú getur gert lista 20 og það mun listi meira. 400 00:31:08,520 --> 00:31:13,640 Fallið Dinky segir ef ég er 1, þá hátta the oh_no virka, 401 00:31:13,640 --> 00:31:15,960 annars fara á slinky virka. 402 00:31:15,960 --> 00:31:18,700 Og við vitum að ég er 1 því við koma til að sjá þig hér 403 00:31:18,700 --> 00:31:22,560 að Dinky var kallað með rök 1. 404 00:31:22,560 --> 00:31:27,560 Eða þú getur bara prenta ég og það mun segja að ég er 1. 405 00:31:27,560 --> 00:31:33,770 Við erum nú í Dinky, og ef við förum upp annan ramma, við vitum að við munum enda í binky. 406 00:31:33,770 --> 00:31:36,600 Up. Nú erum við í binky. 407 00:31:36,600 --> 00:31:41,340 Skráning þessa aðgerð - listi frá því fyrir helmingur skera mig burt - 408 00:31:41,340 --> 00:31:52,670 það byrjaði eins og ég er 0, þá erum við að fara að kalla það oh_no, annars kalla Dinky. 409 00:31:52,670 --> 00:31:57,000 Við vitum að ég var 1, þannig að það heitir Dinky. 410 00:31:57,000 --> 00:32:05,030 Og nú erum við aftur í aðal og helstu er bara að fara að vera int i = rand ()% 3; 411 00:32:05,030 --> 00:32:08,790 Það er bara að fara að gefa þér handahófi númer sem er annaðhvort 0, 1, eða 2. 412 00:32:08,790 --> 00:32:12,780 Það er að fara að hringja binky við að tala, og það mun skila 0. 413 00:32:12,780 --> 00:32:16,700 Þegar litið er á þetta, 414 00:32:16,700 --> 00:32:19,880 bara ganga í gegnum forritið handvirkt án þess að keyra það strax, 415 00:32:19,880 --> 00:32:25,400 þú vildi setja brjóta lið á Main, sem þýðir að þegar við hlaupa the program 416 00:32:25,400 --> 00:32:31,020 program keyrir upp fyrr en það hits brjóta lið. 417 00:32:31,020 --> 00:32:35,450 Svo keyra forrit, mun það hlaupa og þá mun það högg helstu hlutverk og hætta að birtast. 418 00:32:35,450 --> 00:32:44,700 Nú erum við inni í helstu, og skref eða næsta er að fara að koma okkur í næstu línu af kóða. 419 00:32:44,700 --> 00:32:47,050 Þú getur gert skref eða næsta. 420 00:32:47,050 --> 00:32:51,800 Hitting næst, nú i hefur verið stillt á rand ()% 3, svo við getum prentað gildi i, 421 00:32:51,800 --> 00:32:55,280 og það mun segja að ég er 1. 422 00:32:55,280 --> 00:32:58,110 Nú er það spurning hvort við notum næst eða skref. 423 00:32:58,110 --> 00:33:01,000 Ég giska á það máli í fyrri, en við myndum vilja að nota næst. 424 00:33:01,000 --> 00:33:06,000 Ef við notum skref við stíga inn í aðgerð, sem þýðir líta á the raunverulegur hlutur 425 00:33:06,000 --> 00:33:07,940 sem er að gerast inni í binky. 426 00:33:07,940 --> 00:33:10,510 Ef við notum næst, þá þýðir það að fara yfir aðgerðina 427 00:33:10,510 --> 00:33:14,070 og bara fara í næstu línu af kóða í meginvirkni okkar. 428 00:33:14,070 --> 00:33:17,900 Hérna á þessari línu, ég var á þar sem það sagði rand ()% 3; 429 00:33:17,900 --> 00:33:21,320 ef ég gerði skref, myndi það fara í framkvæmd Rand 430 00:33:21,320 --> 00:33:25,110 og líta á hvað er að gerast þarna, og ég gat stíga gegnum Rand virka. 431 00:33:25,110 --> 00:33:26,920 En ég er alveg sama um Rand virka. 432 00:33:26,920 --> 00:33:30,190 Ég vil bara fara í næstu línu af kóða í helstu, svo ég nota næst. 433 00:33:30,190 --> 00:33:35,800 En nú ég er alveg sama um binky virka, þannig að ég vil að stíga inn í það. 434 00:33:35,800 --> 00:33:37,730 Nú er ég í binky. 435 00:33:37,730 --> 00:33:42,040 Fyrsta lína af kóða er að fara að segja ef (i == 0), ég tek skref, 436 00:33:42,040 --> 00:33:44,930 sjáum við á endanum á Dinky. 437 00:33:44,930 --> 00:33:51,620 Ef við lista það, sjáum við að það athuga sé i = 0. 438 00:33:51,620 --> 00:33:55,470 Ég er ekki jafn 0, svo það fór að annað ástand, 439 00:33:55,470 --> 00:33:59,540 sem er að fara að hringja Dinky (i). 440 00:33:59,540 --> 00:34:04,030 Þú gætir fengið ráðvilltur. 441 00:34:04,030 --> 00:34:07,380 Ef þú horfir bara á þessar línur beint, þú might hugsa ef (i == 0), 442 00:34:07,380 --> 00:34:10,800 allt í lagi, svo ég tók skref og nú er ég á Dinky (i), 443 00:34:10,800 --> 00:34:14,120 þú might hugsa þessi að meina i = 0 eða eitthvað. 444 00:34:14,120 --> 00:34:18,980 Nei, það þýðir bara að það veit að það getur standa beint á línuna Dinky (i). 445 00:34:18,980 --> 00:34:23,300 Þar sem ég er ekki 0, næsta skref er ekki að fara að enda í annað. 446 00:34:23,300 --> 00:34:26,239 Annars er ekki lína og það er að fara að hætta á. 447 00:34:26,239 --> 00:34:31,570 Það er bara að fara að fara í næstu línu og það getur raunverulega framkvæma, sem er Dinky (i). 448 00:34:31,570 --> 00:34:36,090 Stepping í Dinky (i), sjáum við ef (i == 1). 449 00:34:36,090 --> 00:34:42,670 Við vitum i = 1, þannig að þegar við stíga, við vitum að við erum að fara að enda í oh_no 450 00:34:42,670 --> 00:34:46,489 því i = 1 kallar virka oh_no, sem hægt er að flytja, 451 00:34:46,489 --> 00:34:52,969 sem er að fara að setja bleikju ** s = til NÚLL og strax "Boom". 452 00:34:54,270 --> 00:34:59,690 Og þá í raun að líta á framkvæmd buggy2, 453 00:34:59,690 --> 00:35:04,590 þetta er ég bara að fá handahófi númerið - 0, 1, eða 2 - starf binky, 454 00:35:04,590 --> 00:35:10,610 sem ef ég er 0 kallar oh_no, annar kallar það Dinky, sem kemur upp hérna. 455 00:35:10,610 --> 00:35:18,100 Ef ég er 1, kalla oh_no, annars kalla slinky, sem koma upp hér, 456 00:35:18,100 --> 00:35:20,460 ef ég er 2, kalla oh_no. 457 00:35:20,460 --> 00:35:24,720 Ég er ekki einu sinni hugsa það er a vegur - 458 00:35:24,720 --> 00:35:30,030 Hefur einhver séð leið til að gera þetta forrit sem vilja ekki segfault? 459 00:35:30,030 --> 00:35:37,530 Vegna nema ég vantar eitthvað, ef ég er 0, munt þú strax segfault, 460 00:35:37,530 --> 00:35:41,250 annars þú ferð að aðgerð sem ef ég er 1 að segfault, 461 00:35:41,250 --> 00:35:44,540 annað sem þú ferð í aðgerð þar sem ef ég er 2 sem þú segfault. 462 00:35:44,540 --> 00:35:46,810 Svo er sama hvað þú gerir, segfault þér. 463 00:35:46,810 --> 00:35:52,380 >> Ætli eina leiðin til að ákveða að það væri í stað þess að gera bleikju ** S = NULL, 464 00:35:52,380 --> 00:35:55,610 þú gætir malloc pláss fyrir það band. 465 00:35:55,610 --> 00:36:04,230 Við gætum gert malloc (sizeof) - sizeof hvað? 466 00:36:09,910 --> 00:36:15,190 [Nemandi] (char) * 5? >> Er þetta að vera sanngjarnt? 467 00:36:15,190 --> 00:36:21,060 Ég er hrokafullur þetta mun virka ef ég hljóp í raun það, en það er ekki það sem ég er að leita að. 468 00:36:24,400 --> 00:36:32,940 Horfðu á hvaða s. Við skulum bæta við int *, svo int * x. 469 00:36:32,940 --> 00:36:35,600 Ég myndi gera malloc (sizeof (int)). 470 00:36:35,600 --> 00:36:40,490 Eða ef ég vildi fjölda 5, myndi ég gera (sizeof (int) * 5); 471 00:36:40,490 --> 00:36:44,210 Hvað ef ég hef int **? 472 00:36:46,260 --> 00:36:49,140 Hvað myndi ég malloc? 473 00:36:49,140 --> 00:36:53,510 [Nemandi] Stærð músina. >> Já. (Sizeof (int *)); 474 00:36:53,510 --> 00:36:56,960 Sami hlutur hér niðri. 475 00:36:56,960 --> 00:37:01,280 Ég vil (sizeof (char *)); 476 00:37:06,170 --> 00:37:12,840 Þetta er að fara að úthluta pláss fyrir músina sem bendir til "búmm". 477 00:37:12,840 --> 00:37:15,330 Ég þarf ekki að úthluta pláss fyrir "uppsveiflu" sig 478 00:37:15,330 --> 00:37:17,210 vegna þess að þetta er í grundvallaratriðum jafngildir það sem ég sagði áður 479 00:37:17,210 --> 00:37:20,870 á char * x = "Boom". 480 00:37:20,870 --> 00:37:27,950 "Boom" er þegar til. Það gerist að vera til í lesa-eini svæði minni. 481 00:37:27,950 --> 00:37:35,200 En það er nú þegar, sem þýðir þessa línu af kóða, ef s er bleikju **, 482 00:37:35,200 --> 00:37:43,900 þá er * s a char * og þú ert að setja þetta char * að benda á "uppgangs". 483 00:37:43,900 --> 00:37:50,040 Ef ég vildi til að afrita "Boom" í S, þá myndi ég þurfa að úthluta pláss fyrir s. 484 00:37:55,170 --> 00:38:03,900 Ég skal gera * s = malloc (sizeof (char) * 5); 485 00:38:03,900 --> 00:38:06,210 Hvers vegna 5? 486 00:38:06,210 --> 00:38:10,860 Af hverju ekki 4? Það lítur út eins og "Boom" er 4 stafir. >> [Nemandi] The null staf. 487 00:38:10,860 --> 00:38:14,580 Já. Allar strengi eru að fara að þurfa að núll staf. 488 00:38:14,580 --> 00:38:23,590 Nú get ég gert eitthvað eins strcat - Hvað er að virka til að afrita streng? 489 00:38:23,590 --> 00:38:28,520 [Nemandi] cpy? >> Strcpy. 490 00:38:28,520 --> 00:38:32,700 maður strcpy. 491 00:38:36,120 --> 00:38:39,590 Svo strcpy eða strncpy. 492 00:38:39,590 --> 00:38:43,410 strncpy er aðeins öruggari þar sem þú getur tilgreint nákvæmlega hversu margir stafir, 493 00:38:43,410 --> 00:38:46,190 en hér er það skiptir ekki máli vegna þess að við vitum. 494 00:38:46,190 --> 00:38:50,340 Svo strcpy og líta á rökin. 495 00:38:50,340 --> 00:38:53,100 Fyrsta röksemd er áfangastaður okkar. 496 00:38:53,100 --> 00:38:56,770 Seinni rök er uppspretta okkar. 497 00:38:56,770 --> 00:39:10,310 Við ætlum að afrita í * áfangastað okkar s bendillinn "Boom". 498 00:39:10,310 --> 00:39:19,820 Hvers vegna þú vilt kannski að gera þetta með strcpy stað það sem við áttum áður 499 00:39:19,820 --> 00:39:22,800 á * s = "Boom"? 500 00:39:22,800 --> 00:39:28,630 Það er ástæða þú might vilja til að gera þetta, en hvað er það ástæðan? 501 00:39:28,630 --> 00:39:31,940 [Nemandi] Ef þú vilt breyta einhverju í "búmm". >> Já. 502 00:39:31,940 --> 00:39:37,950 Nú get ég gert eitthvað eins og S [0] = 'X'; 503 00:39:37,950 --> 00:39:48,190 því s bendir á vörðu og að rúm á hrúga sem s bendir til 504 00:39:48,190 --> 00:39:52,320 er bendi til fleiri pláss á hrúga, sem geyma "búmm". 505 00:39:52,320 --> 00:39:55,150 Svo þetta eintak af "búmm" er geymd í hrúga. 506 00:39:55,150 --> 00:39:58,780 Það eru tæknilega tvö eintök af "búmm" í kerfinu okkar. 507 00:39:58,780 --> 00:40:03,500 Það er sú fyrsta sem er bara gefið þetta "Boom" band stöðug, 508 00:40:03,500 --> 00:40:09,250 og annað eintak af "búmm", strcpy skapaði afrit af "búmm". 509 00:40:09,250 --> 00:40:13,100 En afrit af "búmm" er geymt á hrúga og hrúga sem þú ert frjáls til að breyta. 510 00:40:13,100 --> 00:40:17,250 Hrúga er ekki að lesa-eini, svo það þýðir að s [0] 511 00:40:17,250 --> 00:40:20,500 er að fara að láta þig breyta gildi "búmm". 512 00:40:20,500 --> 00:40:23,130 Það er að fara að láta þig breyta þeim stafi. 513 00:40:23,130 --> 00:40:26,640 >> Spurningar? 514 00:40:27,740 --> 00:40:29,290 Allt í lagi. 515 00:40:29,290 --> 00:40:35,500 >> Að flytja til buggy3 skulum gdb buggy3. 516 00:40:35,500 --> 00:40:39,840 Við hlaupa bara og við sjáum að við fá segfault. 517 00:40:39,840 --> 00:40:46,550 Ef við aftur keyrslu, þá eru aðeins tvær aðgerðir. 518 00:40:46,550 --> 00:40:52,970 Ef við förum upp í meginvirkni okkar, sjáum við að við segfaulted á þessari línu. 519 00:40:52,970 --> 00:41:00,180 Svo bara horfa á þessa línu, fyrir (INT línu = 0; fgets þetta efni er ekki jafn null; 520 00:41:00,180 --> 00:41:03,770 lína + +). 521 00:41:03,770 --> 00:41:08,010 Fyrri ramminn okkar var kölluð _IO_fgets. 522 00:41:08,010 --> 00:41:10,720 Þú munt sjá að mikið með innbyggðum C aðgerðir, 523 00:41:10,720 --> 00:41:15,350 að þegar þú færð að segfault, það verður mjög Cryptic virka nöfn 524 00:41:15,350 --> 00:41:18,090 eins og þetta _IO_fgets. 525 00:41:18,090 --> 00:41:21,770 En það er að fara að tengja við þessa fgets símtali. 526 00:41:21,770 --> 00:41:25,850 Einhvers staðar inni hér, við erum segfaulting. 527 00:41:25,850 --> 00:41:30,340 Ef við skoðum rök til fgets, getum við prentað biðminni. 528 00:41:30,340 --> 00:41:41,180 Skulum prenta sem - Ó, nei. 529 00:41:48,980 --> 00:41:51,900 Print er ekki að fara að vinna nákvæmlega eins og ég vil það til. 530 00:41:55,460 --> 00:41:58,000 Við skulum líta á the raunverulegur program. 531 00:42:02,200 --> 00:42:09,640 Buffer er eðli array. Það er eðli array af 128 stöfum. 532 00:42:09,640 --> 00:42:14,980 Svo þegar ég segi prenta biðminni, það er að fara að prenta þessa 128 stafi, 533 00:42:14,980 --> 00:42:18,300 sem ég giska á er það er gert ráð fyrir. 534 00:42:18,300 --> 00:42:21,390 Það sem ég var að leita að er að prenta heimilisfang biðminni, 535 00:42:21,390 --> 00:42:23,680 en það er í raun ekki segja mér mikið. 536 00:42:23,680 --> 00:42:30,770 Svo þegar ég koma að segja upp hérna x biðminni, sýnir það mér 0xbffff090, 537 00:42:30,770 --> 00:42:38,690 sem, ef þú manst frá fyrri eða einhverjum tímapunkti, Oxbffff tilhneigingu til að vera stafla-ish svæði. 538 00:42:38,690 --> 00:42:46,020 The stakkur hefur tilhneigingu til að byrja einhvers staðar rétt undir 0xc000. 539 00:42:46,020 --> 00:42:51,890 Bara með því að sjá þessa tölu, ég veit að biðminni er að gerast á mánudaginn. 540 00:42:51,890 --> 00:43:04,500 Ræsa á ný áætlun mína, hlaupa, upp, biðminni við sáum var þessi röð af stöfum 541 00:43:04,500 --> 00:43:06,530 sem eru nánast tilgangslaust. 542 00:43:06,530 --> 00:43:12,270 Þá prentun skrá, það er skrá út? 543 00:43:15,120 --> 00:43:17,310 [Nemandi] null. >> Já. 544 00:43:17,310 --> 00:43:22,610 Skrá er um skrá tegund *, svo það er bendillinn, 545 00:43:22,610 --> 00:43:26,610 og gildi þess bendillinn er null. 546 00:43:26,610 --> 00:43:33,240 Svo fgets er að fara að reyna að lesa úr þeim músina með óbeinum hætti, 547 00:43:33,240 --> 00:43:37,320 en í því skyni að fá aðgang að músina, það hefur til dereference það. 548 00:43:37,320 --> 00:43:40,550 Eða, til að komast það sem það ætti að vera að benda á, það dereferences hana. 549 00:43:40,550 --> 00:43:43,810 Svo það er dereferencing núll músina og það segfaults. 550 00:43:46,600 --> 00:43:48,730 Ég hefði getað endurræst hana þar. 551 00:43:48,730 --> 00:43:52,170 Ef við brot á aðalatriði okkar og keyra, 552 00:43:52,170 --> 00:43:57,320 fyrsta lína af kóða er char * skráarheiti = "nonexistent.txt"; 553 00:43:57,320 --> 00:44:00,870 Það ætti að gefa nokkuð stór vísbending um hvers vegna þetta forrit ekki. 554 00:44:00,870 --> 00:44:06,080 Vélritun næst kemur mér í næstu línu, þar sem ég opna þessa skrá, 555 00:44:06,080 --> 00:44:11,140 og þá fæ ég strax í línu okkar, þar sem þegar ég högg næst, það er að fara að segfault. 556 00:44:11,140 --> 00:44:16,880 Er einhver sem vill til að henda út ástæðu hvers vegna við gætum verið segfaulting? 557 00:44:16,880 --> 00:44:19,130 [Nemandi] Skráin er ekki til. >> Já. 558 00:44:19,130 --> 00:44:22,250 Þetta er ætlað að vera vísbending 559 00:44:22,250 --> 00:44:29,570 að þegar þú ert að opna skrána sem þú þarft að athuga að skrá raunverulega til. 560 00:44:29,570 --> 00:44:31,510 Svo hér, "nonexistent.txt"; 561 00:44:31,510 --> 00:44:34,700 Þegar við fopen skráarheiti fyrir lestur, þurfum við þá að segja 562 00:44:34,700 --> 00:44:45,870 if (skrá == NULL) og segja printf ("Skráin er ekki til!" 563 00:44:45,870 --> 00:44:56,340 eða - enn betra - filename), skila 1; 564 00:44:56,340 --> 00:45:00,300 Svo nú erum við að athuga hvort það er NULL 565 00:45:00,300 --> 00:45:03,930 áður en þeir halda áfram og reyna að lesa úr þeirri skrá. 566 00:45:03,930 --> 00:45:08,800 Við getum endurgerð það bara til að sjá að það virkar. 567 00:45:11,020 --> 00:45:14,970 Ég ætlaði að setja nýja línu. 568 00:45:21,090 --> 00:45:25,290 Svo nú nonexistent.txt er ekki til. 569 00:45:26,890 --> 00:45:30,040 Þú ættir alltaf að leita að þessari tegund af hlutur. 570 00:45:30,040 --> 00:45:33,870 Þú ættir alltaf að athuga hvort fopen skilar NULL. 571 00:45:33,870 --> 00:45:38,170 Þú ættir alltaf að ganga úr skugga um að malloc ekki aftur núll, 572 00:45:38,170 --> 00:45:41,410 eða annað sem þú segfault. 573 00:45:42,200 --> 00:45:45,930 >> Nú buggy4.c. 574 00:45:49,190 --> 00:45:58,440 Gangi. Ég giska á það er að bíða fyrir hjálpina eða hugsanlega óendanlega lykkja. 575 00:45:58,440 --> 00:46:01,870 Já, það er óendanlega lykkja. 576 00:46:01,870 --> 00:46:05,560 Svo buggy4. Það lítur út eins og við erum óendanlega lykkja. 577 00:46:05,560 --> 00:46:12,590 Við getum skemmt á helstu, hlaupa program okkar. 578 00:46:12,590 --> 00:46:20,180 Í gdb, svo lengi sem skammstöfun sem þú notar er ótvíræð 579 00:46:20,180 --> 00:46:23,420 eða sérstakar skammstafanir sem þeir kveða á um þig, 580 00:46:23,420 --> 00:46:29,020 þá er hægt að nota n til að nota næst í stað þess að þurfa að slá út næsta alla leið. 581 00:46:29,020 --> 00:46:33,730 Og núna þegar ég hef högg N einu sinni, get ég bara á Enter til að halda áfram á næsta 582 00:46:33,730 --> 00:46:36,640 stað þess að þurfa að lemja N Enter, n inn, n inn. 583 00:46:36,640 --> 00:46:44,630 Það lítur út eins og ég er í einhvers konar fyrir lykkju sem er stilling array [i] í 0. 584 00:46:44,630 --> 00:46:50,510 Það lítur út eins og ég er aldrei að brjóta út af þessu til hliðar. 585 00:46:50,510 --> 00:46:54,780 Ef ég prenta ég, svo ég er 2, svo ég ætla að fara næst. 586 00:46:54,780 --> 00:46:59,250 Ég prenta ég, ég er 3, þá fer ég næst. 587 00:46:59,250 --> 00:47:05,360 Ég prenta ég og ég er 3. Næst, prenta ég, er i 4. 588 00:47:05,360 --> 00:47:14,520 Reyndar, prenta sizeof (array), svo stærð array er 20. 589 00:47:16,310 --> 00:47:32,870 En það lítur út eins og það er einhver sérstakur gdb stjórn til að fara þangað til eitthvað gerist. 590 00:47:32,870 --> 00:47:37,620 Það er eins og að setja upp ástand á gildi breytu. En ég man ekki hvað það er. 591 00:47:37,620 --> 00:47:44,100 Svo ef við höldum að fara - 592 00:47:44,100 --> 00:47:47,120 Hvað varstu að segja? Hvað gerðir þú koma upp? 593 00:47:47,120 --> 00:47:50,500 [Nemandi] er sýna i bætt - >> Já. Svo sýna að ég get hjálpað. 594 00:47:50,500 --> 00:47:54,530 Ef við sýna bara ég, það mun setja upp hér hvaða gildi ég er 595 00:47:54,530 --> 00:47:56,470 þannig að ég þarf ekki að prenta það út í hvert skipti. 596 00:47:56,470 --> 00:48:02,930 Ef við höldum bara að fara næst, sjáum við 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5. 597 00:48:02,930 --> 00:48:08,530 Eitthvað er að fara hræðilega rangt, og ég er að endurstilla til 0. 598 00:48:13,330 --> 00:48:22,220 Þegar litið er á buggy4.c, sjáum við allt sem gerist er int array [5]; 599 00:48:22,220 --> 00:48:26,200 fyrir (i = 0; i <= sizeof (array), i + +) 600 00:48:26,200 --> 00:48:28,550 array [i] = 0; 601 00:48:28,550 --> 00:48:31,390 Hvað sjáum við að er rangt hérna? 602 00:48:31,390 --> 00:48:39,480 Sem vott, þegar ég var að gera á gdb buggy4 - við skulum brjóta helstu, hlaupa - 603 00:48:39,480 --> 00:48:45,980 Ég gerði prenta sizeof (array) bara til að sjá hvað ástand er þar sem ég ætti að lokum brjótast út. 604 00:48:47,690 --> 00:48:51,100 Hvar er ég? Sagði ég að keyra? 605 00:48:51,100 --> 00:48:54,280 Ég vissi ekki að lýsa enn. 606 00:48:54,280 --> 00:48:58,680 Svo prenta sizeof (array) og það er 20, 607 00:48:58,680 --> 00:49:06,690 sem er gert ráð fyrir því array minn er stærð 5 og það er af 5 heiltölur 608 00:49:06,690 --> 00:49:12,410 þannig að allt sem ætti að vera 5 * sizeof (int) bæti, þar sizeof (int) tilhneigingu til að vera 4. 609 00:49:12,410 --> 00:49:14,780 Svo sizeof (array) 20. 610 00:49:14,780 --> 00:49:17,420 Hvað ætti þetta að vera? 611 00:49:17,420 --> 00:49:21,720 [Nemandi] deilt með sizeof (int). >> Já, / sizeof (int). 612 00:49:21,720 --> 00:49:30,630 Það lítur út eins og það er enn vandamál hér. Ég held að þetta ætti bara að vera < 613 00:49:30,630 --> 00:49:36,960 þar sem það er ansi mikið alltaf 00:49:44,860 Nú skulum hugsa um það hvers vegna þetta var í raun brotin. 615 00:49:44,860 --> 00:49:53,370 Hefur einhver hafa gátur af hverju var ég að endurstilla til 0 gegnum hverja endurtekning á henni? 616 00:50:01,300 --> 00:50:09,350 Það eina inni hér sem er að gerast er að array [i] er stillt á 0. 617 00:50:09,350 --> 00:50:15,350 Svo einhvern veginn, þessi lína af kóða veldur int okkar i að vera stillt á 0. 618 00:50:16,730 --> 00:50:23,130 [Nemandi] Gæti það verið vegna þess að það er að vega þyngra á minni þessa hluta i 619 00:50:23,130 --> 00:50:27,970 þegar það telur að það er næsta þáttur fylki? >> [Bowden] Já. 620 00:50:27,970 --> 00:50:33,880 Þegar við erum að fara út í lok array okkar, 621 00:50:33,880 --> 00:50:39,870 einhvern veginn að rými sem við erum ríkari að vega þyngra gildi i. 622 00:50:39,870 --> 00:50:48,030 Og svo ef við skoðum í buggy4, brjóta helstu Run 623 00:50:48,030 --> 00:50:53,120 skulum prenta heimilisfang i. 624 00:50:53,120 --> 00:50:57,280 Það lítur út eins og það er bffff124. 625 00:50:57,280 --> 00:51:03,930 Nú skulum prenta heimilisfang array [0]. 110. 626 00:51:03,930 --> 00:51:06,290 Hvað um [1]? 114. 627 00:51:06,290 --> 00:51:07,920 [2], 118. 628 00:51:07,920 --> 00:51:14,530 11C, 120. array [5] er bfff124. 629 00:51:14,530 --> 00:51:26,990 Svo array [5] hefur sama heimilisfang og ég, sem þýðir að array [5] er ég. 630 00:51:26,990 --> 00:51:30,720 Ef þeir hafa sama heimilisfang, eru þau það sama. 631 00:51:30,720 --> 00:51:38,410 Svo þegar við setjum array [5] til 0, við erum að setja i í 0. 632 00:51:38,410 --> 00:51:46,070 Og ef þér finnst um þetta í skilmálum á mánudaginn, 633 00:51:46,070 --> 00:51:55,590 int i er lýst fyrst, sem þýðir að ég fær pláss á mánudaginn. 634 00:51:55,590 --> 00:52:04,730 Þá array [5] er úthlutað, svo þá 20 bæti eru úthlutað á mánudaginn. 635 00:52:04,730 --> 00:52:08,400 Svo ég fær úthlutað fyrst, þá eru þessir 20 bytes fá úthlutað. 636 00:52:08,400 --> 00:52:11,400 Svo gerist ég rétt fyrir fylking, 637 00:52:11,400 --> 00:52:19,230 og vegna þess hvernig, eins og ég sagði í síðustu viku, þar sem tæknilega vex stafla niður, 638 00:52:19,230 --> 00:52:28,520 þegar vísitalan í fylki, við erum tryggð að 0 stöðu í fylkinu 639 00:52:28,520 --> 00:52:31,970 alltaf gerist fyrir efstu stöðu í fylking. 640 00:52:31,970 --> 00:52:35,900 Þetta er góður af því hvernig ég dró hana í síðustu viku. 641 00:52:35,900 --> 00:52:42,210 Takið eftir því að neðst við höfum heimilisfang 0 og efst við höfum heimilisfang Max. 642 00:52:42,210 --> 00:52:44,880 The stakkur er alltaf að vaxa niður. 643 00:52:48,100 --> 00:52:53,500 Við skulum segja að við úthluta i. 644 00:52:53,500 --> 00:52:59,680 Við úthluta heiltala i, sem þýðir við skulum bara segja að hér heiltala i fær úthlutað. 645 00:52:59,680 --> 00:53:06,420 Þá erum við að úthluta fjölda okkar 5 heiltölur, sem þýðir að undir því, 646 00:53:06,420 --> 00:53:11,230 þar sem stakkur er að vaxa niður, fá þeir 5 heiltölur úthlutað. 647 00:53:11,230 --> 00:53:15,900 En vegna þess hvernig fylki vinna, erum við að tryggja að fyrsta staða í fylkinu 648 00:53:15,900 --> 00:53:22,260 alltaf hefur heimilisfang minna en seinni hlutur í fylki. 649 00:53:22,260 --> 00:53:28,270 Svo hefur array stöðu 0 alltaf að gerast fyrst í minni, 650 00:53:28,270 --> 00:53:30,700 en array stöðu 1 hefur að gerast eftir það 651 00:53:30,700 --> 00:53:33,310 og fylki stöðu 2 að gerast eftir það, 652 00:53:33,310 --> 00:53:37,900 sem þýðir að staða array 0 myndi gerast einhvers staðar hérna, 653 00:53:37,900 --> 00:53:40,690 array stöðu 1 myndi gerast yfir þessi 654 00:53:40,690 --> 00:53:45,530 því að færa upp þýðir hærri tölur þar sem hámark netfang er upp hér. 655 00:53:45,530 --> 00:53:50,490 Svo array [0] hérna, array [1] hérna, array [2] upp hér, array [3] upp hér. 656 00:53:50,490 --> 00:53:55,620 Taktu eftir hvernig áður en við úthlutað heiltölu i alla leið upp hér, 657 00:53:55,620 --> 00:54:01,040 eins og við flutt lengra og lengra inn í array okkar, við erum að fá nær og nær að heiltala okkar i. 658 00:54:01,040 --> 00:54:07,640 Það gerist bara svo að array [5], sem er ein staða utan array okkar, 659 00:54:07,640 --> 00:54:13,010 er einmitt þar sem heiltala Ég varð að vera úthlutað. 660 00:54:13,010 --> 00:54:16,920 Svo er það málið þar sem við verður að vera hitting pláss á stafla 661 00:54:16,920 --> 00:54:21,680 sem var úthlutað fyrir heiltölu i, og við erum að setja það í 0. 662 00:54:21,680 --> 00:54:26,160 >> Það er hvernig það virkar. Spurningar? Já. 663 00:54:26,160 --> 00:54:30,710 [Nemandi] Aldrei hugur. Allt í lagi. 664 00:54:30,710 --> 00:54:33,090 [Nemandi] Hvernig forðast þér þessar konar villur? 665 00:54:33,090 --> 00:54:41,190 Þessi tegund af villa? Ekki nota C sem tungumál forritun. 666 00:54:41,190 --> 00:54:45,840 Nota tungumál sem hefur array mörk stöðva. 667 00:54:45,840 --> 00:54:55,900 Svo lengi sem þú ert varkár, þú þarft bara að koma í veg fyrir að fara framhjá mörk array þínu. 668 00:54:55,900 --> 00:54:58,300 [Nemandi] Svo hér þegar við fórum framhjá mörk array þínu - 669 00:54:58,300 --> 00:55:01,840 [Bowden] Það er þar sem hlutirnir byrja að fara úrskeiðis. >> [Nemandi] Ó, allt í lagi. 670 00:55:01,840 --> 00:55:05,730 Svo lengi sem þú dvelur í minni úthlutað fyrir array þinn, þú ert fínn. 671 00:55:05,730 --> 00:55:12,400 En C er ekki villa stöðva. Ef ég array [1000], mun það gjarna bara breyta hvað gerist - 672 00:55:12,400 --> 00:55:16,500 Það fer í byrjun fylkisins, þá fer 1000 stöðum eftir og setur það í 0. 673 00:55:16,500 --> 00:55:20,000 Það skiptir ekki gera allir stöðva sem ó, þetta er ekki í raun að hafa 1000 hlutina í það. 674 00:55:20,000 --> 00:55:22,750 1000 er vegur yfir það sem ég ætti að breyta, 675 00:55:22,750 --> 00:55:26,940 en Java eða eitthvað sem þú munt fá array utan marka vísitölu 676 00:55:26,940 --> 00:55:29,820 eða vísitölu út af mörk undantekning. 677 00:55:29,820 --> 00:55:33,950 Það er hvers vegna a einhver fjöldi af meiri tungumál hafa þetta 678 00:55:33,950 --> 00:55:37,340 þar sem ef þú ferð út fyrir mörk í fylkinu, ekki þú 679 00:55:37,340 --> 00:55:40,070 þannig að þú getur ekki breytt hlutum undan þér 680 00:55:40,070 --> 00:55:42,590 og svo hlutirnir fara miklu verri en bara að fá undantekningu 681 00:55:42,590 --> 00:55:44,940 segja að þú fórst út í lok fylkisins. 682 00:55:44,940 --> 00:55:50,970 [Nemandi] Og svo að við höfum bara breytt <= bara > [Bowden] Já. 683 00:55:50,970 --> 00:55:54,800 Það ætti að vera 00:55:59,560 þar sizeof (array) er 20, en við viljum aðeins 5. >> [Nemandi] Rétt. 685 00:55:59,560 --> 00:56:04,060 Fleiri spurningar? Allt í lagi. 686 00:56:04,060 --> 00:56:07,380 >> [Nemandi] Ég er með spurningu. >> Já. 687 00:56:07,380 --> 00:56:16,440 [Nemandi] Hvað er í raun fylki breytu? 688 00:56:16,440 --> 00:56:20,000 [Bowden] Eins hvað er fylki? 689 00:56:20,000 --> 00:56:24,930 Array sjálft er tákn. 690 00:56:24,930 --> 00:56:31,490 Það er bara heimilisfang the byrjun af the 20 bæti sem við erum að vísa. 691 00:56:31,490 --> 00:56:38,070 Þú getur hugsað um það sem bendill, en það er stöðug músina. 692 00:56:38,070 --> 00:56:44,140 Um leið og hlutirnir fá saman, breytu array er ekki til lengur. 693 00:56:44,140 --> 00:56:48,210 [Nemandi] Svo hvernig er það að finna stærð fylkisins? 694 00:56:48,210 --> 00:56:54,130 Stærð fylkisins er átt við stærð sem hindra að þessi tákn vísar til. 695 00:56:54,130 --> 00:57:01,240 Þegar ég gera eitthvað eins og printf ("% p \ n", array); 696 00:57:01,240 --> 00:57:05,140 skulum hlaupa það. 697 00:57:12,960 --> 00:57:15,530 Hvað gerði ég bara rangt? 698 00:57:15,530 --> 00:57:19,220 'Array "Array lýst hér. 699 00:57:20,820 --> 00:57:23,200 Ó, allt hér. 700 00:57:23,200 --> 00:57:31,250 Clang er sniðug, og það gerist að taka eftir að ég lýsti array sem 5 atriði 701 00:57:31,250 --> 00:57:34,540 en ég er að flokkun í stöðu 1000. 702 00:57:34,540 --> 00:57:38,450 Það er hægt að gera það vegna þess að þetta eru bara fastar. 703 00:57:38,450 --> 00:57:43,370 Það getur einungis farið svo langt í að taka eftir því að ég er að fara út fyrir mörk í fylki. 704 00:57:43,370 --> 00:57:46,880 En taka fyrir þegar við átti ég að vera rangt, 705 00:57:46,880 --> 00:57:51,040 það getur ekki hugsanlega að ákvarða hversu mörg gildi ég gæti tekið á, 706 00:57:51,040 --> 00:57:55,540 svo það er ekki hægt að ákveða að ég var að fara út í lok fylkisins. 707 00:57:55,540 --> 00:57:59,430 Það er bara Clang vera snjall. 708 00:57:59,430 --> 00:58:03,340 >> En nú gera buggy4. Svo hvað er ég að gera rangt? 709 00:58:03,340 --> 00:58:05,970 Óbeint lýsa bókasafn virka 'printf ". 710 00:58:05,970 --> 00:58:14,960 Ég ætla að vilja # include . 711 00:58:14,960 --> 00:58:18,710 Allt í lagi. Nú keyra buggy4. 712 00:58:18,710 --> 00:58:24,840 Prentun gildi fylkisins eins og ég gerði hér, prenta það sem bendillinn 713 00:58:24,840 --> 00:58:30,060 prenta eitthvað sem lítur út eins og þetta - bfb8805c - sem er einhver netfang 714 00:58:30,060 --> 00:58:33,450 sem er í stafla-ish svæðinu. 715 00:58:33,450 --> 00:58:41,820 Array sjálft er eins og músina, en það er ekki raunverulegt músina, 716 00:58:41,820 --> 00:58:45,410 síðan reglulega músina við getum breytt. 717 00:58:45,410 --> 00:58:54,700 Array er bara fasti. The 20 blokkir af minni byrja á 0xbfb8805c heimilisfang. 718 00:58:54,700 --> 00:59:09,020 Svo bfb8805c gegnum þetta netfang +20--eða ég giska á -20 - 719 00:59:09,020 --> 00:59:17,400 er allt af minni úthlutað fyrir þetta fylki. 720 00:59:17,400 --> 00:59:20,350 Array er breytu sig ekki geymt hvar. 721 00:59:20,350 --> 00:59:27,660 Þegar þú ert að setja saman, er þýðandi - hönd veifa á það - 722 00:59:27,660 --> 00:59:33,060 en þýðandinn verður bara að nota þar sem það veit array að vera. 723 00:59:33,060 --> 00:59:36,090 Það veit hvar það array byrjar, 724 00:59:36,090 --> 00:59:40,910 og svo það er alltaf hægt að bara gera það með tilliti til uppbóta frá því upphafi. 725 00:59:40,910 --> 00:59:43,960 Það þarf ekki að breyta sjálfu sér að tákna fjölda. 726 00:59:43,960 --> 00:59:53,730 En þegar ég geri eitthvað eins og int * p = array, nú p er bendir sem bendir til þess fjölda, 727 00:59:53,730 --> 00:59:57,830 og nú p raunverulega er til staðar á mánudaginn. 728 00:59:57,830 --> 01:00:01,950 Ég er frjáls til að breyta bls. Ég get gert p = malloc. 729 01:00:01,950 --> 01:00:06,500 Svo það benti upphaflega fylkisins, en nú bendir það til pláss á hrúga. 730 01:00:06,500 --> 01:00:09,620 Ég get ekki gert array = malloc. 731 01:00:09,620 --> 01:00:13,710 Ef Clang er snjall, það mun öskra á mig strax the kylfa. 732 01:00:17,000 --> 01:00:21,430 Reyndar er ég nokkuð viss gcc myndi gera þetta líka. 733 01:00:21,430 --> 01:00:25,010 Svo array type "int [5] 'er ekki framseljanlegur. 734 01:00:25,010 --> 01:00:28,040 Þú getur ekki framselt eitthvað til array tegund 735 01:00:28,040 --> 01:00:30,500 því fylki er bara fasti. 736 01:00:30,500 --> 01:00:34,760 Það er tákn sem tilvísanir þá 20 bæti. Ég get ekki breytt því. 737 01:00:34,760 --> 01:00:37,690 >> [Nemandi] Og hvar er stærð fylkisins geymdar? 738 01:00:37,690 --> 01:00:40,670 [Bowden] Það er ekki geymt hvar. Það er þegar það er að setja saman. 739 01:00:40,670 --> 01:00:46,310 Svo hvar er stærð fylkisins geymdar? 740 01:00:46,310 --> 01:00:51,870 Þú getur aðeins notað sizeof (array) innan virka sem array er lýst sig. 741 01:00:51,870 --> 01:01:03,150 Svo ef ég gera sumir virka, Foo, og ég (int array []) 742 01:01:03,150 --> 01:01:10,450 printf ("% d \ n", sizeof (array)); 743 01:01:10,450 --> 01:01:21,330 og svo niður ég kalla foo (array); 744 01:01:21,330 --> 01:01:24,840 innan þessa virka - við skulum hlaupa það. 745 01:01:34,200 --> 01:01:36,840 Þetta er Clang vera snjall aftur. 746 01:01:36,840 --> 01:01:43,890 Það er að segja mér að sizeof á array virka breytu 747 01:01:43,890 --> 01:01:46,690 mun skila stærð 'int *'. 748 01:01:46,690 --> 01:01:55,150 Þetta væri villa ef það er ekki það sem ég vildi að gerast. 749 01:01:55,150 --> 01:01:58,960 Við skulum í raun slökkva Werror. 750 01:02:14,950 --> 01:02:17,590 Aðvörun. Viðvaranir eru í lagi. 751 01:02:17,590 --> 01:02:19,960 Það mun samt saman eins lengi og það hefur viðvörun. 752 01:02:19,960 --> 01:02:22,910 . / A.out er að fara að prenta 4. 753 01:02:22,910 --> 01:02:28,650 The viðvörun sem var búin til er skýr vísbending um hvað fór úrskeiðis. 754 01:02:28,650 --> 01:02:34,120 Þetta int array er bara að fara að prenta sizeof (int *). 755 01:02:34,120 --> 01:02:39,790 Jafnvel ef ég setja array [5] hér, það er samt bara að fara að prenta sizeof (int *). 756 01:02:39,790 --> 01:02:47,440 Svo um leið og þú að gefa það í aðgerð, greinarmun á milli fylki og ábendingum 757 01:02:47,440 --> 01:02:49,670 er engin. 758 01:02:49,670 --> 01:02:52,640 Þetta gerist að vera fylki sem var lýst á mánudaginn, 759 01:02:52,640 --> 01:02:58,300 en um leið og við fara að gildi, að 0xbf bla, bla, bla í þessa aðgerð, 760 01:02:58,300 --> 01:03:03,350 þá bendir þetta bendi til að fylki á mánudaginn. 761 01:03:03,350 --> 01:03:08,310 Svo þýðir að sizeof aðeins við í aðgerð sem fylki var lýst, 762 01:03:08,310 --> 01:03:11,230 sem þýðir að þegar þú ert að setja saman þessa aðgerð, 763 01:03:11,230 --> 01:03:17,330 þegar Clang fer í gegnum þessa aðgerð, sér það fylki er int fylki af stærð 5. 764 01:03:17,330 --> 01:03:20,640 Svo það sér sizeof (array). Jæja, það er 20. 765 01:03:20,640 --> 01:03:26,440 Það er í raun hvernig sizeof grundvallaratriðum virkar fyrir næstum öllum tilvikum. 766 01:03:26,440 --> 01:03:31,150 Sizeof er ekki fall, það er rekstraraðili. 767 01:03:31,150 --> 01:03:33,570 Þú kalla ekki sizeof virka. 768 01:03:33,570 --> 01:03:38,280 Sizeof (int), sem þýðandi verður bara þýða það að 4. 769 01:03:41,480 --> 01:03:43,700 Fattarðu? Allt í lagi. 770 01:03:43,700 --> 01:03:47,520 >> [Nemandi] Svo er það munurinn sizeof (array) í aðal og foo? 771 01:03:47,520 --> 01:03:52,840 Þetta er vegna þess að við erum að segja sizeof (array), sem er af gerðinni int *, 772 01:03:52,840 --> 01:03:57,120 en fylki niður er hér ekki gerð int *, það er int array. 773 01:03:57,120 --> 01:04:04,540 >> [Nemandi] Þannig að ef þú hefðir breytu í array [] í stað int * fylkisins, 774 01:04:04,540 --> 01:04:09,230 vildi að meina að þú gætir samt breytt array því nú er það bendi? 775 01:04:09,230 --> 01:04:14,250 [Bowden] Eins og þetta? >> [Nemandi] Já. Getur þú breytt array innan virka núna? 776 01:04:14,250 --> 01:04:18,420 [Bowden] Þú getur breytt fjölda í báðum tilvikum. 777 01:04:18,420 --> 01:04:23,130 Í báðum þessum tilvikum sem þú ert frjáls til að segja array [4] = 0. 778 01:04:23,130 --> 01:04:26,590 [Nemandi] En er hægt að gera array benda á eitthvað annað? 779 01:04:26,590 --> 01:04:30,230 [Bowden] Ó. Já. Í báðum tilvikum - >> [nemandi] Já. 780 01:04:30,230 --> 01:04:38,410 [Bowden] Munurinn array [] og int * array, það er enginn. 781 01:04:38,410 --> 01:04:42,570 Þú getur einnig fá sumir fjölvíða fylki hér 782 01:04:42,570 --> 01:04:47,050 fyrir sumir þægilegur setningafræði, en það er samt bara músina. 783 01:04:47,050 --> 01:04:56,400 Þetta þýðir að ég er frjáls til að gera array = malloc (sizeof (int)), og nú benda eitthvað annað. 784 01:04:56,400 --> 01:04:59,610 En bara eins og hvernig þetta virkar að eilífu og alltaf, 785 01:04:59,610 --> 01:05:03,210 breyta þessu fylki með því að gera það benda til að eitthvað annað 786 01:05:03,210 --> 01:05:07,570 ekki breyta array niður hér því það er afrit af rifrildi, 787 01:05:07,570 --> 01:05:10,780 það er ekki músina til að rök. 788 01:05:10,780 --> 01:05:16,070 Og í raun, rétt eins og fleiri vísbending um að það er nákvæmlega sama - 789 01:05:16,070 --> 01:05:21,100 við sáum nú þegar hvað prentun array prentar - 790 01:05:21,100 --> 01:05:31,410 hvað ef við prenta heimilisfang fylkisins eða heimilisfang heimilisfang fylkisins 791 01:05:31,410 --> 01:05:36,290 annað hvort þeirra? 792 01:05:41,770 --> 01:05:45,220 Skulum hunsa þessa. 793 01:05:48,140 --> 01:05:51,660 Allt í lagi. Þetta er allt í lagi. Það er nú í gangi. / A.out. 794 01:05:51,660 --> 01:06:00,220 Prentun array, þá prenta heimilisfang fylkisins, eru það sama. 795 01:06:00,220 --> 01:06:02,870 Array bara er ekki til. 796 01:06:02,870 --> 01:06:08,190 Það veit þegar þú ert prentun array, þú ert prentun á táknið sem er átt við þá 20 bæti. 797 01:06:08,190 --> 01:06:11,940 Prentun veffang fylki, vel, fylki er ekki til. 798 01:06:11,940 --> 01:06:17,200 Það hefur ekki netfang, þannig að hún prentar bara heimilisfang þessara 20 bæti. 799 01:06:20,820 --> 01:06:28,150 Um leið og þú saman niður, eins og í unnin buggy4 þínu. / A.out, 800 01:06:28,150 --> 01:06:30,340 array er engin. 801 01:06:30,340 --> 01:06:33,640 Ábendingum til. Fylki ekki. 802 01:06:34,300 --> 01:06:38,060 Blokkir af minni fulltrúar array til enn, 803 01:06:38,060 --> 01:06:43,270 en breyta array og breytur í þeirri tegund ekki til. 804 01:06:46,260 --> 01:06:50,270 Þeir eru eins og the aðalæð mismunur milli fylki og ábendingum 805 01:06:50,270 --> 01:06:55,590 eru eins fljótt og þú gerir virka símtöl, það er engin munur. 806 01:06:55,590 --> 01:07:00,460 En inni í aðgerð að array sig er lýst, sizeof virkar öðruvísi 807 01:07:00,460 --> 01:07:05,190 þar sem þú ert að prenta stærð blokkir í stað stærðar tegund, 808 01:07:05,190 --> 01:07:08,950 og þú getur ekki breytt því vegna þess að það er tákn. 809 01:07:08,950 --> 01:07:14,370 Prentun þings og veffang hlutur prentar það sama. 810 01:07:14,370 --> 01:07:18,480 Og það er ansi mikið það. 811 01:07:18,480 --> 01:07:20,820 [Nemandi] Gætirðu sagt að einu sinni enn? 812 01:07:21,170 --> 01:07:24,170 Ég gæti hafa misst eitthvað. 813 01:07:24,170 --> 01:07:29,260 Prentun array og heimilisfang array prentar það sama, 814 01:07:29,260 --> 01:07:33,180 en ef þú prenta bendi á móti heimilisfang músina, 815 01:07:33,180 --> 01:07:36,010 sá hlutur prentar heimilisfang sem þú ert að benda á, 816 01:07:36,010 --> 01:07:40,360 hinn prentar veffang bendill á mánudaginn. 817 01:07:40,360 --> 01:07:47,040 Þú getur breytt músina, þú getur ekki breytt fylki tákn. 818 01:07:47,740 --> 01:07:53,270 Og sizeof bendillinn er að fara að prenta stærð það músina tegund. 819 01:07:53,270 --> 01:07:57,470 Svo int * p sizeof (p) er að fara að prenta 4, 820 01:07:57,470 --> 01:08:04,110 en int array [5] prenta sizeof (array) er að fara að prenta 20. 821 01:08:04,110 --> 01:08:07,480 [Nemandi] Svo int array [5] að prenta 20? >> Já. 822 01:08:07,480 --> 01:08:13,300 Þess vegna innan buggy4 þegar það er notað til að vera sizeof (array) 823 01:08:13,300 --> 01:08:16,660 þetta var að gera i <20, sem er ekki það sem við vildum. 824 01:08:16,660 --> 01:08:20,880 Við viljum i <5. >> [Nemandi] lagi. 825 01:08:20,880 --> 01:08:25,569 [Bowden] Og þá eins fljótt og þú byrjar farið í aðgerðir, 826 01:08:25,569 --> 01:08:34,340 Ef við gerðum int * p = array; 827 01:08:34,340 --> 01:08:39,779 inni á þessum eiginleika, getum við í rauninni að nota p og fylkið á nákvæmlega sama hátt, 828 01:08:39,779 --> 01:08:43,710 nema fyrir sizeof vandamál og breyttum vandamál. 829 01:08:43,710 --> 01:08:49,810 En p [0] = 1; er það sama og að segja array [0] = 1; 830 01:08:49,810 --> 01:08:55,600 Og um leið og við segjum foo (array) eða foo (p); 831 01:08:55,600 --> 01:08:59,760 inni á foo virka, þetta er sami hringja tvisvar. 832 01:08:59,760 --> 01:09:03,350 Það er enginn munur á milli þessara tveggja símtala. 833 01:09:07,029 --> 01:09:11,080 >> Allir vel á það? Allt í lagi. 834 01:09:14,620 --> 01:09:17,950 Við höfum 10 mínútur. 835 01:09:17,950 --> 01:09:28,319 >> Við munum reyna að komast í gegnum þetta Typer Hacker áætlun, 836 01:09:28,319 --> 01:09:32,350 þetta vefsvæði, sem kom út á síðasta ári eða eitthvað. 837 01:09:34,149 --> 01:09:41,100 Það er bara að vera eins og þú slærð af handahófi og það prentar út - 838 01:09:41,100 --> 01:09:46,729 Whatever skrá það gerist að hafa hlaðinn er það sem það lítur út eins og þú ert að skrifa. 839 01:09:46,729 --> 01:09:52,069 Það lítur út eins og einhvers konar stýrikerfi kóða. 840 01:09:53,760 --> 01:09:56,890 Það er það sem við viljum framkvæma. 841 01:10:08,560 --> 01:10:11,690 Þú ættir að hafa tvöfaldur executable heitir hacker_typer 842 01:10:11,690 --> 01:10:14,350 sem tekur í einu rifrildi, sem skrá til "spjallþráð tegund." 843 01:10:14,350 --> 01:10:16,480 Keyrir executable að hreinsa skjáinn 844 01:10:16,480 --> 01:10:20,850 og síðan prentað út einn staf úr liðin-í skrá í hvert skipti sem notandi þrýsta á takka. 845 01:10:20,850 --> 01:10:24,990 Svo hvað lykillinn að styðja á, það ætti að henda og í staðinn prenta staf af skrá 846 01:10:24,990 --> 01:10:27,810 það er þau rök. 847 01:10:29,880 --> 01:10:34,350 Ég nokkurn veginn hvað er það sem við erum að fara að þurfa að vita er. 848 01:10:34,350 --> 01:10:36,440 En við viljum að kíkja á termios bókasafn. 849 01:10:36,440 --> 01:10:44,840 Ég hef aldrei notað þetta bókasafn á minni ævi, svo það er mjög lítil tilgangi. 850 01:10:44,840 --> 01:10:48,610 En þetta er að fara að vera bókasafn sem við getum notað til að henda til stafurinn sem þú högg 851 01:10:48,610 --> 01:10:52,390 þegar þú ert að slá inn staðall tommu 852 01:10:56,970 --> 01:11:05,840 Svo hacker_typer.c, og við erum að fara að vilja að # include . 853 01:11:05,840 --> 01:11:12,870 Þegar litið er á manninn síðu í termios - Ég er giska flugstöðinni það er OS eða eitthvað - 854 01:11:12,870 --> 01:11:16,240 Ég veit ekki hvernig á að lesa það. 855 01:11:16,240 --> 01:11:21,040 Þegar litið er á þetta, segir það að fela þessar 2 skrár, þannig að við munum gera það. 856 01:11:37,620 --> 01:11:46,820 >> Fyrstur hlutur fyrstur, viljum við taka í einu rifrildi, sem er skrá við ættum að opna. 857 01:11:46,820 --> 01:11:52,420 Svo hvað vil ég gera? Hvernig athuga ég að sjá að ég er með einn rifrildi? 858 01:11:52,420 --> 01:11:56,480 [Nemandi] Ef argc jafngildir það. >> [Bowden] Já. 859 01:11:56,480 --> 01:12:21,250 Svo ef (argc = 2!) Printf ("Notkun:% s [skrá til að opna]"). 860 01:12:21,250 --> 01:12:32,750 Svo nú ef ég keyrt það án þess að veita annað rök - oh, þarf ég nýja línu - 861 01:12:32,750 --> 01:12:36,240 þú munt sjá að það segir notkun:. / hacker_typer, 862 01:12:36,240 --> 01:12:39,770 og þá seinni röksemd ætti að vera skrá sem ég vil opna. 863 01:12:58,430 --> 01:13:01,260 Nú hvað á ég að gera? 864 01:13:01,260 --> 01:13:08,490 Mig langar að lesa úr þessari skrá. Hvernig les ég úr skrá? 865 01:13:08,490 --> 01:13:11,920 [Nemandi] Þú opnar það fyrst. >> Já. 866 01:13:11,920 --> 01:13:15,010 Svo fopen. Hvað er fopen líta út? 867 01:13:15,010 --> 01:13:22,980 [Nemandi] filename. >> [Bowden] Filename er að fara að vera argv [1]. 868 01:13:22,980 --> 01:13:26,110 [Nemandi] Og svo það sem þú vilt gera við það, svo - >> [Bowden] Já. 869 01:13:26,110 --> 01:13:28,740 Svo ef þú hefur ekki muna, getur þú bara gert mann fopen, 870 01:13:28,740 --> 01:13:32,960 þar sem það er að fara að vera const char * slóð þar sem leið er filename, 871 01:13:32,960 --> 01:13:34,970 const char * ham. 872 01:13:34,970 --> 01:13:38,660 Ef þú skyldir ekki muna hvaða háttur er, þá er hægt að leita að ham. 873 01:13:38,660 --> 01:13:44,660 Inni síður maður, rista karakter er það sem þú getur notað til að leita að hlutum. 874 01:13:44,660 --> 01:13:49,790 Svo ég tegund / ham til að leita að háttur. 875 01:13:49,790 --> 01:13:57,130 N og N er það sem þú getur notað til að hjóla í gegnum the leita leiki. 876 01:13:57,130 --> 01:13:59,800 Hér segir hann þann ham rök benda til streng 877 01:13:59,800 --> 01:14:01,930 byrja með einn af eftirfarandi röð. 878 01:14:01,930 --> 01:14:06,480 Svo r, Skoða texta skrá til að lesa. Það er það sem við viljum gera. 879 01:14:08,930 --> 01:14:13,210 Til að lesa, og ég vil geyma það. 880 01:14:13,210 --> 01:14:18,720 Málið er að fara að vera skrá *. Nú hvað vil ég gera? 881 01:14:18,720 --> 01:14:21,200 Gefðu mér sekúndu. 882 01:14:28,140 --> 01:14:30,430 Allt í lagi. Nú hvað vil ég gera? 883 01:14:30,430 --> 01:14:32,940 [Nemandi] Athugaðu hvort það er NULL. >> [Bowden] Já. 884 01:14:32,940 --> 01:14:38,690 Í hvert sinn sem þú opnar skrá, ganga úr skugga um að þú ert vel fær um að opna hana. 885 01:14:58,930 --> 01:15:10,460 >> Nú vil ég gera það termios efni þar sem ég vil fyrst að lesa núverandi mínar stillingar 886 01:15:10,460 --> 01:15:14,050 og vista þau í eitthvað, þá vil ég að breyta stillingum mínum 887 01:15:14,050 --> 01:15:19,420 að henda hvaða staf sem ég pikka, 888 01:15:19,420 --> 01:15:22,520 og þá vil ég að uppfæra þessar stillingar. 889 01:15:22,520 --> 01:15:27,250 Og svo í lok áætlunarinnar, vil ég að breyta aftur yfir í upphaflegar stillingar minn. 890 01:15:27,250 --> 01:15:32,080 Svo strúktúr er að fara að vera termios tegund, og ég ætla að fara að vilja tvö af þeim. 891 01:15:32,080 --> 01:15:35,600 Sú fyrsta er að fara að vera current_settings mín, 892 01:15:35,600 --> 01:15:42,010 og hann ætlar að vera hacker_settings mín. 893 01:15:42,010 --> 01:15:48,070 Fyrst ætla ég að fara til að vilja vista mínar stillingar, 894 01:15:48,070 --> 01:15:53,790 þá er ég að fara til að vilja endurnýja hacker_settings, 895 01:15:53,790 --> 01:16:01,570 og þá leið í lok áætlun mína, vil ég snúa við núverandi stillingar. 896 01:16:01,570 --> 01:16:08,660 Svo vista núverandi stillingar, leið sem virkar, við maður termios. 897 01:16:08,660 --> 01:16:15,810 Við sjáum að við höfum þetta int tcsetattr, int tcgetattr. 898 01:16:15,810 --> 01:16:22,960 Ég fara í termios strúktúr með músina sína. 899 01:16:22,960 --> 01:16:30,640 Leiðin þetta mun líta út - I've þegar gleymt hvað fall var kallað. 900 01:16:30,640 --> 01:16:34,930 Afrita og líma það. 901 01:16:39,150 --> 01:16:45,500 Svo tcgetattr, þá vil ég fara í strúktúr sem ég er að vista upplýsingar í, 902 01:16:45,500 --> 01:16:49,650 sem er að fara að vera current_settings, 903 01:16:49,650 --> 01:16:59,120 og fyrsta rifrildi er skrá lýsing á sem ég vil vista eiginleika. 904 01:16:59,120 --> 01:17:04,360 Hvaða skrá lýsing er er eins og hvenær þú opnar skrá, fær það skrá lýsing. 905 01:17:04,360 --> 01:17:14,560 Þegar ég fopen argv [1], fær það skrá lýsing sem þú ert að vísa 906 01:17:14,560 --> 01:17:16,730 þegar þú vilt lesa eða skrifa á það. 907 01:17:16,730 --> 01:17:19,220 Það er ekki skrá lýsing sem ég vil nota hérna. 908 01:17:19,220 --> 01:17:21,940 Það eru þrír skrá descriptors þú hefur sjálfgefið, 909 01:17:21,940 --> 01:17:24,310 sem eru staðlaðar í, staðall út og staðalskekkja. 910 01:17:24,310 --> 01:17:29,960 Sjálfgefið, held ég að það er staðall í er 0, staðall út er 1, og staðall villa er 2. 911 01:17:29,960 --> 01:17:33,980 Svo hvað vil ég að breyta stillingum? 912 01:17:33,980 --> 01:17:37,370 Mig langar að breyta stillingum þegar ég lenti á staf, 913 01:17:37,370 --> 01:17:41,590 Ég vil það að kasta að staf í burtu í stað þess að prenta það á skjáinn. 914 01:17:41,590 --> 01:17:45,960 Hvað Stream - staðalbúnaður í, venjulegu út, eða staðalskekkja - 915 01:17:45,960 --> 01:17:52,050 bregst við það þegar ég slegið á lyklaborðinu? >> [Nemandi] Standard inn >> Já. 916 01:17:52,050 --> 01:17:56,450 Þannig að ég get annaðhvort ekki 0 eða ég get gert stdin. 917 01:17:56,450 --> 01:17:59,380 Ég er að fá current_settings af venjulegu inn 918 01:17:59,380 --> 01:18:01,720 >> Nú vil ég að uppfæra þessar stillingar, 919 01:18:01,720 --> 01:18:07,200 svo fyrst ég afrita inn hacker_settings hvað current_settings mínir eru. 920 01:18:07,200 --> 01:18:10,430 Og hvernig structs vinna er það bara að afrita. 921 01:18:10,430 --> 01:18:14,510 Þetta afrit öllum sviðum, eins og þú vildi búast við. 922 01:18:14,510 --> 01:18:17,410 >> Nú vil ég að uppfæra sumum sviðum. 923 01:18:17,410 --> 01:18:21,670 Þegar litið er á termios, myndir þú þurfa að lesa í gegnum mikið af þessu 924 01:18:21,670 --> 01:18:24,110 bara til að sjá hvað þú vilt að leita að, 925 01:18:24,110 --> 01:18:28,210 en fánar sem þú ert að fara að vilja til að leita að er echo, 926 01:18:28,210 --> 01:18:33,110 svo ECHO Echo inntak stafir. 927 01:18:33,110 --> 01:18:37,710 Fyrst vil ég að setja - I've þegar gleymt hvað svæðin eru. 928 01:18:45,040 --> 01:18:47,900 Þetta er það sem strúktúr lítur út. 929 01:18:47,900 --> 01:18:51,060 Svo stillingar inntak ég held að við viljum breyta. 930 01:18:51,060 --> 01:18:54,210 Við munum líta á lausn til að ganga úr skugga um það er það sem við viljum breyta. 931 01:19:04,060 --> 01:19:12,610 Við viljum breyta lflag í því skyni að koma í veg fyrir að þurfa að leita í gegnum þetta allt. 932 01:19:12,610 --> 01:19:14,670 Við viljum breyta staðbundnum stillingar. 933 01:19:14,670 --> 01:19:17,710 Þú þyrftir að lesa í gegnum þetta allt hlutur til að skilja þar sem allt tilheyrir 934 01:19:17,710 --> 01:19:19,320 sem við viljum breyta. 935 01:19:19,320 --> 01:19:24,120 En það er inni í staðbundnum stillingar þar sem við erum að fara til að vilja breyta því. 936 01:19:27,080 --> 01:19:33,110 Svo er hacker_settings.cc_lmode hvað það er kallað. 937 01:19:39,630 --> 01:19:43,020 c_lflag. 938 01:19:49,060 --> 01:19:52,280 Þetta er þar sem við komum inn í Bita rekstraraðila. 939 01:19:52,280 --> 01:19:54,860 Við erum eins konar út af tími, en við munum fara í gegnum það raunverulegur fljótur. 940 01:19:54,860 --> 01:19:56,600 Þetta er þar sem við komum inn í Bita rekstraraðila, 941 01:19:56,600 --> 01:19:59,950 þar sem ég held að ég sagði einu sinni fyrir löngu að þegar þú byrjar að takast á við fánar, 942 01:19:59,950 --> 01:20:03,370 þú ert að fara að vera með Bita rekstraraðili mikið. 943 01:20:03,370 --> 01:20:08,240 Hver hluti í fána samsvarar einhvers konar hegðun. 944 01:20:08,240 --> 01:20:14,090 Svo hér, þessi biti er fullt af mismunandi hlutum, þar sem allar þær meina eitthvað annað. 945 01:20:14,090 --> 01:20:18,690 En það sem mig langar til að gera er bara að slökkva á hluti sem svarar til ECHO. 946 01:20:18,690 --> 01:20:25,440 Svo til að snúa það burt ég & = ¬ Echo. 947 01:20:25,440 --> 01:20:30,110 Reyndar held ég að það er eins og techo eða eitthvað. Ég ætla bara að fara að athuga aftur. 948 01:20:30,110 --> 01:20:34,050 Ég get termios það. Það er bara ECHO. 949 01:20:34,050 --> 01:20:38,440 ECHO er að fara að vera einn hluti. 950 01:20:38,440 --> 01:20:44,230 ¬ ECHO er að fara að þýða allt bits er stillt á 1, sem þýðir að allir fánar eru sett til að sanna 951 01:20:44,230 --> 01:20:47,140 nema Echo hluti. 952 01:20:47,140 --> 01:20:53,830 Með því að binda enda staðbundin fánar minn með þetta, þá þýðir það allt flöggum sem eru stillt á satt 953 01:20:53,830 --> 01:20:56,520 verður samt að vera stillt á satt. 954 01:20:56,520 --> 01:21:03,240 Ef ECHO merkja mitt er stillt á rétt, þá er þetta víst stillt á rangar á Echo fána. 955 01:21:03,240 --> 01:21:07,170 Svo snýr þetta lína af kóða bara af Echo fána. 956 01:21:07,170 --> 01:21:16,270 Önnur línur af kóða, ég bara afrita þau í þágu tíma og útskýra þær. 957 01:21:27,810 --> 01:21:30,180 Í lausninni, sagði hann 0. 958 01:21:30,180 --> 01:21:33,880 Það er sennilega betra að sérstaklega segja stdin. 959 01:21:33,880 --> 01:21:42,100 >> Takið eftir að ég er líka að gera echo | ICANON hér. 960 01:21:42,100 --> 01:21:46,650 ICANON átt við eitthvað sérstakt, sem þýðir Canonical ham. 961 01:21:46,650 --> 01:21:50,280 Hvað Canonical ham leið er oftast þegar þú ert að slá út the stjórn lína, 962 01:21:50,280 --> 01:21:54,670 staðall á ekki að vinna neitt fyrr en þú högg newline. 963 01:21:54,670 --> 01:21:58,230 Svo þegar þú GetString, þú skrifar fullt af hlutum, þá högg newline. 964 01:21:58,230 --> 01:22:00,590 Það er þegar það er sent til staðall inn 965 01:22:00,590 --> 01:22:02,680 Það er sjálfgefið. 966 01:22:02,680 --> 01:22:05,830 Þegar ég slökkva Canonical ham, nú hvert einasta staf þú ýtir 967 01:22:05,830 --> 01:22:10,910 er það sem fær að vinna, sem er venjulega góður af slæmt vegna þess að það er hægt að vinna þetta, 968 01:22:10,910 --> 01:22:14,330 sem er hvers vegna það er gott að biðminni það í heilu línum. 969 01:22:14,330 --> 01:22:16,810 En ég vil hvern staf til að vinna 970 01:22:16,810 --> 01:22:18,810 þar sem ég vil ekki að bíða fyrir mig að lemja newline 971 01:22:18,810 --> 01:22:21,280 áður en það ferli alla stafina sem ég hef verið að skrifa. 972 01:22:21,280 --> 01:22:24,760 Þetta slekkur Canonical ham. 973 01:22:24,760 --> 01:22:31,320 Þetta efni þýðir bara þegar það ferli raun stafi. 974 01:22:31,320 --> 01:22:35,830 Þetta þýðir að vinna þau strax, um leið og ég er að skrifa þá, vinna þá. 975 01:22:35,830 --> 01:22:42,510 Og þetta er aðgerð sem er að uppfæra stillingar minn fyrir staðall í, 976 01:22:42,510 --> 01:22:45,480 og TCSA þýðir gera það núna. 977 01:22:45,480 --> 01:22:50,310 The annar valkostur er að bíða þar til allt sem er nú á straumi er afgreidd. 978 01:22:50,310 --> 01:22:52,030 Það skiptir í raun ekki máli. 979 01:22:52,030 --> 01:22:56,920 Bara núna breytt stillingum mínum að vera hvað sem er í hacker_typer_settings. 980 01:22:56,920 --> 01:23:02,210 Ég held að ég kallaði hana hacker_settings, þannig að við skulum breyta því. 981 01:23:09,610 --> 01:23:13,500 Breyta öllu til hacker_settings. 982 01:23:13,500 --> 01:23:16,870 >> Nú í lok dagskrá okkar við erum að fara að vilja til að snúa 983 01:23:16,870 --> 01:23:20,210 hvað er nú inni normal_settings, 984 01:23:20,210 --> 01:23:26,560 sem er að fara að bara líta út eins og normal_settings. 985 01:23:26,560 --> 01:23:30,650 Tilkynning Ég hef ekki breytt einhverju normal_settings mínum síðan upphaflega að fá það. 986 01:23:30,650 --> 01:23:34,520 Þá bara að breyta þeim aftur, framhjá ég þær aftur í lokin. 987 01:23:34,520 --> 01:23:38,390 Þetta var uppfærsla. Allt í lagi. 988 01:23:38,390 --> 01:23:43,900 >> Nú inni hér ég ætla bara að útskýra kóðann í þágu tíma. 989 01:23:43,900 --> 01:23:46,350 Það er ekki það mikið kóða. 990 01:23:50,770 --> 01:24:03,750 Við sjáum við að lesa staf frá the skrá. Við kallaði það f. 991 01:24:03,750 --> 01:24:07,850 Nú getur þú maður fgetc, en hvernig fgetc er að fara að vinna 992 01:24:07,850 --> 01:24:11,910 er það bara er að fara að skila staf sem þú lest bara eða EOF, 993 01:24:11,910 --> 01:24:15,680 sem svarar til the endir af the skrá eða einhver villa gerast. 994 01:24:15,680 --> 01:24:19,900 Við erum að lykkja, halda áfram að lesa einn staf af skrá, 995 01:24:19,900 --> 01:24:22,420 fyrr en við höfum keyrt út af stöfum til að lesa. 996 01:24:22,420 --> 01:24:26,650 Og á meðan við erum að gera það, bíða við á einum staf frá staðli tommu 997 01:24:26,650 --> 01:24:29,090 Hvert einasta skipti sem þú skrifar eitthvað á the stjórn lína, 998 01:24:29,090 --> 01:24:32,820 sem er að lesa í karakter frá staðli inn 999 01:24:32,820 --> 01:24:38,330 Þá putchar er bara að fara að setja á bleikju við að lesa hér upp úr skrá til staðlaða út. 1000 01:24:38,330 --> 01:24:42,890 Þú getur maður putchar, en það er bara að setja í staðal út, það er að prenta þessi karakter. 1001 01:24:42,890 --> 01:24:51,600 Þú getur líka bara gert printf ("% c", c), sömu hugmynd. 1002 01:24:53,330 --> 01:24:56,670 Það er að fara að gera megnið af starfi okkar. 1003 01:24:56,670 --> 01:25:00,300 >> Það síðasta sem við erum að fara til að vilja gera er bara fclose skrá okkar. 1004 01:25:00,300 --> 01:25:03,310 Ef þú fclose ekki, það er minni leka. 1005 01:25:03,310 --> 01:25:06,680 Við viljum fclose skrána opnuðum upphaflega, og ég held að það er það. 1006 01:25:06,680 --> 01:25:13,810 Ef við gerum það, fékk ég þegar vandamál. 1007 01:25:13,810 --> 01:25:17,260 Við skulum sjá. 1008 01:25:17,260 --> 01:25:19,960 Hvað gerði það að kvarta? 1009 01:25:19,960 --> 01:25:30,220 Bjóst við 'int' en rifrildi er af gerðinni "struct _IO_FILE * '. 1010 01:25:36,850 --> 01:25:39,370 Við munum sjá hvort það virkar. 1011 01:25:45,210 --> 01:25:53,540 Aðeins leyft í C99. Augh. Allt í lagi, gera hacker_typer. 1012 01:25:53,540 --> 01:25:57,760 Nú erum við að fá fleiri gagnlegar lýsingar. 1013 01:25:57,760 --> 01:25:59,900 Svo nota undeclared auðkenni 'normal_settings'. 1014 01:25:59,900 --> 01:26:04,170 Ég vissi ekki að kalla það normal_settings. Ég kallaði það current_settings. 1015 01:26:04,170 --> 01:26:12,090 Svo skulum breyta allt um það. 1016 01:26:17,920 --> 01:26:21,710 Nú liggur rifrildi. 1017 01:26:26,290 --> 01:26:29,500 Ég ætla að gera þetta 0 fyrir nú. 1018 01:26:29,500 --> 01:26:36,720 Allt í lagi. . / Hacker_typer cp.c. 1019 01:26:36,720 --> 01:26:39,590 ÉG einnig did ekki að hreinsa skjáinn í upphafi. 1020 01:26:39,590 --> 01:26:42,960 En þú getur litið til baka í síðasta vandamál sett til að sjá hvernig þú hreinsa skjáinn. 1021 01:26:42,960 --> 01:26:45,160 Það er bara prentun tákn 1022 01:26:45,160 --> 01:26:47,210 á meðan þetta er að gera það sem ég vil gera. 1023 01:26:47,210 --> 01:26:48,900 Allt í lagi. 1024 01:26:48,900 --> 01:26:55,280 Og hugsa um hvers vegna þetta þarf að vera 0 í stað stdin, 1025 01:26:55,280 --> 01:27:00,560 sem ætti að vera # skilgreina 0, 1026 01:27:00,560 --> 01:27:03,890 þetta er að kvarta yfir að - 1027 01:27:13,150 --> 01:27:19,360 Áður en þegar ég sagði að það er skrá descriptors en þá verður þú einnig skrá * þínu, 1028 01:27:19,360 --> 01:27:23,210 skrá lýsing er bara eina heiltölu, 1029 01:27:23,210 --> 01:27:26,970 en skrá * hefur a heild búnt af efni í tengslum við það. 1030 01:27:26,970 --> 01:27:30,380 Ástæðan að við þurfum að segja 0 stað stdin 1031 01:27:30,380 --> 01:27:37,480 er að stdin er skrá * sem bendir til að hlutur sem er tilvísun skrá lýsing 0. 1032 01:27:37,480 --> 01:27:45,070 Svo jafnvel upp hér þegar ég fopen (argv [1], ég er að fá skrá * til baka. 1033 01:27:45,070 --> 01:27:51,180 En einhvers staðar í þeirri skrá * er hlutur sem samsvarar skrá lýsing fyrir þessi skrá. 1034 01:27:51,180 --> 01:27:57,430 Ef þú líta á the man síðunnar fyrir opinn, þannig að ég held að þú þarft að gera maður 3 Opnaðu - Nei - 1035 01:27:57,430 --> 01:27:59,380 maður 2 opin - já. 1036 01:27:59,380 --> 01:28:06,250 Ef þú horfir á síðuna til að opna, opna er eins og minni-stigi fopen, 1037 01:28:06,250 --> 01:28:09,350 og það er aftur raunverulegt skrá lýsing. 1038 01:28:09,350 --> 01:28:12,050 fopen er fullt af efni á toppur af opinn, 1039 01:28:12,050 --> 01:28:17,640 sem í stað þess að koma aftur bara að skrá lýsing skilar A heild skrá * músina 1040 01:28:17,640 --> 01:28:20,590 inni sem er lítil skrá lýsing okkar. 1041 01:28:20,590 --> 01:28:25,020 Svo staðall í átt við * FILE hlutur, 1042 01:28:25,020 --> 01:28:29,120 en 0 vísar til bara lýsing skrá staðall í sjálfu sér. 1043 01:28:29,120 --> 01:28:32,160 >> Spurningar? 1044 01:28:32,160 --> 01:28:35,930 [Hlær] blés í gegnum það. 1045 01:28:35,930 --> 01:28:39,140 Allt í lagi. Við erum að gera. [Hlær] 1046 01:28:39,140 --> 01:28:42,000 >> [CS50.TV]