1 00:00:00,000 --> 00:00:02,500 [Powered by Google Translate] [It-Taqsima 5 - aktar komdi] 2 00:00:02,500 --> 00:00:04,690 [Rob Bowden - Università ta 'Harvard] 3 00:00:04,690 --> 00:00:07,250 [Dan huwa CS50. - CS50.TV] 4 00:00:08,990 --> 00:00:14,250 >> Like I said fil-email tiegħi, hemm ħafna affarijiet li inti tista 'tuża 5 00:00:14,250 --> 00:00:17,060 minbarra l-apparat li fil-fatt jagħmlu l-settijiet problema. 6 00:00:17,060 --> 00:00:19,910 Nirrakkomandaw li inti tagħmel dan fil-appliance biss għaliex allura nistgħu aktar faċilment jgħinuk 7 00:00:19,910 --> 00:00:22,070 u nafu kif kollox ikun sejjer jaħdem. 8 00:00:22,070 --> 00:00:26,950 Imma kif eżempju wieħed ta 'fejn inti tista' tagħmel affarijiet jekk, ngħidu aħna, inti ma għandekx aċċess 9 00:00:26,950 --> 00:00:31,570 ma 'strument jew inti tixtieq taħdem fil-kantina Ċentru tax-Xjenza - 10 00:00:31,570 --> 00:00:33,090 li attwalment ikollhom l-appliance wisq - 11 00:00:33,090 --> 00:00:35,150 jekk inti tixtieq taħdem kullimkien. 12 00:00:35,150 --> 00:00:42,370 Eżempju wieħed huwa qatt raw / semgħu SSH? 13 00:00:44,380 --> 00:00:47,780 SSH huwa bażikament bħad jgħaqqdu għal xi ħaġa. 14 00:00:47,780 --> 00:00:51,340 Fil-fatt, id-dritt issa jien SSHed fis-appliance. 15 00:00:51,340 --> 00:00:54,290 I qatt jaħdmu direttament fil-appliance. 16 00:00:55,930 --> 00:01:01,060 Hawn hu l-appliance, u jekk inti tfittex l isfel hawn tara dan l-indirizz IP. 17 00:01:01,060 --> 00:01:03,650 I qatt jaħdmu fl-appliance nnifisha; 18 00:01:03,650 --> 00:01:08,840 Jien dejjem jiġu trasferiti lil iTerm2 tieqa / terminal tieqa. 19 00:01:08,840 --> 00:01:15,910 Tista 'SSH għal dak l-indirizz IP, ssh jharvard@192.168.129.128. 20 00:01:15,910 --> 00:01:20,390 Niftakar dak in-numru faċilment għaliex dan huwa tali mudell sbieħ. 21 00:01:20,390 --> 00:01:24,920 Iżda li se jistaqsu lili għal password tiegħi, u issa jien fil-appliance. 22 00:01:24,920 --> 00:01:33,060 Bażikament, f'dan il-punt, jekk inti fetħet terminal ġewwa tal-apparat innifsu, 23 00:01:33,060 --> 00:01:36,350 din l-interfaċċa, madankollu inti tużaha, huwa eżattament l-istess 24 00:01:36,350 --> 00:01:40,010 bħala l-interface jien jużaw hawn fuq imma issa int SSHed. 25 00:01:42,240 --> 00:01:44,920 Inti ma għandekx SSH għall-appliance. 26 00:01:44,920 --> 00:01:52,360 Eżempju wieħed ta 'post ieħor inti tista' SSH li huwa jien pretty ċert li jkollok fil-kontumaċja - 27 00:01:52,360 --> 00:01:55,020 Oh. Akbar. 28 00:01:55,020 --> 00:02:01,130 Kollha inti għandu jkollhom mill-kontijiet tas-SKF default fuq is-servers FAS. 29 00:02:01,130 --> 00:02:06,840 Għalija, nixtieq SSH għall rbowden@nice.fas.harvard.edu. 30 00:02:06,840 --> 00:02:11,610 Huwa ser jgħidlek li l-ewwel darba, u inti tgħidli iva. 31 00:02:11,610 --> 00:02:15,840 Password tiegħi huwa biss se jkun password FAS tiegħi. 32 00:02:15,840 --> 00:02:22,650 U hekk issa, jien SSHed għall-servers sbieħ, u I tista 'tagħmel xejn nixtieq hawn fuq. 33 00:02:22,650 --> 00:02:28,560 A lott ta 'klassijiet li inti tista' tieħu, bħal 124, huma se jkollhom inti upload Jittieħed hawn 34 00:02:28,560 --> 00:02:30,950 bżonn jippreżenta settijiet problema tiegħek. 35 00:02:30,950 --> 00:02:34,100 Imma jgħidu inti ma għandekx aċċess għall-apparat tiegħek. 36 00:02:34,100 --> 00:02:37,910 Imbagħad inti tista 'tagħmel affarijiet, bħal hawn fuq se ngħid - 37 00:02:37,910 --> 00:02:42,160 Dan huwa biss is-sezzjoni tagħna ta 'mistoqsijiet. 38 00:02:42,160 --> 00:02:45,070 Hija se jgħidlek biex tagħmel dan fl-appliance. 39 00:02:45,070 --> 00:02:47,790 Minflok I ser biss tagħmel dan fuq is-server. 40 00:02:47,790 --> 00:02:50,560 Jien ser unzip dan. 41 00:02:50,560 --> 00:02:55,670 Il-problema se tkun li int użati biex jużaw xi ħaġa bħal gedit 42 00:02:55,670 --> 00:02:58,160 jew kwalunkwe ġewwa ta 'l-appliance. 43 00:02:58,160 --> 00:03:01,830 Int mhux se jkollhom li fuq is-server SKF. 44 00:03:01,830 --> 00:03:04,110 Huwa kollha biss se tkun din l-interfaċċa testwali. 45 00:03:04,110 --> 00:03:09,180 Allura inti tista 'jew wieħed, jippruvaw jitgħallmu editur test li dawn ma jkollhom. 46 00:03:09,180 --> 00:03:12,130 Huma għandhom Nano. 47 00:03:12,130 --> 00:03:14,990 Nano huwa normalment pjuttost faċli biex jintuża. 48 00:03:14,990 --> 00:03:19,470 Tista 'tuża vleġeġ tiegħek u t-tip normalment. 49 00:03:19,470 --> 00:03:21,250 Allura li mhuwiex diffiċli. 50 00:03:21,250 --> 00:03:24,720 Jekk inti tixtieq li tikseb verament fancy tista 'tuża emacs, 51 00:03:24,720 --> 00:03:29,850 li I probabbilment ma kellha tiftaħ minħabba I lanqas biss jafu kif tagħlaq emacs. 52 00:03:29,850 --> 00:03:32,760 Kontroll X, Kontroll C? Yeah. 53 00:03:32,760 --> 00:03:35,310 Jew tista 'tuża vim, li huwa dak I-użu. 54 00:03:35,310 --> 00:03:37,800 U għalhekk dawn l-għażliet tiegħek. 55 00:03:37,800 --> 00:03:43,830 Jekk inti ma tridx tagħmel dan, inti tista 'wkoll, jekk inti tħares lejn manual.cs50.net-- 56 00:03:43,830 --> 00:03:45,410 Oh. 57 00:03:45,410 --> 00:03:49,920 Fuq PC, inti tista 'SSH tuża Putty, 58 00:03:49,920 --> 00:03:51,940 li int ser ikollhom biex tniżżel separatament. 59 00:03:51,940 --> 00:03:55,460 Fuq Mac, inti tista 'sempliċement billi Terminal użu default jew tista' tniżżel iTerm2, 60 00:03:55,460 --> 00:03:58,490 li huwa bħal sbieħ, Terminal fancy. 61 00:03:58,490 --> 00:04:03,780 Jekk inti tmur manual.cs50.net int ser tara link għall notepad + +, 62 00:04:03,780 --> 00:04:07,120 li huwa dak li inti tista 'tuża fuq PC. 63 00:04:07,120 --> 00:04:13,340 Hija ihallik SFTP mis Notepad + +, li hi bażikament SSH. 64 00:04:13,340 --> 00:04:17,750 X'inhu dan ser tavżak tagħmel huwa jeditjaw fajls tiegħek lokalment, 65 00:04:17,750 --> 00:04:20,670 u mbagħad kull meta inti tixtieq li tiffranka minnhom, se jiffrankaw sa nice.fas, 66 00:04:20,670 --> 00:04:23,670 fejn inti tista 'mbagħad imexxuhom. 67 00:04:23,670 --> 00:04:26,880 U l-ekwivalenti fuq Mac se tkun TextWrangler. 68 00:04:26,880 --> 00:04:28,760 Għalhekk ihallik tagħmel l-istess ħaġa. 69 00:04:28,760 --> 00:04:32,800 Hija ihallik jeditjaw fajls lokalment u tiffranka lill nice.fas, 70 00:04:32,800 --> 00:04:35,730 fejn inti tista 'mbagħad imexxuhom. 71 00:04:35,730 --> 00:04:40,400 Mela jekk int qatt staġnati mingħajr appliance, inti għandek dawn l-għażliet 72 00:04:40,400 --> 00:04:44,230 li għadhom settijiet problema tiegħek. 73 00:04:44,230 --> 00:04:48,250 Il-problema waħda se tkun li int mhux se jkollhom il-librerija CS50 74 00:04:48,250 --> 00:04:51,580 għaliex nice.fas ma b'mankanza jkollhom dik. 75 00:04:51,580 --> 00:04:55,970 Inti tista 'jew tniżżel il-librerija CS50 - 76 00:04:55,970 --> 00:04:58,470 Ma naħsibx li għandi bżonn li f'dan il-punt. 77 00:04:58,470 --> 00:05:03,270 Inti tista 'jew tniżżel il-librerija CS50 u jibagħtu kopja tagħha fuq l nice.fas, 78 00:05:03,270 --> 00:05:07,450 jew Naħseb f'dan il-punt aħna ma tużah aktar xorta waħda. 79 00:05:07,450 --> 00:05:12,720 Jew jekk nagħmlu, inti tista għalissa tibdilha 80 00:05:12,720 --> 00:05:18,480 l-implimentazzjonijiet tal-funzjonijiet fil-librerija CS50 xorta. 81 00:05:18,480 --> 00:05:21,370 Allura li m'għandux ikun li ħafna ta 'restrizzjoni. 82 00:05:21,370 --> 00:05:23,710 U li li. 83 00:05:26,460 --> 00:05:29,820 >> I ser imorru lura lejn il-appliance issa; aħna ser tagħmel dak kollu fil-appliance. 84 00:05:29,820 --> 00:05:37,510 Ħarsa lejn is-sezzjoni tagħna ta 'mistoqsijiet, fil-bidu, bħal I qal fl-email tiegħi, 85 00:05:37,510 --> 00:05:43,620 għandna biex jitkellmu dwar l-waħda qasira inti suppost kellhom jaraw. 86 00:05:43,620 --> 00:05:51,980 Għandna l-indirizzar mill-ġdid & Pajpijiet u dawn it-tliet mistoqsijiet. 87 00:05:51,980 --> 00:05:56,070 >> Għal liema stream ma funzjonijiet simili printf tikteb fil-kontumaċja? 88 00:05:56,070 --> 00:05:59,130 Allura nixxiegħa. X'inhu nixxiegħa? 89 00:06:06,520 --> 00:06:15,100 Nixxiegħa huwa bażikament simili huwa biss ftit - 90 00:06:15,100 --> 00:06:21,450 Huwa lanqas sors ta '1s u 0s. 91 00:06:21,450 --> 00:06:24,920 Il-fluss huwa titlob għall hawnhekk huwa l-istandard. 92 00:06:24,920 --> 00:06:27,250 U hekk istandard huwa nixxiegħa li meta tikteb lilha, 93 00:06:27,250 --> 00:06:30,940 jidher fuq l-iskrin. 94 00:06:30,940 --> 00:06:36,860 L-Istandard, billi nixxiegħa, dan ifisser li inti biss jiktbu 1s u 0s għaliha, 95 00:06:36,860 --> 00:06:40,220 u l-tarf l-ieħor ta 'l-istandard biss taqra minn dak nixxiegħa. 96 00:06:40,220 --> 00:06:43,540 Huwa biss sensiela ta '1s u 0s. 97 00:06:43,540 --> 00:06:45,570 Tista 'tikteb lill flussi jew tista' tinqara minn nixxiegħat 98 00:06:45,570 --> 00:06:47,950 jiddependi fuq dak il-kurrent fil-fatt hu. 99 00:06:47,950 --> 00:06:52,800 Il-flussi oħra default tnejn huma standard fil-u żball standard. 100 00:06:52,800 --> 00:06:57,540 Standard fi huwa kull meta inti tagħmel GetString, huwa għalikom biex Jittieħed input. 101 00:06:57,540 --> 00:07:01,570 Għalhekk għalikom, huwa attwalment stennija fuq standard, 102 00:07:01,570 --> 00:07:04,880 li huwa verament dak ikollok meta inti tip fuq il-keyboard. 103 00:07:04,880 --> 00:07:07,530 Inti ittajpjar fis istandard pulzieri 104 00:07:07,530 --> 00:07:10,050 Żball standard huwa bażikament ekwivalenti għal barra standard, 105 00:07:10,050 --> 00:07:13,280 iżda huwa speċjalizzati fil-li meta inti print għall-iżball standard, 106 00:07:13,280 --> 00:07:16,770 int suppost biss jistampaw messaġġi ta 'żball għal dak 107 00:07:16,770 --> 00:07:20,200 sabiex inti tista 'tiddistingwi bejn messaġġi regolari stampati għall-iskrin 108 00:07:20,200 --> 00:07:24,560 versus messaġġi ta 'żball skont jekk dawn marru biex barra standard jew iżball standard. 109 00:07:24,560 --> 00:07:28,660 Fajls wisq. 110 00:07:28,660 --> 00:07:32,440 L-Istandard, standard, u l-iżball standard huma flussi biss speċjali, 111 00:07:32,440 --> 00:07:36,810 imma verament kwalunkwe fajl, meta inti tiftaħ fajl, isir nixxiegħa ta 'bytes 112 00:07:36,810 --> 00:07:40,740 fejn inti tista 'biss taqra minn dak nixxiegħa. 113 00:07:40,740 --> 00:07:47,770 Inti, għall-parti l-kbira, tista 'biss jaħsbu ta' fajl bħala nixxiegħa ta 'bytes. 114 00:07:47,770 --> 00:07:51,190 Allura flussi liema do huma jiktbu lill-kontumaċja? Standard out. 115 00:07:51,190 --> 00:07:56,980 >> X'hemm differenza bejn> u >>? 116 00:07:58,140 --> 00:08:03,710 Did ħadd tara l-video qabel? Okay. 117 00:08:03,710 --> 00:08:10,960 > Se tkun kif inti direzzjoni ġdida fil-fajls, 118 00:08:10,960 --> 00:08:15,240 u >> huwa wkoll ser idawwru l-output fis-fajls, 119 00:08:15,240 --> 00:08:17,820 iżda huwa minflok tmur tehmeż għall-fajl. 120 00:08:17,820 --> 00:08:23,430 Per eżempju, ejja ngħidu I jiġri li jkollhom dict dritt hawn, 121 00:08:23,430 --> 00:08:27,020 u l-għalf biss ġewwa ta dict hija, qattus qattus, kelb, ħut, klieb. 122 00:08:27,020 --> 00:08:31,530 Wieħed kmand li inti għandek fil-linja tal-kmand tal-qtates, 123 00:08:31,530 --> 00:08:34,539 li huwa biss se jistampaw x'hemm fil-fajl. 124 00:08:34,539 --> 00:08:40,679 Allura meta I say dict qattus, li għaddej biex jistampaw, qattus qattus, kelb, ħut, klieb. Li kollox qattus ma. 125 00:08:40,679 --> 00:08:46,280 Dan ifisser li stampati l-istandard out, qattus qattus, kelb, ħut, klieb. 126 00:08:46,280 --> 00:08:53,240 Jekk I minflok tixtieq li idawwru li għall-fajl, I jistgħu jużaw> u jagħtu direzzjoni ġdida lill ikun x'ikun l-fajl huwa. 127 00:08:53,240 --> 00:08:56,460 I ser sejħa-fajl fajl. 128 00:08:56,460 --> 00:09:00,320 Mela issa jekk I ls, jien ser tara I jkollhom fajl ġdida msejħa fajl. 129 00:09:00,320 --> 00:09:05,700 U jekk I jiftħuh, li għaddej biex ikollhom eżattament dak qattus tpoġġi fil-linja tal-kmand. 130 00:09:05,700 --> 00:09:11,040 Allura issa jekk jien tagħmel dan mill-ġdid, allura huwa għaddej biex idawwru l-output fil-fajl, 131 00:09:11,040 --> 00:09:13,930 u jien ser ikollhom l-istess ħaġa eżatt. 132 00:09:13,930 --> 00:09:17,910 Għalhekk teknikament, hija kompletament mwarrba dak li kellna. 133 00:09:17,910 --> 00:09:22,970 U aħna ser tara jekk nibdel dict, I ħa out kelb. 134 00:09:22,970 --> 00:09:29,980 Issa jekk aħna qattus dict fil-fajl mill-ġdid, aħna qed tmur biex ikollhom il-verżjoni l-ġdida bil-kelb jitneħħew. 135 00:09:29,980 --> 00:09:32,400 Għalhekk kompletament tipprevali dan. 136 00:09:32,400 --> 00:09:36,640 Minflok, jekk nużaw >>, li għaddej biex tehmeż fajl. 137 00:09:36,640 --> 00:09:40,860 Issa, il-ftuħ fajl, naraw li għandna biss il-ħaġa istess stampat darbtejn 138 00:09:40,860 --> 00:09:44,920 minħabba li kien hemm darba, allura aħna mehmuż ma 'l-oriġinali. 139 00:09:44,920 --> 00:09:48,130 Allura dak hu li> u >> do. 140 00:09:48,130 --> 00:09:50,580 Il-wieħed li jmiss jistaqsi - Ma jistaqsu dwar dan. 141 00:09:50,580 --> 00:09:59,050 >> L-oħra li għandna huwa
  • redirects out standard, 142 00:09:59,050 --> 00:10:01,970 00:10:12,050 Ejja naraw jekk ikollna eżempju. 144 00:10:14,750 --> 00:10:16,930 Kapaċi nikteb wieħed malajr reali. 145 00:10:17,870 --> 00:10:25,700 Ejja tieħu kwalunkwe fajl, hello.c. 146 00:10:56,060 --> 00:10:59,070 Relattivament sempliċi fajl. 147 00:10:59,070 --> 00:11:03,570 Jien biss jkollna spag u mbagħad istampar "Hello" ikun x'ikun l-sekwenza I biss daħal kien. 148 00:11:03,570 --> 00:11:07,990 Sabiex tagħmel bonjour u mbagħad. / Bonjour. 149 00:11:07,990 --> 00:11:10,720 Issa huwa suġġeriment me jidħlu xi ħaġa, 150 00:11:10,720 --> 00:11:15,070 li jfisser huwa stennija fuq affarijiet li għandhom jiddaħħlu fis-istandard pulzieri 151 00:11:15,070 --> 00:11:20,450 So tidħol x'ikun nixtieq fis istandard pulzieri Aħna biss se ngħid Hello, Rob! 152 00:11:20,450 --> 00:11:23,310 Imbagħad huwa istampar għall-istandard out Hello, Rob! 153 00:11:23,310 --> 00:11:28,860 Jekk I do. / Bonjour u mbagħad jagħtu direzzjoni ġdida, 154 00:11:30,740 --> 00:11:34,310 għal issa inti tista 'biss idawwru minn fajl. 155 00:11:34,310 --> 00:11:41,720 Mela jekk jien jitqiegħdu f'xi fajl, txt, u nressaq Rob, 156 00:11:41,720 --> 00:11:52,300 jekk I run bonjour u mbagħad jagħtu direzzjoni ġdida l-fajl txt fil. / hello, li għaddej biex jgħidu Hello, Rob! immedjatament. 157 00:11:52,300 --> 00:11:57,160 Meta l-ewwel gets GetString u huwa stennija fuq standard, 158 00:11:57,160 --> 00:12:01,730 standard m'għadhiex stennija fuq it-tastiera għal data li tinkiseb mdaħħla. 159 00:12:01,730 --> 00:12:05,980 Minflok, għandna dirottati standard li jinqara mill-fajl txt. 160 00:12:05,980 --> 00:12:10,290 U hekk li għaddej biex jinqara mill-txt fajl, li huwa biss il-Rob linja, 161 00:12:10,290 --> 00:12:13,380 u mbagħad li għaddej biex jistampaw Hello, Rob! 162 00:12:13,380 --> 00:12:18,180 U jekk jien ridt, I jistgħu wkoll jagħmlu. / Bonjour 00:12:21,500 u allura l-istandard li l-istampar huwa, li huwa Hello, Rob!, 164 00:12:21,500 --> 00:12:24,700 I jistgħu jagħtu direzzjoni ġdida li fil-fajl tagħha stess. 165 00:12:24,700 --> 00:12:29,790 I ser biss sejħa-fajl bonjour - no, I mhux se, għaliex dak l-eżekutibbli - txt2. 166 00:12:29,790 --> 00:12:40,150 Issa, txt2 huwa se jkollu l-output ta '. / Bonjour 00:12:43,520 >> Mistoqsijiet? 168 00:12:45,900 --> 00:12:49,090 >> Okay. Mela allura hawnhekk għandna pipeline. 169 00:12:49,090 --> 00:12:53,510 Pajpijiet huma l-aħħar unità ta 'direzzjoni mill-ġdid. 170 00:12:53,510 --> 00:12:58,750 >> Oh. I raden unità waħda oħra ta direzzjoni mill-ġdid hija jekk minflok ta '> inti tagħmel 2>, 171 00:12:58,750 --> 00:13:01,070 li l-ridirezzjonar iżball standard. 172 00:13:01,070 --> 00:13:06,280 Mela jekk xi ħaġa marru għall iżball standard, ma jkunx tikseb jitqiegħed fis txt2. 173 00:13:06,280 --> 00:13:12,480 Imma avviż jekk nagħmel 2>, allura huwa għadu istampar Hello, Rob! għal-linja ta 'kmand 174 00:13:12,480 --> 00:13:18,600 għaliex jien biss ridirezzjonar iżball standard, jien ma ridirezzjonar standard out. 175 00:13:18,600 --> 00:13:22,210 Żball standard u l-istandard huma differenti. 176 00:13:24,210 --> 00:13:27,080 Jekk int riedu li attwalment tikteb lill iżball standard, 177 00:13:27,080 --> 00:13:35,080 imbagħad I jista 'jbiddel dan ikun fprintf li stderr. 178 00:13:35,080 --> 00:13:37,850 Allura printf, awtomatikament, prints li l-istandard. 179 00:13:37,850 --> 00:13:41,720 Jekk irrid li jistampaw biex iżball standard manwalment, imbagħad I għandhom jużaw fprintf 180 00:13:41,720 --> 00:13:45,010 u tispeċifika dak li nixtieq li jistampaw sa. 181 00:13:45,010 --> 00:13:49,720 Jekk minflok I ma stdout fprintf, allura dak l-bażikament ekwivalenti għal printf. 182 00:13:49,720 --> 00:13:55,530 Iżda fprintf għal żball standard. 183 00:13:57,790 --> 00:14:03,650 Allura issa, jekk I idawwru dan in txt2, Hello, Rob! għadu jkollna stampat fuq il-linja tal-kmand 184 00:14:03,650 --> 00:14:08,270 peress li huwa jkollna stampati biex iżball standard u jien biss ridirezzjonar standard out. 185 00:14:08,270 --> 00:14:16,420 Jekk I issa idawwru żball standard, issa ma jiksbu stampati, u txt2 se tkun Hello, Rob! 186 00:14:16,420 --> 00:14:21,910 Allura issa, inti tista 'jistampaw żbalji attwali tiegħek għal żball standard 187 00:14:21,910 --> 00:14:24,720 u tistampa messaġġi regolari tiegħek biex l-istandard. 188 00:14:24,720 --> 00:14:31,420 U hekk meta inti tmexxi programm tiegħek, inti tista 'taħdem bħala. / Bonjour dan it-tip mad-2> 189 00:14:31,420 --> 00:14:33,800 sabiex dak il-programm tiegħek se jaħdmu b'mod normali, 190 00:14:33,800 --> 00:14:38,400 imma xi messaġġi ta 'żball li ikollok tista' tiċċekkja aktar tard fil-log żball tiegħek, 191 00:14:38,400 --> 00:14:44,500 hekk żbalji, u mbagħad tfittex aktar tard u żbalji fajl tiegħek se jkollhom xi żbalji li ġara. 192 00:14:45,200 --> 00:14:47,540 >> Mistoqsijiet? 193 00:14:47,540 --> 00:14:58,070 >> L-aħħar wieħed huwa pajp, li inti tista 'taħseb li jittieħdu l-istandard barra minn kmand 194 00:14:58,070 --> 00:15:01,210 u jagħmilha l-istandard fil-kmand ta 'wara. 195 00:15:01,210 --> 00:15:05,570 Eżempju hawnhekk huwa eku hija ħaġa kmand tal-linja 196 00:15:05,570 --> 00:15:11,840 li huwa biss se eku kwalunkwe nressaq bħala argument tagħha. I mhux ser tpoġġi kwotazzjonijiet. 197 00:15:11,840 --> 00:15:16,150 Echo blah, blah, blah huwa biss se jistampaw blah, blah, blah. 198 00:15:16,150 --> 00:15:20,600 Qabel, meta I said I kellhom jitqiegħdu Rob ġo fajl txt 199 00:15:20,600 --> 00:15:28,830 minħabba I tista 'biss idawwru fajls txt, minflok, / jekk I eku Rob 200 00:15:28,830 --> 00:15:35,520 u mbagħad pajpijiet fis. / hello, li se tagħmel ukoll dak l-istess tip ta 'ħaġa. 201 00:15:35,520 --> 00:15:39,160 Dan qed tieħu l-output ta 'dan il-kmand, eku Rob, 202 00:15:39,160 --> 00:15:43,610 u jużawha bħala l-input għal. / bonjour. 203 00:15:44,790 --> 00:15:49,560 Inti tista 'taħseb li bħala l-ewwel idawwru eku Rob ġo fajl 204 00:15:49,560 --> 00:15:54,160 u mbagħad kontribut lejn. / bonjour dan il-fajl li kien biss outputted. 205 00:15:54,160 --> 00:15:57,850 Iżda dan jieħu l-fajl temporanju barra mill-istampa. 206 00:16:01,890 --> 00:16:04,460 >> Mistoqsijiet dwar li? 207 00:16:04,460 --> 00:16:07,150 >> Il-mistoqsija li jmiss se tinvolvi dan. 208 00:16:07,150 --> 00:16:15,310 Liema pipeline tista 'tuża biex issib in-numru ta' ismijiet uniku fil-fajl imsejjaħ names.txt? 209 00:16:15,310 --> 00:16:24,160 Il-kmandijiet aħna qed tmur jridu jużaw hawnhekk huma uniċi, hekk uniq, u mbagħad wc. 210 00:16:24,160 --> 00:16:28,840 Tista 'tagħmel uniq bniedem li attwalment tħares lejn dak li ma, 211 00:16:28,840 --> 00:16:34,840 u huwa biss jmorru biex filtru linji biswit tqabbil mill-input. 212 00:16:34,840 --> 00:16:40,690 U l-bniedem wc se jistampaw il-newline, kelma, u l-għadd bytes għal kull fajl. 213 00:16:40,690 --> 00:16:43,760 U l-aħħar wieħed aħna qed tmur biex jridu jużaw huwa tip, 214 00:16:43,760 --> 00:16:47,410 li se biss tip linji ta 'fajl txt. 215 00:16:47,410 --> 00:16:58,080 Jekk I jagħmlu xi fajl txt, names.txt, u huwa Rob, Tommy, Joseph, Tommy, Joseph, RJ, Rob, 216 00:16:58,080 --> 00:17:03,910 dak I trid tagħmel hawnhekk huwa ssib l-għadd ta 'ismijiet uniku fil dan il-fajl. 217 00:17:03,910 --> 00:17:08,750 Allura dak li għandu l-risposta tkun? >> [Student] 4. >> Yeah. 218 00:17:08,750 --> 00:17:13,780 Għandu jkun ta '4 sa Rob, Tommy, Joseph, RJ huma l-ismijiet biss uniku fil dan il-fajl. 219 00:17:13,780 --> 00:17:20,180 L-ewwel pass, jekk I biss do għadd kelma fuq names.txt, 220 00:17:20,180 --> 00:17:24,290 dan huwa attwalment javżak me kollox. 221 00:17:24,290 --> 00:17:32,560 Dan huwa attwalment l-istampar - ejja ara, bniedem wc - newlines, kliem, u għadd byte. 222 00:17:32,560 --> 00:17:38,270 Jekk I biss jimpurtahom linji, imbagħad I tista 'biss tagħmel wc-l names.txt. 223 00:17:41,730 --> 00:17:44,300 Allura dak il-pass 1. 224 00:17:44,300 --> 00:17:50,510 Imma jien ma jridux wc-l names.txt minħabba names.txt biss fiha l-ismijiet, 225 00:17:50,510 --> 00:17:54,170 u nixtieq li jiffiltraw kwalunkwe dawk mhux uniku. 226 00:17:54,170 --> 00:18:01,200 Mela jekk nagħmel names.txt uniq, li ma pjuttost tagħti me dak li nixtieq 227 00:18:01,200 --> 00:18:03,760 minħabba li l-ismijiet duplikati għadhom hemm. 228 00:18:03,760 --> 00:18:07,690 Għaliex huwa li? Għaliex uniq ma tagħmel dak li nixtieq? 229 00:18:07,690 --> 00:18:10,500 [Student] Il-duplikati ma jkunux [inaudible] >> Yeah. 230 00:18:10,500 --> 00:18:16,370 Ftakar il-paġna bniedem għall uniq jgħid linji filtru tqabbil adjaċenti. 231 00:18:16,370 --> 00:18:19,680 Huma qed mhux maġenb, u għalhekk mhux se filtru magħhom. 232 00:18:19,680 --> 00:18:31,100 Jekk I sort lilhom l-ewwel, names.txt sort se timplimenta l-linji duplikat flimkien. 233 00:18:31,100 --> 00:18:34,450 Allura issa names.txt tip hija dik. 234 00:18:34,450 --> 00:18:40,550 Jien ser jridu jużaw dan bħala l-kontribut għall uniq, li huwa | uniq. 235 00:18:40,550 --> 00:18:43,390 Li tagħti me Joseph, RJ, Rob, Tommy, 236 00:18:43,390 --> 00:18:49,260 u nixtieq li jużaw dik il-kontribut għall WC-l, 237 00:18:49,260 --> 00:18:52,740 li se tagħti me 4. 238 00:18:52,740 --> 00:18:56,930 Bħall jgħid hawnhekk, dak pipeline tista 'tuża? 239 00:18:56,930 --> 00:19:01,390 Tista 'tagħmel ħafna affarijiet bħall-użu ta' serje ta 'kmandi 240 00:19:01,390 --> 00:19:05,130 fejn inti tuża l-output minn kmand bħala l-kontribut għall-kmand li jmiss. 241 00:19:05,130 --> 00:19:08,780 Tista 'tagħmel ħafna affarijiet, ħafna affarijiet għaqlija. 242 00:19:08,780 --> 00:19:11,440 >> Mistoqsijiet? 243 00:19:12,910 --> 00:19:14,600 Okay. 244 00:19:14,600 --> 00:19:17,880 Li lilha għall-pajpijiet u direzzjoni mill-ġdid. 245 00:19:18,370 --> 00:19:24,090 >> Issa immorru fuq l-għalf attwali, l-għalf kodifikazzjoni. 246 00:19:24,090 --> 00:19:29,100 Ġewwa ta 'dan PDF, tkun taf tara dan il-kmand, 247 00:19:29,100 --> 00:19:32,950 u tkun taf tixtieq li tmexxi dan il-kmand fl-apparat tiegħek. 248 00:19:36,240 --> 00:19:42,250 Wget huwa l-kmand għall biss jkollna xi ħaġa mill-Internet, bażikament, 249 00:19:42,250 --> 00:19:45,180 hekk Wget u dan il-URL. 250 00:19:45,180 --> 00:19:49,110 Jekk inti marru għal din URL fil-browser tiegħek, ikun tniżżel dan il-fajl. 251 00:19:49,110 --> 00:19:52,510 I biss għafast fuqha, u għalhekk jitniżżel l-fajl għalija. 252 00:19:52,510 --> 00:19:55,650 Iżda miktub Wget ta 'dik ħaġa ġewwa tat-terminal 253 00:19:55,650 --> 00:19:58,620 huwa biss se tniżżel in terminali tiegħek. 254 00:19:58,620 --> 00:20:02,750 Għandi section5.zip, u tkun taf tixtieq li unzip section5.zip, 255 00:20:02,750 --> 00:20:06,520 li se jtik folder imsejjaħ section5, 256 00:20:06,520 --> 00:20:11,550 li se jkollhom kollha tal-fajls li aħna qed tmur biex tkun qed tuża llum ġewwa ta 'dan. 257 00:20:33,380 --> 00:20:37,710 Kif fajl ismijiet dawn il-programmi "jissuġġerixxu, dawn qed Buggy daqsxejn, 258 00:20:37,710 --> 00:20:40,990 hekk missjoni tiegħek huwa biex insemmu għaliex bl-użu GDB. 259 00:20:40,990 --> 00:20:44,560 Ma kulħadd jkollhom magħhom jitniżżel / taf kif tikseb minnhom jitniżżel 260 00:20:44,560 --> 00:20:47,480 fis appliance tagħhom? Okay. 261 00:20:47,480 --> 00:20:56,400 >> Running ./buggy1, se ngħid tort Segmentazzjoni (qalba mormi), 262 00:20:56,400 --> 00:21:00,500 li kwalunkwe ħin ikollok segfault, hija ħaġa ħażina. 263 00:21:00,500 --> 00:21:03,810 Taħt liema ċirkostanzi do ikollok segfault? 264 00:21:03,810 --> 00:21:08,210 [Student] Dereferencing pointer null. >> Yeah. Allura dan huwa eżempju wieħed. 265 00:21:08,210 --> 00:21:11,580 Dereferencing pointer null int ser tikseb segfault. 266 00:21:11,580 --> 00:21:16,720 What a segfault ifisser huwa inti qed jmissu memorja inti m'għandekx tkun tmiss. 267 00:21:16,720 --> 00:21:21,350 Allura dereferencing pointer null qed imiss indirizz 0, 268 00:21:21,350 --> 00:21:28,060 u bażikament, kompjuters kollha llum ngħid li 0 indirizz tal-memorja inti m'għandekx tkun tmiss. 269 00:21:28,060 --> 00:21:31,920 Allura hu għalhekk li dereferencing tirriżulta pointer nulla fi segfault. 270 00:21:31,920 --> 00:21:37,210 Meta inti jiġri li ma initialize pointer, allura għandu valur żibel, 271 00:21:37,210 --> 00:21:41,520 u hekk meta inti tipprova dereference dan, fil-probabbiltà kollha int jmissu memorja 272 00:21:41,520 --> 00:21:43,540 dan huwa fin-nofs ta 'mkien. 273 00:21:43,540 --> 00:21:45,650 Jekk jiġri li tikseb xortik tajba u l-valur taż-żibel 274 00:21:45,650 --> 00:21:48,440 ġara għall-punt li x'imkien fuq il-munzell jew xi ħaġa, 275 00:21:48,440 --> 00:21:50,820 allura meta inti dereference li werrej li int ma initialized, 276 00:21:50,820 --> 00:21:52,730 xejn se tmur ħażin. 277 00:21:52,730 --> 00:21:55,480 Imma jekk huwa tipponta għal, per eżempju, x'imkien bejn il-munzell u l-munzell, 278 00:21:55,480 --> 00:21:59,850 jew huwa tipponta biss biex x'imkien li ma tkunx ġiet użata mill-programm tiegħek għadhom, 279 00:21:59,850 --> 00:22:02,240 allura int jmissu memorja inti ma għandhomx ikunu jmissu u inti segfault. 280 00:22:02,240 --> 00:22:06,370 Meta inti tikteb funzjoni rikursivi u recurses wisq drabi 281 00:22:06,370 --> 00:22:08,720 u munzell tiegħek tikber wisq kbar u l-collides munzell fis-affarijiet 282 00:22:08,720 --> 00:22:12,270 li ma għandu jkun jaħbtu ma ', int jmissu memorja inti m'għandekx tkun tmiss, 283 00:22:12,270 --> 00:22:14,810 sabiex inti segfault. 284 00:22:14,810 --> 00:22:17,010 Dan huwa dak li segfault hu. 285 00:22:17,010 --> 00:22:21,810 >> Huwa wkoll l-istess raġuni li jekk għandek string simili - 286 00:22:21,810 --> 00:22:23,930 ejja mur lura għall-programm preċedenti. 287 00:22:23,930 --> 00:22:28,530 Fil hello.c--I'm biss se tagħmel xi ħaġa oħra. 288 00:22:28,530 --> 00:22:33,770 char * s = "bonjour dinja!"; 289 00:22:33,770 --> 00:22:42,310 Jekk I użu * i = ħaġa jew i [0] = "X"; 290 00:22:42,310 --> 00:22:47,290 sabiex tagħmel hello,. / hello, għaliex ma dan segfault? 291 00:22:48,410 --> 00:22:51,250 Għaliex ma dan segfault? 292 00:22:55,660 --> 00:22:57,890 What would you tistenna li jiġri? 293 00:22:57,890 --> 00:23:06,640 Jekk jien ma printf ("% s \ n", i); dak li inti tistenna li jiġu stampati? 294 00:23:06,640 --> 00:23:09,930 [Student] X bonjour. >> Yeah. 295 00:23:09,930 --> 00:23:15,140 Il-problema hija li meta inti tiddikjara string bħal dan, 296 00:23:15,140 --> 00:23:18,190 i huwa pointer li għaddej biex imorru fuq il-munzell, 297 00:23:18,190 --> 00:23:25,880 u dak i hija li tipponta lejn huwa dan sekwenza tiegħu jinsab fl-read-only-memorja. 298 00:23:25,880 --> 00:23:30,560 Hekk biss bl-isem, read-only memory, għandek tikseb l-idea 299 00:23:30,560 --> 00:23:33,010 li jekk inti tipprova li jibdlu x'hemm read-only-memorja, 300 00:23:33,010 --> 00:23:36,670 inti qed tagħmel xi ħaġa inti ma għandha tkun qiegħda tagħmel bil-memorja u inti segfault. 301 00:23:36,670 --> 00:23:45,360 Dan huwa attwalment differenza kbira bejn char * su char i []. 302 00:23:45,360 --> 00:23:48,790 Allura char s [], issa din is-sekwenza se jitpoġġew fuq il-munzell, 303 00:23:48,790 --> 00:23:53,960 u l-munzell hu ma taqra-biss, li jfisser li dan għandu jaħdem perfettament multa. 304 00:23:55,500 --> 00:23:57,370 U ma. 305 00:23:57,370 --> 00:24:06,250 Ftakar li meta nagħmel char * i = "bonjour dinja!", I innifsu huwa fuq il-munzell 306 00:24:06,250 --> 00:24:10,390 imma punti i sa x'imkien ieħor, u li x'imkien ieħor jiġri li jinqraw-biss. 307 00:24:10,390 --> 00:24:15,640 Iżda char s [] huwa biss xi ħaġa fuq il-munzell. 308 00:24:17,560 --> 00:24:21,760 Allura dak eżempju ieħor ta 'segfault jiġri. 309 00:24:21,760 --> 00:24:27,820 >> Rajna li ./buggy1 rriżulta fi segfault. 310 00:24:27,820 --> 00:24:31,810 Fit-teorija, inti m'għandekx tħares lejn buggy1.c immedjatament. 311 00:24:31,810 --> 00:24:35,170 Minflok, aħna ser tħares lejn dan permezz GDB. 312 00:24:35,170 --> 00:24:37,750 Avviż li meta ikollok tort Segmentazzjoni (qalba mormi), 313 00:24:37,750 --> 00:24:40,850 ikollok dan il-fajl fuq qalba hawn imsejħa. 314 00:24:40,850 --> 00:24:45,200 Jekk aħna ls-l, aħna ser tara li qalba hija ġeneralment fajl pretty big. 315 00:24:45,200 --> 00:24:51,580 Dan huwa n-numru ta 'bytes tal-fajl, hekk jidher qisu huwa 250-xi ħaġa kilobytes. 316 00:24:51,580 --> 00:24:56,120 Ir-raġuni għal dan hija li dak li l-miżbla qalba attwalment hija 317 00:24:56,120 --> 00:25:01,410 huwa meta ġġarrfu programm tiegħek, l-istat ta 'memorja tal-programm tiegħek 318 00:25:01,410 --> 00:25:05,230 biss gets kkupjati u pasted fis dan il-fajl. 319 00:25:05,230 --> 00:25:07,270 Hija gets iddampjati fis dan il-fajl. 320 00:25:07,270 --> 00:25:13,060 Dan il-programm, filwaqt li kien għaddej, ġara li jkollhom użu tal-memorja ta 'madwar 250 kilobytes, 321 00:25:13,060 --> 00:25:17,040 u hekk dan huwa dak ltqajna iddampjati fis dan il-fajl. 322 00:25:17,040 --> 00:25:23,630 Issa inti tista 'tħares lejn dan il-fajl jekk nagħmlu GDB qalba buggy1. 323 00:25:23,630 --> 00:25:30,130 Nistgħu biss tagħmel GDB buggy1, u li se biss jibdew GDB regolarment, 324 00:25:30,130 --> 00:25:33,800 użu buggy1 bħala input fajl tagħha. 325 00:25:33,800 --> 00:25:38,260 Imma jekk inti tagħmel GDB qalba buggy1, allura huwa speċifikament ser jibdew GDB 326 00:25:38,260 --> 00:25:40,330 billi tħares lejn dan il-fajl qalba. 327 00:25:40,330 --> 00:25:45,560 U inti tgħid GDB ifisser buggy1 jaf li dan il-fajl qalba ġej mill-programm buggy1. 328 00:25:45,560 --> 00:25:49,580 Allura GDB buggy1 qalba se immedjatament jressaqna 329 00:25:49,580 --> 00:25:52,060 li fejn il-programm ġara li jittermina. 330 00:25:57,720 --> 00:26:02,340 Naraw hawnhekk Programm terminat bil-sinjal 11, tort Segmentazzjoni. 331 00:26:02,340 --> 00:26:10,110 Aħna jiġri li tara linja ta 'assemblaġġ, li probabbilment mhuwiex utli ħafna. 332 00:26:10,110 --> 00:26:15,360 Imma jekk inti tip bt jew backtrace, li għaddej biex tkun il-funzjoni tal- 333 00:26:15,360 --> 00:26:19,430 li jagħtina l-lista ta 'frejms tagħna munzell attwali. 334 00:26:19,430 --> 00:26:23,150 . Backtrace Allura Jidher qisu aħna biss frames munzell 2. 335 00:26:23,150 --> 00:26:26,310 L-ewwel hija qafas tagħna munzell prinċipali, 336 00:26:26,310 --> 00:26:29,810 u t-tieni huwa l-qafas munzell għal din il-funzjoni li aħna jiġri li jkun fil- 337 00:26:29,810 --> 00:26:34,440 li qisu aħna biss għandhom il-kodiċi assemblaġġ għall. 338 00:26:34,440 --> 00:26:38,050 Mela ejja mmorru lura fil-funzjoni ewlenija tagħna, 339 00:26:38,050 --> 00:26:42,300 u li jagħmlu li nistgħu nagħmlu frame 1, u naħseb nistgħu wkoll nagħmlu l isfel, 340 00:26:42,300 --> 00:26:45,160 imma jien kważi qatt do isfel - jew up. Yeah. 341 00:26:45,160 --> 00:26:50,710 Up u 'l isfel. Up ġġib inti up qafas munzell wieħed, down ġġib inti isfel qafas munzell. 342 00:26:50,710 --> 00:26:53,240 I-tendenza li qatt ma jużaw dan. 343 00:26:53,240 --> 00:26:59,120 I biss speċifikament jgħidu qafas 1, li hu li tmur għall-qafas ittikjati 1. 344 00:26:59,120 --> 00:27:01,750 Frame 1 se jressaqna fis frame munzell prinċipali, 345 00:27:01,750 --> 00:27:05,570 u jgħid dritt hawn il-linja tal-kodiċi aħna jiġri li tkun fil. 346 00:27:05,570 --> 00:27:07,950 Jekk ridna linji koppja aktar ta 'kodiċi, nistgħu ngħidu lista, 347 00:27:07,950 --> 00:27:11,280 u li għaddej biex tagħtina l-linji ta 'kodiċi madwaru. 348 00:27:11,280 --> 00:27:13,360 Il-linja aħna segfaulted fuq kien 6: 349 00:27:13,360 --> 00:27:17,360 jekk (strcmp ("CS50 blat", ARGV [1]) == 0). 350 00:27:17,360 --> 00:27:24,130 Jekk ma jkunx ovvju għadhom, inti tista 'tikseb hija dritta minn hawn biss billi jaħsbu għaliex segfaulted. 351 00:27:24,130 --> 00:27:28,800 Iżda nistgħu teħodha pass ulterjuri u jgħidu, "Għaliex kieku ARGV [1] segfault?" 352 00:27:28,800 --> 00:27:38,830 Print Ejja ARGV [1], u jidher qisu 0x0 huwa, li huwa l-pointer null. 353 00:27:38,830 --> 00:27:44,750 Aħna strcmping CS50 blat u nulla, u b'tali mod li għaddej biex segfault. 354 00:27:44,750 --> 00:27:48,280 U għaliex huwa ARGV [1] null? 355 00:27:48,640 --> 00:27:51,280 [Student] Minħabba li aħna ma tathiex ebda argument kmand tal-linja. 356 00:27:51,280 --> 00:27:53,390 Yeah. Aħna ma tagħtiha ebda argument kmand tal-linja. 357 00:27:53,390 --> 00:27:58,460 Allura ./buggy1 huwa biss se jkollhom ARGV [0] tkun ./buggy1. 358 00:27:58,460 --> 00:28:02,100 Huwa mhux ser ikollhom ARGV [1], b'tali mod li għaddej biex segfault. 359 00:28:02,100 --> 00:28:07,450 Iżda jekk, minflok, I do biss CS50, li għaddej biex ngħid Ikollok D 360 00:28:07,450 --> 00:28:09,950 għaliex dan huwa dak li huwa suppost tagħmel. 361 00:28:09,950 --> 00:28:15,240 Ħarsa lejn buggy1.c, huwa suppost li jistampaw "Ikollok D" - 362 00:28:15,240 --> 00:28:20,820 Jekk ARGV [1] mhuwiex "CS50 blat", "Ikollok D", inkella "Ikollok A!" 363 00:28:20,820 --> 00:28:25,660 Allura jekk aħna tixtieq A, għandna bżonn dan li jqabblu bħala vera, 364 00:28:25,660 --> 00:28:28,710 li jfisser li jikkompara għal 0. 365 00:28:28,710 --> 00:28:31,100 Allura ARGV [1] jeħtieġ li jkunu "CS50 blat". 366 00:28:31,100 --> 00:28:35,660 Jekk inti tixtieq li tagħmel dan fuq il-linja tal-kmand, inti għandek bżonn tuża \ jaħarbu l-ispazju. 367 00:28:35,660 --> 00:28:41,690 Allura CS50 \ blat and You tikseb A! 368 00:28:41,690 --> 00:28:44,060 Jekk inti ma tagħmel l-backslash, għaliex ma dan ma taħdimx? 369 00:28:44,060 --> 00:28:47,190 [Student] Huwa żewġ argumenti differenti. >> Yeah. 370 00:28:47,190 --> 00:28:52,540 ARGV [1] se tkun CS50, u ARGV [2] se tkun blat. Okay. 371 00:28:52,540 --> 00:28:56,470 >> Issa ./buggy2 se segfault mill-ġdid. 372 00:28:56,470 --> 00:29:01,880 Minflok jinfetaħ il-fajl qalba tagħha, aħna ser biss tiftaħ buggy2 direttament, 373 00:29:01,880 --> 00:29:05,000 hekk GDB buggy2. 374 00:29:05,000 --> 00:29:09,590 Issa jekk aħna biss run-programm tagħna, allura huwa għaddej biex ngħid Programm riċevut sinjal SIGSEGV, 375 00:29:09,590 --> 00:29:15,530 li hija l-segfault sinjal, u dan huwa fejn ma ġara biex iseħħ. 376 00:29:15,530 --> 00:29:21,250 Ħarsa lejn backtrace tagħna, naraw li aħna kienu fil-oh_no funzjoni, 377 00:29:21,250 --> 00:29:23,900 li kienet tissejjaħ mill-dinky funzjoni, li kienet tissejjaħ mill-Binky funzjoni, 378 00:29:23,900 --> 00:29:26,460 li kienet tissejjaħ mill prinċipali. 379 00:29:26,460 --> 00:29:31,680 Nistgħu wkoll tara l-argumenti li dawn il-funzjonijiet. 380 00:29:31,680 --> 00:29:34,680 L-argument li dinky u Binky kien 1. 381 00:29:34,680 --> 00:29:44,390 Jekk aħna lista l-funzjoni oh_no, naraw li oh_no hija biss tagħmel char ** i = NULL; 382 00:29:44,390 --> 00:29:47,410 * I = "Boom"; 383 00:29:47,410 --> 00:29:50,330 Għaliex kieku dik jonqsu? 384 00:29:54,330 --> 00:29:58,380 [Student] Inti ma tistax dereference-pointer null? >> Yeah. 385 00:29:58,380 --> 00:30:06,090 Dan huwa biss qal i huwa NULL, irrispettivament jekk dan jiġri li jkun hemm ** char, 386 00:30:06,090 --> 00:30:12,070 li, jiddependi fuq kif inti tinterpreta dan, din tista 'tkun pointer għal pointer għal string 387 00:30:12,070 --> 00:30:15,550 jew firxa ta 'spag. 388 00:30:15,550 --> 00:30:21,430 Huwa i huwa NULL, għalhekk * i huwa dereferencing pointer null, 389 00:30:21,430 --> 00:30:24,800 u għalhekk dan se crash. 390 00:30:24,800 --> 00:30:27,540 Dan huwa wieħed mill-modi mgħaġġel inti tista 'possibilment segfault. 391 00:30:27,540 --> 00:30:31,300 Huwa biss li tiddikjara pointer null u immedjatament segfaulting. 392 00:30:31,300 --> 00:30:34,570 Dak hu li oh_no qed tagħmel. 393 00:30:34,570 --> 00:30:43,400 Jekk immorru sa frame wieħed, allura aħna qed tmur biex tikseb fis-funzjoni li tissejjaħ oh_no. 394 00:30:43,400 --> 00:30:44,830 I bżonn tagħmel dan isfel. 395 00:30:44,830 --> 00:30:48,610 Jekk inti ma tidħol kmand u inti biss hit Ikteb mill-ġdid, 396 00:30:48,610 --> 00:30:52,350 se biss jirrepetu l-kmand ta 'qabel li inti dam. 397 00:30:52,350 --> 00:30:56,610 Aħna fil-qafas 1. 398 00:30:56,610 --> 00:31:04,650 Elenkar dan il-qafas, naraw hawnhekk huwa funzjoni tagħna. 399 00:31:04,650 --> 00:31:08,520 Tista 'hit lista mill-ġdid, jew inti tista' tagħmel lista 20 u se lista aktar. 400 00:31:08,520 --> 00:31:13,640 Il dinky funzjoni jgħid jekk i huwa 1, imbagħad mur għall-funzjoni oh_no, 401 00:31:13,640 --> 00:31:15,960 inkella mur l-funzjoni slinky. 402 00:31:15,960 --> 00:31:18,700 U nafu i hija l-1 għaliex aħna jiġri biex tara up hawn 403 00:31:18,700 --> 00:31:22,560 li dinky kienet tissejjaħ l-argument 1. 404 00:31:22,560 --> 00:31:27,560 Jew tista 'biss tagħmel jistampaw i u se ngħid i hija l-1. 405 00:31:27,560 --> 00:31:33,770 Aħna bħalissa dinky, u jekk immorru sa ieħor frame, nafu aħna ser jispiċċaw fil Binky. 406 00:31:33,770 --> 00:31:36,600 Up. Issa aħna qed fl Binky. 407 00:31:36,600 --> 00:31:41,340 Elenkar din il-funzjoni - il-lista mill-qabel nofs cut me off - 408 00:31:41,340 --> 00:31:52,670 dan beda off bħala jekk i huwa 0, allura aħna qed tmur biex sejħa hija oh_no, inkella sejħa dinky. 409 00:31:52,670 --> 00:31:57,000 Nafu i kien 1, u għalhekk imsejħa dinky. 410 00:31:57,000 --> 00:32:05,030 U issa aħna qed lura fl prinċipali, u prinċipali huwa biss se tkun int i = Rand ()% 3; 411 00:32:05,030 --> 00:32:08,790 Dan huwa biss se jagħtuk numru bl-addoċċ li huwa jew 0, 1, jew 2. 412 00:32:08,790 --> 00:32:12,780 Huwa ser sejħa Binky ma 'dak in-numru, u ser jirritorna 0. 413 00:32:12,780 --> 00:32:16,700 Ħarsa lejn din, 414 00:32:16,700 --> 00:32:19,880 ftit mixi permezz tal-programm manwalment mingħajr ma tinkorri immedjatament, 415 00:32:19,880 --> 00:32:25,400 inti jiffissaw punt tal-qasma fil-prinċipali, li jfisser li meta aħna tmexxi l-programm 416 00:32:25,400 --> 00:32:31,020 programm tiegħek runs up sakemm hits punt waqfa. 417 00:32:31,020 --> 00:32:35,450 Allura tħaddim tal-programm, se run u mbagħad se tolqot l-funzjoni prinċipali u tieqaf taħdem. 418 00:32:35,450 --> 00:32:44,700 Issa aħna qed ġewwa ta 'prinċipali, u l-pass li jmiss jew se jressaqna għall-linja li jmiss tal-kodiċi. 419 00:32:44,700 --> 00:32:47,050 Tista 'tagħmel pass jew li jmiss. 420 00:32:47,050 --> 00:32:51,800 Laqtu jmiss, issa i ġiet stabbilita sa rand ()% 3, sabiex inkunu nistgħu jistampaw il-valur tal-i, 421 00:32:51,800 --> 00:32:55,280 u se ngħid i hija l-1. 422 00:32:55,280 --> 00:32:58,110 Issa dan ma jimpurtax jekk nużaw jmiss jew pass. 423 00:32:58,110 --> 00:33:01,000 I raden mattered fil dak preċedenti, imma aħna rridu li jużaw jmiss. 424 00:33:01,000 --> 00:33:06,000 Jekk nużaw pass, aħna pass lejn il-funzjoni, li tfisser ħarsa lejn il-ħaġa reali 425 00:33:06,000 --> 00:33:07,940 li qed jiġri ġewwa ta 'Binky. 426 00:33:07,940 --> 00:33:10,510 Jekk nużaw jmiss, allura dan ifisser jmorru fuq il-funzjoni 427 00:33:10,510 --> 00:33:14,070 u biss jmorru mal-linja li jmiss tal-kodiċi fil-funzjoni ewlenija tagħna. 428 00:33:14,070 --> 00:33:17,900 Dritt hawn fuq din il-linja, I kien fil fejn hija qalet rand ()% 3; 429 00:33:17,900 --> 00:33:21,320 jekk I ma pass, dan imur fl-implimentazzjoni tal rand 430 00:33:21,320 --> 00:33:25,110 u tħares lejn dak li qed jiġri hemmhekk, u I tista 'żżid permezz tal-funzjoni rand. 431 00:33:25,110 --> 00:33:26,920 Imma jien ma jimpurtahom dwar il-funzjoni rand. 432 00:33:26,920 --> 00:33:30,190 I biss trid tmur fil-linja li jmiss tal-kodiċi fl prinċipali, so I użu li jmiss. 433 00:33:30,190 --> 00:33:35,800 Imma issa I do kura dwar il-funzjoni Binky, hekk nixtieq li pass lejn dan. 434 00:33:35,800 --> 00:33:37,730 Issa jien fil Binky. 435 00:33:37,730 --> 00:33:42,040 L-ewwel linja tal-kodiċi li jkun ser jgħidu jekk (i == 0), I tieħu pass, 436 00:33:42,040 --> 00:33:44,930 naraw aħna jispiċċaw fil dinky. 437 00:33:44,930 --> 00:33:51,620 Jekk l-affarijiet lista aħna, naraw li hija vverifikat huwa i = 0. 438 00:33:51,620 --> 00:33:55,470 i mhux ugwali għal 0, u għalhekk marru għall-kondizzjoni oħra, 439 00:33:55,470 --> 00:33:59,540 li se sejħa dinky (i). 440 00:33:59,540 --> 00:34:04,030 Inti tista 'titħawwad. 441 00:34:04,030 --> 00:34:07,380 Jekk inti biss ħarsa lejn dawn il-linji direttament, inti tista 'taħseb jekk (i == 0), 442 00:34:07,380 --> 00:34:10,800 okay, imbagħad I ħa pass u issa jien fuq dinky (i), 443 00:34:10,800 --> 00:34:14,120 inti tista 'taħseb li għandu jfisser i = 0 jew xi ħaġa. 444 00:34:14,120 --> 00:34:18,980 No Dan ifisser biss li jaf li din tista 'twaħħal direttament lill-dinky linja (i). 445 00:34:18,980 --> 00:34:23,300 Għaliex i ma tkunx 0, il-pass li jmiss mhux se jispiċċaw fil-ieħor. 446 00:34:23,300 --> 00:34:26,239 Else mhix konformi li għaddej biex tieqaf. 447 00:34:26,239 --> 00:34:31,570 Huwa biss se jmorru għall-linja li jmiss huwa jista 'effettivament tesegwixxi, li hija dinky (i). 448 00:34:31,570 --> 00:34:36,090 Titjib fis dinky (i), naraw jekk (i == 1). 449 00:34:36,090 --> 00:34:42,670 Aħna nafu i = 1, hekk meta aħna pass, nafu aħna qed tmur biex jispiċċaw fil oh_no 450 00:34:42,670 --> 00:34:46,489 għaliex i = 1 jitlob l oh_no funzjoni, li inti tista 'pass lejn, 451 00:34:46,489 --> 00:34:52,969 li se jistabbilixxu char ** i = l null u immedjatament "BOOM". 452 00:34:54,270 --> 00:34:59,690 U mbagħad fil-fatt tħares lejn l-implimentazzjoni ta 'buggy2, 453 00:34:59,690 --> 00:35:04,590 dan, i huwa biss jkollna numru bl-addoċċ - 0, 1, jew 2 - sejħa Binky, 454 00:35:04,590 --> 00:35:10,610 li jekk i huwa 0 hija tappella oh_no, inkella jitlob dinky, li taqa up here. 455 00:35:10,610 --> 00:35:18,100 Jekk i hija l-1, sejħa oh_no, inkella sejħa slinky, li ġejjin hawn, 456 00:35:18,100 --> 00:35:20,460 jekk i huwa 2, sejħa oh_no. 457 00:35:20,460 --> 00:35:24,720 Jien ma anki think hemm mod - 458 00:35:24,720 --> 00:35:30,030 Hawn xi ħadd jara mod ta 'teħid dan il-programm li mhux se segfault? 459 00:35:30,030 --> 00:35:37,530 Minħabba sakemm jien xi ħaġa nieqsa, jekk i huwa 0, inti ser immedjatament segfault, 460 00:35:37,530 --> 00:35:41,250 inkella inti tmur għal funzjoni li jekk i hija l-1 inti segfault, 461 00:35:41,250 --> 00:35:44,540 inkella inti tmur għal funzjoni fejn jekk i huwa 2 inti segfault. 462 00:35:44,540 --> 00:35:46,810 Allura l-ebda kwistjoni dak li inti, inti segfault. 463 00:35:46,810 --> 00:35:52,380 >> I raden mod wieħed ta 'iffissar ikun minflok tagħmel char ** i = NULL, 464 00:35:52,380 --> 00:35:55,610 inti tista 'malloc spazju għal dak string. 465 00:35:55,610 --> 00:36:04,230 Nistgħu nagħmlu malloc (sizeof) - sizeof liema? 466 00:36:09,910 --> 00:36:15,190 [Student] (char) * 5? >> Does this jidhru dritt? 467 00:36:15,190 --> 00:36:21,060 Jien wieħed jassumi din se taħdem jekk I attwalment dam, iżda mhux dak li jien infittxu. 468 00:36:24,400 --> 00:36:32,940 Ħares lejn il-tip ta 's. Ejja żid * int, hekk int * x. 469 00:36:32,940 --> 00:36:35,600 Jien kont nagħmel malloc (sizeof (int)). 470 00:36:35,600 --> 00:36:40,490 Jew jekk jien ridt firxa ta '5, nixtieq do (sizeof (INT) * 5); 471 00:36:40,490 --> 00:36:44,210 X'jiġri jekk I jkollhom ** int? 472 00:36:46,260 --> 00:36:49,140 What I kieku malloc? 473 00:36:49,140 --> 00:36:53,510 [Student] Daqs tal-pointer. >> Yeah. (Sizeof (INT *)); 474 00:36:53,510 --> 00:36:56,960 L-istess ħaġa stabbiliti hawn. 475 00:36:56,960 --> 00:37:01,280 Irrid (sizeof (char *)); 476 00:37:06,170 --> 00:37:12,840 Dan ser jalloka l-ispazju għall-pointer li jindika "Boom". 477 00:37:12,840 --> 00:37:15,330 I m'għandhomx bżonn li jiġu allokati spazju għal "Boom" innifisha 478 00:37:15,330 --> 00:37:17,210 għaliex dan huwa bażikament ekwivalenti għal dak li għidt qabel 479 00:37:17,210 --> 00:37:20,870 ta 'char * x = "Boom". 480 00:37:20,870 --> 00:37:27,950 "BOOM" diġà jeżisti. Dan jiġri li jeżistu fir-reġjun jinqraw biss ta 'memorja. 481 00:37:27,950 --> 00:37:35,200 Iżda diġà jeżisti, li jfisser din il-linja tal-kodiċi, jekk i huwa ** char, 482 00:37:35,200 --> 00:37:43,900 allura * i huwa * char u int twaqqif din * char għall-punt għal "Boom". 483 00:37:43,900 --> 00:37:50,040 Jekk jien ridt li kopja "BOOM" fis s, imbagħad I bżonn li jiġu allokati spazju għall-i. 484 00:37:55,170 --> 00:38:03,900 I ser tagħmel * i = malloc (sizeof (char) * 5); 485 00:38:03,900 --> 00:38:06,210 Għaliex 5? 486 00:38:06,210 --> 00:38:10,860 Għaliex ma 4? Jidher qisu "BOOM" huwa 4 karattri. >> [Student] Il-karattru null. 487 00:38:10,860 --> 00:38:14,580 Yeah. Kollha ta 'kordi tiegħek ser jeħtieġu l-karattru null. 488 00:38:14,580 --> 00:38:23,590 Now I tista 'tagħmel xi ħaġa simili strcat - X'inhi l-funzjoni għall-ikkupjar string? 489 00:38:23,590 --> 00:38:28,520 [Student] cpy? >> Strcpy. 490 00:38:28,520 --> 00:38:32,700 strcpy bniedem. 491 00:38:36,120 --> 00:38:39,590 Allura strcpy jew strncpy. 492 00:38:39,590 --> 00:38:43,410 strncpy huwa daqsxejn aktar sikur minħabba li inti tista 'tispeċifika eżattament kemm karattri, 493 00:38:43,410 --> 00:38:46,190 iżda hawnhekk ma jimpurtax għax nafu. 494 00:38:46,190 --> 00:38:50,340 Allura strcpy u tfittex fil-argumenti. 495 00:38:50,340 --> 00:38:53,100 L-ewwel argument huwa d-destinazzjoni tagħna. 496 00:38:53,100 --> 00:38:56,770 It-tieni argument hija sors tagħna. 497 00:38:56,770 --> 00:39:10,310 Aħna ser kopja fis * destinazzjoni tagħna s-pointer "Boom". 498 00:39:10,310 --> 00:39:19,820 Għaliex jista inti tixtieq li tagħmel dan ma 'strcpy minflok biss dak li kellna qabel 499 00:39:19,820 --> 00:39:22,800 ta * s = "Boom"? 500 00:39:22,800 --> 00:39:28,630 Hemm raġuni inti tista 'tixtieq li tagħmel dan, iżda dak li hu din ir-raġuni? 501 00:39:28,630 --> 00:39:31,940 [Student] Jekk trid tibdel xi ħaġa fil-"Boom". >> Yeah. 502 00:39:31,940 --> 00:39:37,950 Now I tista 'tagħmel xi ħaġa simili i [0] = "X"; 503 00:39:37,950 --> 00:39:48,190 minħabba punti i għall-borġ u li l-ispazju fuq il-munzell li s hija li tipponta lejn 504 00:39:48,190 --> 00:39:52,320 huwa pointer li aktar spazju fuq il-munzell, li huwa ħażna "Boom". 505 00:39:52,320 --> 00:39:55,150 Allura din il-kopja ta '"BOOM" qed tiġi maħżuna fil-borġ. 506 00:39:55,150 --> 00:39:58,780 Hemm teknikament żewġ kopji ta 'BOOM "fil-programm tagħna. 507 00:39:58,780 --> 00:40:03,500 Hemm l-ewwel waħda li jinsab biss mogħti minn din kostanti "BOOM" spag, 508 00:40:03,500 --> 00:40:09,250 u t-tieni kopja ta '"BOOM", strcpy ħoloq il-kopja ta' "Boom". 509 00:40:09,250 --> 00:40:13,100 Iżda l-kopja ta '"BOOM" qed jiġi maħżun fuq il-munzell, u l-borġ int ħieles li jibdel. 510 00:40:13,100 --> 00:40:17,250 Il-munzell hu ma taqra-biss, b'tali mod li jfisser li s [0] 511 00:40:17,250 --> 00:40:20,500 se tavżak jibdlu l-valur ta '"Boom". 512 00:40:20,500 --> 00:40:23,130 Huwa ser tavżak tibdel dawk il-karattri. 513 00:40:23,130 --> 00:40:26,640 >> Mistoqsijiet? 514 00:40:27,740 --> 00:40:29,290 Okay. 515 00:40:29,290 --> 00:40:35,500 >> Nimxu fuq buggy3, ejja GDB buggy3. 516 00:40:35,500 --> 00:40:39,840 Aħna biss run u naraw aħna jiksbu segfault. 517 00:40:39,840 --> 00:40:46,550 Jekk aħna backtrace, hemm biss żewġ funzjonijiet. 518 00:40:46,550 --> 00:40:52,970 Jekk immorru up fis funzjoni prinċipali tagħna, naraw li aħna segfaulted fil din il-linja. 519 00:40:52,970 --> 00:41:00,180 Hekk biss tħares lejn din il-linja, għal (int linja = 0; fgets dan il-għalf ma NULL mhux ugwali; 520 00:41:00,180 --> 00:41:03,770 Linja + +). 521 00:41:03,770 --> 00:41:08,010 Qafas preċedenti tagħna kienet imsejħa _IO_fgets. 522 00:41:08,010 --> 00:41:10,720 Int ser ikollok tara li ħafna ma 'funzjonijiet C built-in, 523 00:41:10,720 --> 00:41:15,350 li meta ikollok l-segfault, se jkun hemm ismijiet funzjoni verament cryptic 524 00:41:15,350 --> 00:41:18,090 bħal dan _IO_fgets. 525 00:41:18,090 --> 00:41:21,770 Imma li għaddej biex jirrelataw ma 'din is-sejħa fgets. 526 00:41:21,770 --> 00:41:25,850 X'imkien ġewwa hawnhekk, aħna segfaulting. 527 00:41:25,850 --> 00:41:30,340 Jekk inħarsu lejn l-argumenti li fgets, nistgħu jistampaw buffer. 528 00:41:30,340 --> 00:41:41,180 Ejja tipprintja bħala - Oh, no. 529 00:41:48,980 --> 00:41:51,900 Stampa mhuwiex sejjer jaħdem eżattament kif I tixtieq li. 530 00:41:55,460 --> 00:41:58,000 Ejja nħarsu lejn l-programm attwali. 531 00:42:02,200 --> 00:42:09,640 Riserva huwa firxa karattru. Huwa firxa karattru ta '128 karattru. 532 00:42:09,640 --> 00:42:14,980 Allura meta I say buffer istampar, li għaddej biex jistampaw dawk il-karattri 128, 533 00:42:14,980 --> 00:42:18,300 li I raden huwa dak li huwa mistenni. 534 00:42:18,300 --> 00:42:21,390 What I kienet tfittex għal huwa jistampaw l-indirizz ta 'buffer, 535 00:42:21,390 --> 00:42:23,680 iżda li ma verament tell me ħafna. 536 00:42:23,680 --> 00:42:30,770 Allura meta I jiġri biex ngħid up here buffer x, dan juri me 0xbffff090, 537 00:42:30,770 --> 00:42:38,690 li, jekk tiftakar minn qabel jew f'xi punt, Oxbffff tendenza li tkun f'reġjun munzell ish. 538 00:42:38,690 --> 00:42:46,020 Il-munzell għandu tendenza li tibda x'imkien ftit inqas 0xc000. 539 00:42:46,020 --> 00:42:51,890 Biss billi jaraw dan l-indirizz, naf li buffer qed jiġri fuq il-munzell. 540 00:42:51,890 --> 00:43:04,500 Bidu mill-ġdid il-programm tiegħi, run, up, protezzjoni kontra rajna kien din is-sekwenza ta 'karattri 541 00:43:04,500 --> 00:43:06,530 li huma pjuttost ħafna sens. 542 00:43:06,530 --> 00:43:12,270 Imbagħad istampar fajl, dak ma fajl look like? 543 00:43:15,120 --> 00:43:17,310 [Student] Null. >> Yeah. 544 00:43:17,310 --> 00:43:22,610 Fajl huwa ta '* FAJL tip, u għalhekk huwa pointer, 545 00:43:22,610 --> 00:43:26,610 u l-valur ta 'dik pointer huwa null. 546 00:43:26,610 --> 00:43:33,240 Allura fgets se tipprova li jaqra minn dak pointer b'mod indirett, 547 00:43:33,240 --> 00:43:37,320 iżda sabiex ikun hemm aċċess dak pointer, għandu dereference dan. 548 00:43:37,320 --> 00:43:40,550 Jew, sabiex ikun hemm aċċess dak li għandu jkun li tipponta lejn, huwa dereferences dan. 549 00:43:40,550 --> 00:43:43,810 Allura huwa dereferencing pointer null u huwa segfaults. 550 00:43:46,600 --> 00:43:48,730 I setgħet jerġa hemmhekk. 551 00:43:48,730 --> 00:43:52,170 Jekk aħna break fil-punt ewlieni tagħna u run, 552 00:43:52,170 --> 00:43:57,320 l-ewwel linja tal-kodiċi hija char * file = "nonexistent.txt"; 553 00:43:57,320 --> 00:44:00,870 Dan għandu jagħti ħjiel kbira pretty għaliex dan il-programm jonqos. 554 00:44:00,870 --> 00:44:06,080 Ittajpjar jmiss jwassalni għall-linja li jmiss, fejn I miftuħa dan il-fajl, 555 00:44:06,080 --> 00:44:11,140 u mbagħad I immedjatament tikseb fis-linja tagħna, fejn darba I hit li jmiss, li għaddej biex segfault. 556 00:44:11,140 --> 00:44:16,880 Hawn xi ħadd tixtieq li tarmi l-raġuni għaliex aħna jista 'jkun segfaulting? 557 00:44:16,880 --> 00:44:19,130 [Student] File ma teżistix. >> Yeah. 558 00:44:19,130 --> 00:44:22,250 Dan suppost tkun ħjiel 559 00:44:22,250 --> 00:44:29,570 li kull meta inti qed jiftħu fajl għandek bżonn biex jivverifikaw li l-fajl fil-fatt teżisti. 560 00:44:29,570 --> 00:44:31,510 Allura hawnhekk, "nonexistent.txt"; 561 00:44:31,510 --> 00:44:34,700 Meta aħna filename fopen għall-qari, aħna mbagħad bżonn li jgħidu 562 00:44:34,700 --> 00:44:45,870 jekk (== fajl NULL) u jgħidu printf ("File ma jeżistix!" 563 00:44:45,870 --> 00:44:56,340 jew - aħjar għadhom - isem tal-file); ritorn 1; 564 00:44:56,340 --> 00:45:00,300 Allura issa aħna tikkontrolla biex tara jekk huwa NULL 565 00:45:00,300 --> 00:45:03,930 qabel ma effettivament kontinwu u tipprova taqra minn dan il-fajl. 566 00:45:03,930 --> 00:45:08,800 Nistgħu remake hija biss biex tara li li x-xogħlijiet. 567 00:45:11,020 --> 00:45:14,970 I maħsuba biex tinkludi linja ġdida. 568 00:45:21,090 --> 00:45:25,290 Allura issa nonexistent.txt ma teżistix. 569 00:45:26,890 --> 00:45:30,040 Għandek dejjem jiċċekkja għal dan it-tip ta 'ħaġa. 570 00:45:30,040 --> 00:45:33,870 Għandek dejjem tikkontrolla biex tara jekk fopen prospetti NULL. 571 00:45:33,870 --> 00:45:38,170 Għandek dejjem jivverifika sabiex ikun żgur li malloc ma ritorn NULL, 572 00:45:38,170 --> 00:45:41,410 jew inkella inti segfault. 573 00:45:42,200 --> 00:45:45,930 >> Issa buggy4.c. 574 00:45:49,190 --> 00:45:58,440 Running. Jien guessing dan huwa stennija għal input jew looping possibilment infinita. 575 00:45:58,440 --> 00:46:01,870 Iva, huwa looping infinita. 576 00:46:01,870 --> 00:46:05,560 Allura buggy4. Jidher qisu aħna qed looping infinita. 577 00:46:05,560 --> 00:46:12,590 Nistgħu break fil prinċipali, run program tagħna. 578 00:46:12,590 --> 00:46:20,180 Fil GDB, sakemm it-taqsira tuża mhijiex ambigwa 579 00:46:20,180 --> 00:46:23,420 jew abbrevjazzjonijiet speċjali li huma jipprovdu għalik, 580 00:46:23,420 --> 00:46:29,020 allura inti tista 'tuża n-użu li jmiss minflok li tip l jmiss it-triq kollha. 581 00:46:29,020 --> 00:46:33,730 U issa li stajt hit n darba, nista 'biss hit Ikteb biex jibqgħu għaddejjin jmiss 582 00:46:33,730 --> 00:46:36,640 minflok li hit n Daħħal, n Daħħal, n Ikteb. 583 00:46:36,640 --> 00:46:44,630 Jidher qisu jien f'xi tip ta 'għal linja li l-iffissar array [i] għal 0. 584 00:46:44,630 --> 00:46:50,510 Jidher qisu I am qatt breaking out ta 'dan għall loop. 585 00:46:50,510 --> 00:46:54,780 Jekk I jistampaw i, hekk i huwa 2, imbagħad I ser imorru jmiss. 586 00:46:54,780 --> 00:46:59,250 I ser jistampaw i, i huwa 3, imbagħad I ser imorru jmiss. 587 00:46:59,250 --> 00:47:05,360 I ser jistampaw i ui huwa 3. Sussegwentement, jistampa i, i hija 4. 588 00:47:05,360 --> 00:47:14,520 Attwalment, jistampa sizeof (array), sabiex id-daqs tal-array huwa ta '20. 589 00:47:16,310 --> 00:47:32,870 Iżda jidher qisu hemm xi kmand GDB speċjali biex imur jiġri xi ħaġa sakemm. 590 00:47:32,870 --> 00:47:37,620 Huwa simili tistabbilixxi kundizzjoni fuq il-valur tal-varjabbli. Imma I ma tiftakarx dak li hu. 591 00:47:37,620 --> 00:47:44,100 Allura jekk aħna jibqgħu għaddejjin - 592 00:47:44,100 --> 00:47:47,120 X'kont qed tgħid? What did inti tressaq up? 593 00:47:47,120 --> 00:47:50,500 [Student] Ma display i żid - >> Yeah. Allura wiri i tista 'tgħin. 594 00:47:50,500 --> 00:47:54,530 Jekk aħna biss display i, se tpoġġi up hawn dak il-valur tal-i hija 595 00:47:54,530 --> 00:47:56,470 so I ma jkollhom biex jistampaw it out kull darba. 596 00:47:56,470 --> 00:48:02,930 Jekk aħna biss iżommu għaddejjin li jmiss, naraw 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 Xi ħaġa li qed jiġri ħażin terriblement, ui qed reset għal 0. 598 00:48:13,330 --> 00:48:22,220 Ħarsa lejn buggy4.c, naraw dak kollu li jiġri huwa array int [5]; 599 00:48:22,220 --> 00:48:26,200 għal (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 What do naraw li l-ħażin hawn? 602 00:48:31,390 --> 00:48:39,480 Bħala ħjiel, meta I kienet tagħmel l GDB buggy4 - ejja break prinċipali, run - 603 00:48:39,480 --> 00:48:45,980 I ma print sizeof (array) biss biex tara dak il-kundizzjoni huwa fejn I għandhom finalment break out. 604 00:48:47,690 --> 00:48:51,100 Fejn am I? Did I run? 605 00:48:51,100 --> 00:48:54,280 I ma niddikjara s'issa. 606 00:48:54,280 --> 00:48:58,680 Allura print sizeof (array) u li l-20, 607 00:48:58,680 --> 00:49:06,690 li hu mistenni mill-firxa tiegħi huwa ta 'daqs 5 u huwa ta' 5 interi, 608 00:49:06,690 --> 00:49:12,410 hekk il-ħaġa sħiħa għandha tkun 5 * sizeof (int) bytes, fejn sizeof (int) għandha tendenza li jkun ta '4. 609 00:49:12,410 --> 00:49:14,780 Allura sizeof (array) huwa ta '20. 610 00:49:14,780 --> 00:49:17,420 X'għandu jkun dan? 611 00:49:17,420 --> 00:49:21,720 [Student] Maqsuma mill sizeof (int). >> Yeah, / sizeof (int). 612 00:49:21,720 --> 00:49:30,630 Jidher qisu hemm għadu problema hawn. Naħseb li dan għandu jkun biss < 613 00:49:30,630 --> 00:49:36,960 peress li huwa pjuttost ħafna dejjem 00:49:44,860 Issa ejja jaħsbu dwar għaliex dan kien effettivament miksura. 615 00:49:44,860 --> 00:49:53,370 Hawn xi ħadd li guesses għaliex kien i reset għal 0 permezz ta 'kull iterazzjoni tal-linja? 616 00:50:01,300 --> 00:50:09,350 L-unika ħaġa ġewwa ta 'hawnhekk li qed jiġri huwa li l array [i] qed jiġi ssettjat għal 0. 617 00:50:09,350 --> 00:50:15,350 Allura b'xi, din il-linja tal-kodiċi qed jikkawża int tagħna i li jkun issettjat għal 0. 618 00:50:16,730 --> 00:50:23,130 [Student] Jista 'jkun għaliex dan huwa prevalenti l-memorja ta' din il-parti ta 'i 619 00:50:23,130 --> 00:50:27,970 meta jidhirlu li huwa l-element li jmiss ta 'firxa? >> [Bowden] Iva. 620 00:50:27,970 --> 00:50:33,880 Meta aħna qed tmur lil hinn mill-aħħar tas firxa tagħna, 621 00:50:33,880 --> 00:50:39,870 b'xi mod li l-ispazju li aħna qed superjuri huwa prevalenti l-valur tal-i. 622 00:50:39,870 --> 00:50:48,030 U għalhekk jekk inħarsu fis buggy4, break prinċipali, run, 623 00:50:48,030 --> 00:50:53,120 ejja jistampa l-indirizz ta 'i. 624 00:50:53,120 --> 00:50:57,280 Jidher qisu huwa bffff124. 625 00:50:57,280 --> 00:51:03,930 Issa ejja jistampa l-indirizz tal-firxa [0]. 110. 626 00:51:03,930 --> 00:51:06,290 What about [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] hija bfff124. 629 00:51:14,530 --> 00:51:26,990 Allura array [5] għandha l-istess indirizz kif i, li jfisser li firxa [5] huwa i. 630 00:51:26,990 --> 00:51:30,720 Jekk ikollhom l-istess indirizz, huma l-istess ħaġa. 631 00:51:30,720 --> 00:51:38,410 Allura meta aħna waqqafna firxa [5] għal 0, aħna qegħdin jistabbilixxu i għal 0. 632 00:51:38,410 --> 00:51:46,070 U jekk taħseb dwar dan f'termini ta 'l-munzell, 633 00:51:46,070 --> 00:51:55,590 i int tkun dikjarata l-ewwel, li jfisser i gets xi spazju fuq il-munzell. 634 00:51:55,590 --> 00:52:04,730 Imbagħad array [5] huwa allokat, hekk allura 20 bytes huma allokati fuq il-munzell. 635 00:52:04,730 --> 00:52:08,400 Hekk i gets allokati l-ewwel, imbagħad dawn il-bytes 20 nikseb allokati. 636 00:52:08,400 --> 00:52:11,400 Hekk i jiġri dritt quddiem il-firxa, 637 00:52:11,400 --> 00:52:19,230 u minħabba l-mod, bħal I qal aħħar ġimgħa, fejn teknikament il-munzell tikber isfel, 638 00:52:19,230 --> 00:52:28,520 meta inti indiċi fi array, aħna garantit li l-pożizzjoni 0 fil-firxa 639 00:52:28,520 --> 00:52:31,970 dejjem jiġri qabel l-ewwel pożizzjoni fil-firxa. 640 00:52:31,970 --> 00:52:35,900 Dan huwa tip ta 'kif I ġibdet dan ġimgħa li għaddiet. 641 00:52:35,900 --> 00:52:42,210 Avviż li fil-qiegħ għandna indirizz 0 u fil-quċċata għandna Max indirizz. 642 00:52:42,210 --> 00:52:44,880 Il-munzell hu dejjem jikber isfel. 643 00:52:48,100 --> 00:52:53,500 Ejja ngħidu aħna jallokaw i. 644 00:52:53,500 --> 00:52:59,680 Aħna jallokaw numru sħiħ i, li jfisser ejja biss jgħidu up here numru sħiħ i gets allokat. 645 00:52:59,680 --> 00:53:06,420 Imbagħad aħna jallokaw firxa tagħna ta '5 interi, li jfisser li taħtha dan, 646 00:53:06,420 --> 00:53:11,230 peress li l-munzell qed jikber isfel, dawk interi 5 nikseb allokati. 647 00:53:11,230 --> 00:53:15,900 Iżda minħabba kif arrays xogħol, aħna qed garantit li l-ewwel pożizzjoni fil-firxa 648 00:53:15,900 --> 00:53:22,260 dejjem ikollu l-indirizz inqas mill-tieni ħaġa fil-firxa. 649 00:53:22,260 --> 00:53:28,270 Allura 0 pożizzjoni firxa dejjem għandu jiġri 1 fil-memorja, 650 00:53:28,270 --> 00:53:30,700 billi l-pożizzjoni array 1 għandu jiġri wara dik 651 00:53:30,700 --> 00:53:33,310 u l-pożizzjoni array 2 għandu jiġri wara dan, 652 00:53:33,310 --> 00:53:37,900 li jfisser li 0 pożizzjoni firxa jiġri x'imkien stabbiliti hawn, 653 00:53:37,900 --> 00:53:40,690 pożizzjoni array 1 jiġri hawn fuq li 654 00:53:40,690 --> 00:53:45,530 minħabba li jiċċaqalqu up ifisser indirizzi ogħla peress li l-indirizz massimu huwa up here. 655 00:53:45,530 --> 00:53:50,490 Allura array [0] stabbiliti hawn, array [1] sa hawn, array [2] up hawn, array [3] up here. 656 00:53:50,490 --> 00:53:55,620 Avviż kif qabel we allokat numru sħiħ i-triq kollha sa hawn, 657 00:53:55,620 --> 00:54:01,040 kif nimxu aktar u aktar fis firxa tagħna, aħna qed jersqu qrib u eqreb lejn numru sħiħ tagħna i. 658 00:54:01,040 --> 00:54:07,640 Huwa biss hekk jiġri li array [5], li huwa wieħed mill-pożizzjoni lilhinn firxa tagħna, 659 00:54:07,640 --> 00:54:13,010 huwa eżattament fejn integer i ġara li għandhom jiġu allokati. 660 00:54:13,010 --> 00:54:16,920 Allura dak l-punt fejn aħna jiġri li jkun laqtu l-ispazju fuq il-munzell 661 00:54:16,920 --> 00:54:21,680 li kien allokat għall-eqreb numru sħiħ i, u aħna qed jistabbilixxu li sa 0. 662 00:54:21,680 --> 00:54:26,160 >> Li kif din taħdem. Mistoqsijiet? Yeah. 663 00:54:26,160 --> 00:54:30,710 [Student] Never mind. Okay. 664 00:54:30,710 --> 00:54:33,090 [Student] Kif inti tevita dawn it-tip ta 'żbalji? 665 00:54:33,090 --> 00:54:41,190 Dawn it-tip ta 'żbalji? Tużax C bħala lingwa ta 'programmar tiegħek. 666 00:54:41,190 --> 00:54:45,840 Uża lingwa li għandha limiti array verifika. 667 00:54:45,840 --> 00:54:55,900 Sakemm int attent, inti biss jeħtieġ li jiġi evitat li jmorru passat l-limiti tal-firxa tiegħek. 668 00:54:55,900 --> 00:54:58,300 [Student] Allura hawnhekk meta aħna marru passat il-limiti tal-firxa tiegħek - 669 00:54:58,300 --> 00:55:01,840 [Bowden] Li meta l-affarijiet jibdew tmur ħażina. >> [Student] Oh, okay. 670 00:55:01,840 --> 00:55:05,730 Sakemm inti toqgħod fi ħdan il-memorja allokata għall-firxa tiegħek, int multa. 671 00:55:05,730 --> 00:55:12,400 Imma C ma ebda verifika ta 'żball. Jekk I do firxa [1000], se gladly biss timmodifika jiġri x'jiġri - 672 00:55:12,400 --> 00:55:16,500 Hija tmur għall-bidu ta 'l-array, allura tmur 1000 pożizzjonijiet wara u tistabbilixxi li sa 0. 673 00:55:16,500 --> 00:55:20,000 Ma tagħmel ebda verifika li oh, dan ma attwalment ikollhom 1000 l-affarijiet fiha. 674 00:55:20,000 --> 00:55:22,750 1000 hija mod lil hinn minn dak I għandu jiġi jinbidlu, 675 00:55:22,750 --> 00:55:26,940 billi Java jew xi ħaġa li inti ser tingħata firxa minn indiċi limiti 676 00:55:26,940 --> 00:55:29,820 jew indiċi minn limiti eċċezzjoni. 677 00:55:29,820 --> 00:55:33,950 C'est pourquoi ħafna ta 'lingwi ta' livell ogħla għandhom dawn l-affarijiet 678 00:55:33,950 --> 00:55:37,340 fejn jekk inti tmur lil hinn mill-limiti tal-firxa, inti tonqos 679 00:55:37,340 --> 00:55:40,070 sabiex inti ma tistax tbiddel l-affarijiet minn taħt inti 680 00:55:40,070 --> 00:55:42,590 u mbagħad l-affarijiet imorru ħafna agħar minn sempliċiment jkollna eċċezzjoni 681 00:55:42,590 --> 00:55:44,940 tgħid li inti marru lil hinn mill-aħħar tas-array. 682 00:55:44,940 --> 00:55:50,970 [Student] U hekk għandu għadna kemm biddlu l-<= għal ftit > [Bowden] Yeah. 683 00:55:50,970 --> 00:55:54,800 Għandu jkun 00:55:59,560 peress sizeof (array) hija ta '20, iżda aħna biss trid 5. >> [Student] Dritt. 685 00:55:59,560 --> 00:56:04,060 Mistoqsijiet Aktar? Okay. 686 00:56:04,060 --> 00:56:07,380 >> [Student] ikolli mistoqsija. >> Yeah. 687 00:56:07,380 --> 00:56:16,440 [Istudent] X'inhu l-varjabbli firxa attwali? 688 00:56:16,440 --> 00:56:20,000 [Bowden] Bħal dak li huwa array? 689 00:56:20,000 --> 00:56:24,930 Array nnifisha hija simbolu. 690 00:56:24,930 --> 00:56:31,490 Huwa biss l-indirizz tal-bidu tal-bytes 20 li aħna qed referenzar. 691 00:56:31,490 --> 00:56:38,070 Inti tista 'taħseb li bħala pointer, iżda huwa pointer kostanti. 692 00:56:38,070 --> 00:56:44,140 Hekk kif l-affarijiet nikseb miġbura, il-firxa varjabbli m'għadhiex teżisti. 693 00:56:44,140 --> 00:56:48,210 [Student] Allura kif issib id-daqs tal array? 694 00:56:48,210 --> 00:56:54,130 Daqs tal array jirreferi għad-daqs ta 'dik blokk li dak is-simbolu jirreferi għal. 695 00:56:54,130 --> 00:57:01,240 Meta I do xi ħaġa bħal printf ("% p \ n", array); 696 00:57:01,240 --> 00:57:05,140 ejja run. 697 00:57:12,960 --> 00:57:15,530 What did I biss tagħmel ħażin? 698 00:57:15,530 --> 00:57:19,220 "Firxa" Array ddikjarati hawnhekk. 699 00:57:20,820 --> 00:57:23,200 Oh, up here. 700 00:57:23,200 --> 00:57:31,250 Clang hija għaqlija, u dan jiġri li l-avviż li jien ddikjarat li l-firxa kif 5 elementi 701 00:57:31,250 --> 00:57:34,540 imma jien indiċjar fil-pożizzjoni 1000. 702 00:57:34,540 --> 00:57:38,450 Hija tista 'tagħmel dan minħabba li dawn huma biss kostanti. 703 00:57:38,450 --> 00:57:43,370 Hija tista 'ssir biss s'issa jinnota li jien jmorru lil hinn mill-limiti tal-firxa. 704 00:57:43,370 --> 00:57:46,880 Iżda avviż qabel meta kellna i mhux korrett, 705 00:57:46,880 --> 00:57:51,040 ma tistax tistabbilixxi kemm il-valuri i tista 'tieħu fuq, 706 00:57:51,040 --> 00:57:55,540 għalhekk ma tistax tistabbilixxi li i kienet tmur lil hinn mill-aħħar tas-array. 707 00:57:55,540 --> 00:57:59,430 Li jinsab biss clang qed għaqlija. 708 00:57:59,430 --> 00:58:03,340 >> Imma issa jagħmlu buggy4. Allura dak li inkella am I tagħmel ħażin? 709 00:58:03,340 --> 00:58:05,970 Impliċitament li tiddikjara funzjoni librerija "printf". 710 00:58:05,970 --> 00:58:14,960 Jien ser jridu # Jinkludu . 711 00:58:14,960 --> 00:58:18,710 Okay. Issa running buggy4. 712 00:58:18,710 --> 00:58:24,840 Stampar tal-valur tal-firxa bħal I ma hawn, l-istampar bħala indikatur 713 00:58:24,840 --> 00:58:30,060 prints xi ħaġa li tidher bħal dan - bfb8805c - li hija xi indirizz 714 00:58:30,060 --> 00:58:33,450 dan huwa fir-reġjun munzell ish. 715 00:58:33,450 --> 00:58:41,820 Array innifsu huwa bħal pointer, iżda mhuwiex indikatur attwali, 716 00:58:41,820 --> 00:58:45,410 peress pointer regolari nistgħu nbiddlu. 717 00:58:45,410 --> 00:58:54,700 Array huwa biss ftit kostanti. Il-blokki 20 ta 'memorja tibda fil 0xbfb8805c indirizz. 718 00:58:54,700 --> 00:59:09,020 Allura bfb8805c permezz ta 'dan l-indirizz +20--jew I raden -20 - 719 00:59:09,020 --> 00:59:17,400 hija kollha tal-memorja allokati għal dan il-firxa. 720 00:59:17,400 --> 00:59:20,350 Array, il-varjabbli nnifisha ma tkunx maħżuna kullimkien. 721 00:59:20,350 --> 00:59:27,660 Meta inti qed jikkompila, il kumpilatur - mewġa idejn fuq dan - 722 00:59:27,660 --> 00:59:33,060 iżda l-kumpilatur se biss użu fejn huwa jaf array li jkun. 723 00:59:33,060 --> 00:59:36,090 Huwa jaf fejn dik array jibda, 724 00:59:36,090 --> 00:59:40,910 u għalhekk jista 'biss dejjem tagħmel affarijiet f'termini ta' kumpensi minn dik bidu. 725 00:59:40,910 --> 00:59:43,960 Dan ma jkunx jeħtieġ varjabbli ruħha li jirrappreżentaw firxa. 726 00:59:43,960 --> 00:59:53,730 Imma meta I tagħmel xi ħaġa simili int * p = array; issa p huwa werrej li jindika li array, 727 00:59:53,730 --> 00:59:57,830 u issa p attwalment ma jeżistu fuq il-munzell. 728 00:59:57,830 --> 01:00:01,950 Jien ħielsa li jibdlu p. I tista 'tagħmel p = malloc. 729 01:00:01,950 --> 01:00:06,500 Għalhekk oriġinarjament indikat firxa; issa hija tfakkar li xi spazju fuq il-borġ. 730 01:00:06,500 --> 01:00:09,620 I ma tistax tagħmel firxa = malloc. 731 01:00:09,620 --> 01:00:13,710 Jekk clang hija għaqlija, se Yell fil lili dritt off BAT. 732 01:00:17,000 --> 01:00:21,430 Fil-fatt, jien pretty żgur GCC ser jagħmlu dan ukoll. 733 01:00:21,430 --> 01:00:25,010 Allura tip array "int [5]" mhuwiex assenjabbli. 734 01:00:25,010 --> 01:00:28,040 Inti ma tistax tassenja xi ħaġa ma 'tip array 735 01:00:28,040 --> 01:00:30,500 minħabba array huwa biss kostanti. 736 01:00:30,500 --> 01:00:34,760 Huwa simbolu li r-referenzi dawk bytes 20. I ma tistax tbiddel din. 737 01:00:34,760 --> 01:00:37,690 >> [Student] U fejn hija l-daqs tal-array maħżuna? 738 01:00:37,690 --> 01:00:40,670 [Bowden] Mhuwiex maħżuna kullimkien. Huwa meta huwa kumpilazzjoni. 739 01:00:40,670 --> 01:00:46,310 Għalhekk, fejn huwa l-daqs tal-array maħżuna? 740 01:00:46,310 --> 01:00:51,870 Tista 'tuża biss sizeof (array) ġewwa tal-funzjoni li l-firxa hija ddikjarata innifsu. 741 01:00:51,870 --> 01:01:03,150 Mela jekk jien tagħmel xi funzjoni, foo, u jien (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 u mbagħad stabbiliti hawn I call foo (array); 744 01:01:21,330 --> 01:01:24,840 ġewwa ta 'din il-funzjoni - ejja run. 745 01:01:34,200 --> 01:01:36,840 Dan huwa clang qed għaqlija mill-ġdid. 746 01:01:36,840 --> 01:01:43,890 Huwa me javżak li sizeof fuq parametru funzjoni firxa 747 01:01:43,890 --> 01:01:46,690 se terġa 'lura daqs ta' '* int ". 748 01:01:46,690 --> 01:01:55,150 Dan ikun żball jekk mhuwiex dak li ridt li jiġri. 749 01:01:55,150 --> 01:01:58,960 Ejja attwalment itfi Werror. 750 01:02:14,950 --> 01:02:17,590 Twissija. Twissijiet huma multa. 751 01:02:17,590 --> 01:02:19,960 Hija xorta se jiġbor sakemm ikollu twissija. 752 01:02:19,960 --> 01:02:22,910 . / A.out se print 4. 753 01:02:22,910 --> 01:02:28,650 It-twissija li kienet iġġenerata hija indikazzjoni ċara ta 'dak li marret ħażin. 754 01:02:28,650 --> 01:02:34,120 Dan array int huwa biss se jistampaw sizeof (int *). 755 01:02:34,120 --> 01:02:39,790 Anke jekk nressaq array [5] fil hawn, huwa għadu biss se jistampaw sizeof (int *). 756 01:02:39,790 --> 01:02:47,440 Allura hekk kif inti għaddih fil-funzjoni, id-distinzjoni bejn matriċi u indikaturi 757 01:02:47,440 --> 01:02:49,670 huwa kważi ma jeżistix. 758 01:02:49,670 --> 01:02:52,640 Dan jiġri li jkun array li kien iddikjarat fuq il-munzell, 759 01:02:52,640 --> 01:02:58,300 iżda hekk kif aħna jgħaddu dak il-valur, din 0xbf blah, blah, blah fis din il-funzjoni, 760 01:02:58,300 --> 01:03:03,350 allura dan il-werrej li tinnota din array fuq il-munzell. 761 01:03:03,350 --> 01:03:08,310 Allura dan ifisser li sizeof tapplika biss fil-funzjoni li l-firxa kienet iddikjarat, 762 01:03:08,310 --> 01:03:11,230 li jfisser li meta inti qed jikkompila din il-funzjoni, 763 01:03:11,230 --> 01:03:17,330 meta clang tmur permezz din il-funzjoni, huwa jara array huwa firxa int ta 'daqs 5. 764 01:03:17,330 --> 01:03:20,640 Mela allura jara sizeof (array). Ukoll, li 20. 765 01:03:20,640 --> 01:03:26,440 Li l-fatt kif sizeof bażikament jaħdem għal kważi l-każijiet kollha. 766 01:03:26,440 --> 01:03:31,150 Sizeof mhix funzjoni, huwa l-operatur. 767 01:03:31,150 --> 01:03:33,570 Inti ma jpoġġux il-funzjoni sizeof. 768 01:03:33,570 --> 01:03:38,280 Sizeof (int), il-kumpilatur se biss tittraduċi dan sa 4. 769 01:03:41,480 --> 01:03:43,700 Ghandek it? Okay. 770 01:03:43,700 --> 01:03:47,520 >> [Student] Allura x'inhi d-differenza bejn sizeof (array) fl prinċipali u foo? 771 01:03:47,520 --> 01:03:52,840 Dan huwa għaliex aħna qed tgħid sizeof (array), li huwa ta '* int tip, 772 01:03:52,840 --> 01:03:57,120 billi l-firxa isfel hawnhekk mhix ta '* int tip, huwa ta' firxa int. 773 01:03:57,120 --> 01:04:04,540 >> [Student] Mela jekk kellek il-parametru fil array [] minflok firxa * int, 774 01:04:04,540 --> 01:04:09,230 ikun ifisser li inti tista 'xorta tbiddel firxa għaliex issa dan huwa pointer? 775 01:04:09,230 --> 01:04:14,250 [Bowden] Bħal din? >> [Student] Yeah. Tista tbiddel firxa fi ħdan il-funzjoni issa? 776 01:04:14,250 --> 01:04:18,420 [Bowden] Inti tista 'tbiddel firxa fiż-żewġ każijiet. 777 01:04:18,420 --> 01:04:23,130 F'dawn iż-żewġ każijiet inti liberu li tgħid array [4] = 0. 778 01:04:23,130 --> 01:04:26,590 [Student] Iżda tista 'tagħmel il-punt array biex xi ħaġa oħra? 779 01:04:26,590 --> 01:04:30,230 [Bowden] Oh. Yeah. Fi kwalunkwe każ - >> [student] Yeah. 780 01:04:30,230 --> 01:04:38,410 [Bowden] Id-distinzjoni bejn firxa [] u l-firxa * int, m'hemm xejn. 781 01:04:38,410 --> 01:04:42,570 Tista 'wkoll tikseb xi firxa multidimensjonali fil hawn 782 01:04:42,570 --> 01:04:47,050 għal xi sintassi konvenjenti, iżda huwa għadu biss pointer. 783 01:04:47,050 --> 01:04:56,400 Dan ifisser li jiena liberu li jagħmel array = malloc (sizeof (int)), u issa il-punt x'imkien ieħor. 784 01:04:56,400 --> 01:04:59,610 Iżda biss bħal kif dan jaħdem għal dejjem u dejjem, 785 01:04:59,610 --> 01:05:03,210 jinbidlu dan array billi jagħmilha punt li xi ħaġa oħra 786 01:05:03,210 --> 01:05:07,570 ma jbiddilx din il-firxa stabbiliti hawn, għaliex dan huwa kopja ta 'l-argument, 787 01:05:07,570 --> 01:05:10,780 mhuwiex pointer għal dan l-argument. 788 01:05:10,780 --> 01:05:16,070 U fil-fatt, biss bħala indikazzjoni aktar li huwa eżattament l-istess - 789 01:05:16,070 --> 01:05:21,100 aħna diġà raw dak prints firxa ta 'stampar - 790 01:05:21,100 --> 01:05:31,410 dak jekk aħna jistampaw l-indirizz ta 'l-array jew l-indirizz ta' l-indirizz tal-firxa 791 01:05:31,410 --> 01:05:36,290 ma 'jew ta' dawk? 792 01:05:41,770 --> 01:05:45,220 Ejja jinjora dan wieħed. 793 01:05:48,140 --> 01:05:51,660 Okay. Dan huwa multa. Huwa issa qed taħdem. / A.out. 794 01:05:51,660 --> 01:06:00,220 Firxa ta 'stampar, allura istampar l-indirizz ta' l-array, huma l-istess ħaġa. 795 01:06:00,220 --> 01:06:02,870 Array sempliċement ma jeżistix. 796 01:06:02,870 --> 01:06:08,190 Dan jaf meta int istampar firxa, int istampar s-simbolu li tirreferi għal dawk bytes 20. 797 01:06:08,190 --> 01:06:11,940 Stampar l-indirizz ta 'l-array, ukoll, array ma teżistix. 798 01:06:11,940 --> 01:06:17,200 Huwa ma jkollu l-indirizz, u għalhekk hija biss prints l-indirizz ta 'dawk bytes 20. 799 01:06:20,820 --> 01:06:28,150 Hekk kif inti tiġbor isfel, bħal fil buggy4 ikkumpilata tiegħek. / A.out, 800 01:06:28,150 --> 01:06:30,340 firxa hija kważi ma jeżistix. 801 01:06:30,340 --> 01:06:33,640 Pointers jeżistu. Arrays ma. 802 01:06:34,300 --> 01:06:38,060 Il-blokki ta 'memorja li jirrappreżentaw il-firxa għadhom jeżistu, 803 01:06:38,060 --> 01:06:43,270 iżda l-firxa varjabbli u fatturi varjabbli ta 'dak it-tip ma jeżistux. 804 01:06:46,260 --> 01:06:50,270 Dawk huma bħall-differenzi ewlenin bejn matriċi u indikaturi 805 01:06:50,270 --> 01:06:55,590 huma hekk kif inti tagħmel sejħiet funzjoni, m'hemm l-ebda differenza. 806 01:06:55,590 --> 01:07:00,460 Iżda ġewwa tal-funzjoni li l-firxa nnifisha hija ddikjarat, sizeof xogħlijiet differenti 807 01:07:00,460 --> 01:07:05,190 peress li int istampar id-daqs tal-blokki minflok id-daqs tat-tip, 808 01:07:05,190 --> 01:07:08,950 u inti ma tistax tbiddel din għaliex dan huwa simbolu. 809 01:07:08,950 --> 01:07:14,370 Stampar il-ħaġa u l-indirizz tal-ħaġa prints l-istess ħaġa. 810 01:07:14,370 --> 01:07:18,480 U li pretty ħafna minnha. 811 01:07:18,480 --> 01:07:20,820 [Student] Tista tgħid li waħda aktar ħin? 812 01:07:21,170 --> 01:07:24,170 I jista 'jkollhom qbiżt xi ħaġa. 813 01:07:24,170 --> 01:07:29,260 Firxa Stampar u indirizz tal array prints l-istess ħaġa, 814 01:07:29,260 --> 01:07:33,180 billi jekk inti print pointer kontra l-indirizz tal-pointer, 815 01:07:33,180 --> 01:07:36,010 l-unika ħaġa prints l-indirizz ta 'dak li qed tipponta lejn, 816 01:07:36,010 --> 01:07:40,360 l-oħra prints l-indirizz ta 'l-pointer fuq il-munzell. 817 01:07:40,360 --> 01:07:47,040 Tista 'bidla pointer, inti ma tistax tbiddel simbolu firxa. 818 01:07:47,740 --> 01:07:53,270 U pointer sizeof se jistampaw il-daqs ta 'dak it-tip pointer. 819 01:07:53,270 --> 01:07:57,470 Allura int * p sizeof (p) se jistampaw 4, 820 01:07:57,470 --> 01:08:04,110 imma int array [5] print sizeof (array) se print 20. 821 01:08:04,110 --> 01:08:07,480 [Student] Mela int array [5] se print 20? >> Iva. 822 01:08:07,480 --> 01:08:13,300 C'est pourquoi ġewwa ta buggy4 meta użati biex jiġi sizeof (array) 823 01:08:13,300 --> 01:08:16,660 dan kien isir i <20, li mhuwiex dak li ridna. 824 01:08:16,660 --> 01:08:20,880 Irridu i <5. >> [Student] Okay. 825 01:08:20,880 --> 01:08:25,569 [Bowden] U allura malli tibda tgħaddi fil-funzjonijiet, 826 01:08:25,569 --> 01:08:34,340 jekk aħna ma int * p = array; 827 01:08:34,340 --> 01:08:39,779 ġewwa ta 'din il-funzjoni, nistgħu bażikament jużaw p u firxa eżattament fl-istess mod, 828 01:08:39,779 --> 01:08:43,710 ħlief għall-problema sizeof u l-problema li qed jinbidlu. 829 01:08:43,710 --> 01:08:49,810 Imma p [0] = 1; huwa l-istess kif qal array [0] = 1; 830 01:08:49,810 --> 01:08:55,600 U hekk kif aħna ngħidu foo (array), jew foo (p); 831 01:08:55,600 --> 01:08:59,760 ġewwa tal-funzjoni foo, dan huwa l-istess sejħa darbtejn. 832 01:08:59,760 --> 01:09:03,350 M'hemm l-ebda differenza bejn dawn żewġ sejħiet. 833 01:09:07,029 --> 01:09:11,080 >> Tajba fuq kulħadd? Okay. 834 01:09:14,620 --> 01:09:17,950 We have 10 minuti. 835 01:09:17,950 --> 01:09:28,319 >> Aħna ser nipprova nikseb permezz ta 'dan il-programm Typer Hacker, 836 01:09:28,319 --> 01:09:32,350 din il-websajt, li ħareġ aħħar sena jew xi ħaġa. 837 01:09:34,149 --> 01:09:41,100 Huwa biss suppost li jkun simili inti tip saltwarjament u li tistampa - 838 01:09:41,100 --> 01:09:46,729 Tkun xi fajl dan jiġri jkun għabbew huwa dak li jidher qisu int ittajpjar. 839 01:09:46,729 --> 01:09:52,069 Jidher qisu xi tip ta 'kodiċi sistema operattiva. 840 01:09:53,760 --> 01:09:56,890 Dan huwa dak li rridu li jimplimentaw. 841 01:10:08,560 --> 01:10:11,690 Għandu jkollok eżekutibbli binarja jismu hacker_typer 842 01:10:11,690 --> 01:10:14,350 li jieħu fil argument, il-fajl li "tip Hacker." 843 01:10:14,350 --> 01:10:16,480 Running l-eżekutibbli għandu ċar l-iskrin 844 01:10:16,480 --> 01:10:20,850 u mbagħad jistampa karattru wieħed mill-inkartament għadda fil kull darba li l-utent jagħfas buttuna. 845 01:10:20,850 --> 01:10:24,990 Allura x'ikun ewlenin inti istampa, għandu armih u minflok tistampa karattru mill-fajl 846 01:10:24,990 --> 01:10:27,810 li huwa l-argument. 847 01:10:29,880 --> 01:10:34,350 I ser pretty ħafna jgħidlek liema l-affarijiet li aħna qed tmur għall-ħtieġa li jkunu jafu huma. 848 01:10:34,350 --> 01:10:36,440 Iżda aħna tixtieq li jiċċekkjaw il-librerija termios. 849 01:10:36,440 --> 01:10:44,840 I qatt ma użaw din il-librerija fil-ħajja kollu tiegħi, għalhekk għandu skopijiet ħafna minimu. 850 01:10:44,840 --> 01:10:48,610 Iżda dan se jkun il-librerija nistgħu nużaw biex tarmi l-karattru inti hit 851 01:10:48,610 --> 01:10:52,390 meta tkun qed tittajpja fis istandard pulzieri 852 01:10:56,970 --> 01:11:05,840 Allura hacker_typer.c, u aħna qed tmur jridu # Jinkludu . 853 01:11:05,840 --> 01:11:12,870 Ħarsa lejn il-paġna bniedem għall termios - I'm guessing terminali huwa OS jew xi ħaġa - 854 01:11:12,870 --> 01:11:16,240 I do not know kif biex taqraha. 855 01:11:16,240 --> 01:11:21,040 Ħarsa lejn din, jgħid li tinkludi dawn il-fajls 2, hekk aħna ser tagħmel dan. 856 01:11:37,620 --> 01:11:46,820 >> L-ewwel ħaġa l-ewwel, irridu li jieħdu fil argument, li huwa l-fajl għandna miftuħa. 857 01:11:46,820 --> 01:11:52,420 Mela xi do I trid tagħmel? Kif nista tikkontrolla biex tara għandi argument? 858 01:11:52,420 --> 01:11:56,480 [Student] Jekk argc ugwali dan. >> [Bowden] Yeah. 859 01:11:56,480 --> 01:12:21,250 Mela jekk (argc = 2!) Printf ("użu:% s [fajl li tiftaħ]"). 860 01:12:21,250 --> 01:12:32,750 Allura issa jekk I run dan mingħajr ma tipprovdi argument tieni - oh, I bżonn l-linja l-ġdida - 861 01:12:32,750 --> 01:12:36,240 int ser tara li jgħid l-użu:. / hacker_typer, 862 01:12:36,240 --> 01:12:39,770 u mbagħad it-tieni argument għandu jkun il-fajl Irrid li tiftaħ. 863 01:12:58,430 --> 01:13:01,260 Issa x'għandi nagħmel? 864 01:13:01,260 --> 01:13:08,490 Irrid li jinqara mill dan il-fajl. Kif nista tinqara minn fajl? 865 01:13:08,490 --> 01:13:11,920 [Student] Inti tiftaħ l-ewwel. >> Yeah. 866 01:13:11,920 --> 01:13:15,010 . Fopen Allura Xi jfisser fopen look like? 867 01:13:15,010 --> 01:13:22,980 [Student] Filename. >> [Bowden] Filename se tkun ARGV [1]. 868 01:13:22,980 --> 01:13:26,110 [Student] U allura dak li inti trid tagħmel ma 'dan, sabiex il - >> [Bowden] Yeah. 869 01:13:26,110 --> 01:13:28,740 Mela jekk inti ma tiftakar, inti biss tista 'tagħmel fopen bniedem, 870 01:13:28,740 --> 01:13:32,960 fejn huwa għaddej biex tkun const char * triq fejn passaġġ huwa file, 871 01:13:32,960 --> 01:13:34,970 const char * modalità. 872 01:13:34,970 --> 01:13:38,660 Jekk jiġri li ma tiftakar huwa mod dak, allura inti tista 'tfittex għall-modalità. 873 01:13:38,660 --> 01:13:44,660 Ġewwa ta 'paġni bniedem, il-karattru mmejla huwa dak li inti tista' tuża biex tfittex għal affarijiet. 874 01:13:44,660 --> 01:13:49,790 So I tip / modalità ta 'tiftix għal mod. 875 01:13:49,790 --> 01:13:57,130 u N huma dak li inti tista 'tuża biex ċiklu permezz tal-logħbiet tat-tiftix. 876 01:13:57,130 --> 01:13:59,800 Hawn jgħid il-punti modalità argument li string 877 01:13:59,800 --> 01:14:01,930 bidu ma 'waħda mill-sekwenzi li ġejjin. 878 01:14:01,930 --> 01:14:06,480 Allura r, Open test fajl għall-qari. Dan huwa dak li rridu nagħmlu. 879 01:14:08,930 --> 01:14:13,210 Għal qari, u nixtieq li jaħżen din. 880 01:14:13,210 --> 01:14:18,720 Il-ħaġa hija se tkun * FAJL. Issa dak li nixtieq do? 881 01:14:18,720 --> 01:14:21,200 Agħti me-tieni. 882 01:14:28,140 --> 01:14:30,430 Okay. Issa dak li nixtieq do? 883 01:14:30,430 --> 01:14:32,940 [Student] Iċċekkja jekk huwa NULL. >> [Bowden] Yeah. 884 01:14:32,940 --> 01:14:38,690 Kwalunkwe ħin li inti tiftaħ fajl, kun żgur li int b'suċċess tista 'tiftħu. 885 01:14:58,930 --> 01:15:10,460 >> Issa nixtieq li tagħmel dan Jittieħed termios fejn nixtieq li l-ewwel taqra settings kurrenti tiegħi 886 01:15:10,460 --> 01:15:14,050 u ħlief dawk fis xi ħaġa, imbagħad I trid tibdel settings tiegħi 887 01:15:14,050 --> 01:15:19,420 li tarmi kwalunkwe karattru li jien tip, 888 01:15:19,420 --> 01:15:22,520 u mbagħad nixtieq li jaġġornaw dawk settings. 889 01:15:22,520 --> 01:15:27,250 U mbagħad fl-aħħar tal-programm, nixtieq li bidla lura għas-settings oriġinali tiegħi. 890 01:15:27,250 --> 01:15:32,080 Allura l-Struct se tkun ta termios tip, u jien ser jridu tnejn ta 'dawk. 891 01:15:32,080 --> 01:15:35,600 L-ewwel waħda se tkun current_settings tiegħi, 892 01:15:35,600 --> 01:15:42,010 u allura dawn qed tmur biex tkun hacker_settings tiegħi. 893 01:15:42,010 --> 01:15:48,070 L-ewwel, jien ser tixtieq li tiffranka settings kurrenti tiegħi, 894 01:15:48,070 --> 01:15:53,790 allura jien ser tixtieq li taġġorna hacker_settings, 895 01:15:53,790 --> 01:16:01,570 u mbagħad il-mod fl-aħħar tal-programm tiegħi, nixtieq li jerġa 'lura għas-settings kurrenti. 896 01:16:01,570 --> 01:16:08,660 Allura iffrankar settings attwali, il-mod li jaħdem, termios bniedem aħna. 897 01:16:08,660 --> 01:16:15,810 Naraw li għandna dan tcsetattr int, int tcgetattr. 898 01:16:15,810 --> 01:16:22,960 I jgħaddu fi Struct termios minn pointer tagħha. 899 01:16:22,960 --> 01:16:30,640 Il-mod kif dan se tħares hu - I've diġà minsija dak li l-funzjoni kienet imsejħa. 900 01:16:30,640 --> 01:16:34,930 Kopja u paste. 901 01:16:39,150 --> 01:16:45,500 Allura tcgetattr, allura nixtieq li jgħaddu fil-Struct li jien iffrankar l-informazzjoni, 902 01:16:45,500 --> 01:16:49,650 li se tkun current_settings, 903 01:16:49,650 --> 01:16:59,120 u l-ewwel argument huwa l-deskrittur fajl għall-ħaġa nixtieq li jiffrankaw l-attributi ta '. 904 01:16:59,120 --> 01:17:04,360 X'inhu l-deskrittur fajl huwa huwa, bħal kull darba li inti tiftaħ fajl, jiġrilha deskrittur fajl. 905 01:17:04,360 --> 01:17:14,560 Meta I fopen ARGV [1], jiġrilha deskrittur fajl li inti referenzjar 906 01:17:14,560 --> 01:17:16,730 kull meta inti tixtieq li taqra jew tikteb lilha. 907 01:17:16,730 --> 01:17:19,220 Li mhux il-deskrittur fajl I jridu jużaw hawnhekk. 908 01:17:19,220 --> 01:17:21,940 Hemm tliet deskritturi fajl għandek kontumaċja, 909 01:17:21,940 --> 01:17:24,310 li huma standard fl-out standard, u l-iżball standard. 910 01:17:24,310 --> 01:17:29,960 Permezz ta 'default, naħseb li huwa standard fil huwa 0, l-istandard huwa 1, u l-iżball standard huwa 2. 911 01:17:29,960 --> 01:17:33,980 Mela xi do nixtieq li jbiddel l-issettjar ta '? 912 01:17:33,980 --> 01:17:37,370 Irrid li jbiddel l-issettjar ta 'kulmeta I hit karattru, 913 01:17:37,370 --> 01:17:41,590 Irrid li tarmi dan il-karattru bogħod minflok ta 'stampar lill-iskrin. 914 01:17:41,590 --> 01:17:45,960 Liema fluss - standard, barra standard, jew żball standard - 915 01:17:45,960 --> 01:17:52,050 jirrispondi għall-affarijiet meta I tip fuq il-keyboard? >> [Student] Standard pulzieri >> Yeah. 916 01:17:52,050 --> 01:17:56,450 So I tista 'jew tagħmel 0 jew I tista' tagħmel stdin. 917 01:17:56,450 --> 01:17:59,380 Jien jkollna l-current_settings ta 'standard pulzieri 918 01:17:59,380 --> 01:18:01,720 >> Issa nixtieq li jaġġornaw dawk settings, 919 01:18:01,720 --> 01:18:07,200 sabiex l-ewwel jien ser kopja fis hacker_settings dak current_settings tiegħi huma. 920 01:18:07,200 --> 01:18:10,430 U kif structs xogħol huwa se biss kopja. 921 01:18:10,430 --> 01:18:14,510 Dan kopji kollha ta 'l-oqsma, kif tista' tistenna. 922 01:18:14,510 --> 01:18:17,410 >> Issa nixtieq li taġġorna wħud mill-oqsma. 923 01:18:17,410 --> 01:18:21,670 Ħarsa lejn termios, inti għandek taqra permezz ta 'lott ta' dan 924 01:18:21,670 --> 01:18:24,110 biss biex tara dak li inti tixtieq tfittex, 925 01:18:24,110 --> 01:18:28,210 iżda l-bnadar int ser tixtieq tfittex huma eku, 926 01:18:28,210 --> 01:18:33,110 hekk ECHO karattri input Echo. 927 01:18:33,110 --> 01:18:37,710 L-ewwel nixtieq li jistabbilixxu - I've diġà minsija dak l-oqsma huma. 928 01:18:45,040 --> 01:18:47,900 Dan huwa dak li l-Struct Dehra. 929 01:18:47,900 --> 01:18:51,060 So modi input naħseb irridu bidla. 930 01:18:51,060 --> 01:18:54,210 Aħna ser tħares lejn is-soluzzjoni biex tiżgura li huwa dak li rridu bidla. 931 01:19:04,060 --> 01:19:12,610 Aħna tixtieq li tibdel lflag sabiex jipprevjenu bżonn li tfittex permezz dawn kollha. 932 01:19:12,610 --> 01:19:14,670 Aħna tixtieq li tibdel modi lokali. 933 01:19:14,670 --> 01:19:17,710 Int tkun trid taqra permezz ta 'dan ħaġa sħiħa biex jifhmu jappartjeni kollox fejn 934 01:19:17,710 --> 01:19:19,320 li aħna trid tibdel. 935 01:19:19,320 --> 01:19:24,120 Imma hija ġewwa ta 'modi lokali fejn aħna qed tmur jridu bidla li. 936 01:19:27,080 --> 01:19:33,110 Allura hacker_settings.cc_lmode huwa dak li sejjaħ. 937 01:19:39,630 --> 01:19:43,020 c_lflag. 938 01:19:49,060 --> 01:19:52,280 Dan huwa fejn aħna jsibu rwieħhom operaturi bitwise. 939 01:19:52,280 --> 01:19:54,860 Aħna tip ta 'barra ta' żmien, iżda aħna ser jgħaddu minnha reali malajr. 940 01:19:54,860 --> 01:19:56,600 Dan huwa fejn aħna jsibu rwieħhom operaturi bitwise, 941 01:19:56,600 --> 01:19:59,950 fejn I think I qal wieħed żmien twil ilu li kull meta tibda jittrattaw bnadar, 942 01:19:59,950 --> 01:20:03,370 int se tkun qed tuża operatur bitwise ħafna. 943 01:20:03,370 --> 01:20:08,240 Kull daqsxejn fil-bandiera jikkorrispondi għal xi tip ta 'mġieba. 944 01:20:08,240 --> 01:20:14,090 Allura hawn, din il-bandiera għandha mazz ta 'affarijiet differenti, fejn kull wieħed minnhom tfisser xi ħaġa differenti. 945 01:20:14,090 --> 01:20:18,690 Imma dak li nixtieq tagħmel huwa biss itfi l-ftit li jikkorrispondi għal ECHO. 946 01:20:18,690 --> 01:20:25,440 Allura biex tibdel din off nagħmel & = ¬ ECHO. 947 01:20:25,440 --> 01:20:30,110 Fil-fatt, naħseb huwa simili techo jew xi ħaġa. Jien biss ser erġa 'ċċekkja. 948 01:20:30,110 --> 01:20:34,050 I jistgħu termios dan. Huwa biss ECHO. 949 01:20:34,050 --> 01:20:38,440 ECHO se tkun daqsxejn waħda. 950 01:20:38,440 --> 01:20:44,230 ¬ ECHO se tfisser l bits huma stabbiliti għal 1, li tfisser kull bandiera huma stabbiliti biex vera 951 01:20:44,230 --> 01:20:47,140 ħlief għall-ftit ECHO. 952 01:20:47,140 --> 01:20:53,830 Billi jispiċċa bnadar lokali tiegħi ma 'dan, dan ifisser jtajru liema bandiera jtajru li bħalissa huma stabbiliti biex vera 953 01:20:53,830 --> 01:20:56,520 xorta se jiġu ffissati għal veru. 954 01:20:56,520 --> 01:21:03,240 Jekk bandiera ECHO tiegħi huwa stabbilit li veru, allura dan hu neċessarjament stabbilit li foloz fuq il-bandiera ECHO. 955 01:21:03,240 --> 01:21:07,170 Allura din il-linja tal-kodiċi ftit titfi l-bandiera ECHO. 956 01:21:07,170 --> 01:21:16,270 Il-linji oħra ta 'kodiċi, I ser biss kopja minnhom fl-interess ta' żmien u mbagħad jispjegaw lilhom. 957 01:21:27,810 --> 01:21:30,180 Fl-soluzzjoni, huwa qal 0. 958 01:21:30,180 --> 01:21:33,880 Huwa probabbilment aħjar li espliċitament jgħidu stdin. 959 01:21:33,880 --> 01:21:42,100 >> Avviż li jien wkoll tagħmel ECHO | ICANON hawn. 960 01:21:42,100 --> 01:21:46,650 ICANON jirreferi għal xi ħaġa separata, li jfisser modalità canonical. 961 01:21:46,650 --> 01:21:50,280 Liema mezzi modalità canonical huwa normalment meta int ittajpjar l-linja tal-kmand, 962 01:21:50,280 --> 01:21:54,670 standard ma tipproċessax xejn sakemm inti hit newline. 963 01:21:54,670 --> 01:21:58,230 Allura meta inti tagħmel GetString, inti tip mazz ta 'affarijiet, allura inti hit newline. 964 01:21:58,230 --> 01:22:00,590 Li meta huwa mibgħut għall-istandard pulzieri 965 01:22:00,590 --> 01:22:02,680 Dik hija l-inadempjenza. 966 01:22:02,680 --> 01:22:05,830 Meta I itfi modalità canonical, issa kull karattru uniku inti istampa 967 01:22:05,830 --> 01:22:10,910 huwa dak gets pproċessata, li normalment hija tip ta 'bad, għaliex dan huwa bil-mod li jipproċessaw dawn l-affarijiet, 968 01:22:10,910 --> 01:22:14,330 u huwa għalhekk li huwa tajjeb biex jitnaqqas dan fil-linji kollha. 969 01:22:14,330 --> 01:22:16,810 Imma nixtieq kull karattru li jridu jiġu pproċessati 970 01:22:16,810 --> 01:22:18,810 peress li jien ma tridx li tistenna lili biex hit newline 971 01:22:18,810 --> 01:22:21,280 qabel ma jipproċessa l-karattri stajt ġiet ittajpjar. 972 01:22:21,280 --> 01:22:24,760 Dan titfi modalità canonical. 973 01:22:24,760 --> 01:22:31,320 Dan Jittieħed biss ifisser meta attwalment jipproċessa karattri. 974 01:22:31,320 --> 01:22:35,830 Dan ifisser proċess immedjatament; malli I am ittajpjar minnhom, jipproċessawha. 975 01:22:35,830 --> 01:22:42,510 U dan huwa l-funzjoni li qed taġġorna settings tiegħi għal standard, 976 01:22:42,510 --> 01:22:45,480 u l-mezzi TCSA tagħmel dan id-dritt issa. 977 01:22:45,480 --> 01:22:50,310 L-għażliet l-oħra huma stenna sakemm dak kollu li bħalissa huwa fuq in-nixxiegħa tkun proċessata. 978 01:22:50,310 --> 01:22:52,030 Dan ma verament kwistjoni. 979 01:22:52,030 --> 01:22:56,920 Just dritt issa bidla settings tiegħi li jkun kollu li hu bħalissa fis hacker_typer_settings. 980 01:22:56,920 --> 01:23:02,210 I raden I sejħitilha hacker_settings, hekk ejja bidla li. 981 01:23:09,610 --> 01:23:13,500 Bidla kollox biex hacker_settings. 982 01:23:13,500 --> 01:23:16,870 >> Issa fl-aħħar tal-programm tagħna aħna qed tmur jridu jerġgħu lura 983 01:23:16,870 --> 01:23:20,210 għal dak li huwa attwalment ġewwa ta normal_settings, 984 01:23:20,210 --> 01:23:26,560 li se biss look like & normal_settings. 985 01:23:26,560 --> 01:23:30,650 Avviż I ma nbidlux xi normal_settings tiegħi peress oriġinarjament jkollna dan. 986 01:23:30,650 --> 01:23:34,520 Imbagħad għal ftit bidla lura, I jgħaddu lura fl-aħħar. 987 01:23:34,520 --> 01:23:38,390 Dan kien l-aġġornament. Okay. 988 01:23:38,390 --> 01:23:43,900 >> Issa ġewwa ta 'hawn jien ser biss jispjegaw il-kodiċi fl-interess ta' żmien. 989 01:23:43,900 --> 01:23:46,350 Dan m'huwiex il-kodiċi ħafna. 990 01:23:50,770 --> 01:24:03,750 Naraw naqraw karattru mill-fajl. Aħna hija imsejħa f. 991 01:24:03,750 --> 01:24:07,850 Issa inti tista 'raġel fgetc, imma kif fgetc ikun sejjer jaħdem 992 01:24:07,850 --> 01:24:11,910 huwa biss li għaddej biex jirritorna l-karattru li inti biss taqra jew EOF, 993 01:24:11,910 --> 01:24:15,680 li tikkorrispondi mat-tmiem tal-fajl jew xi jiġri żball. 994 01:24:15,680 --> 01:24:19,900 Aħna looping, ikomplu jaqraw karattru wieħed mill-inkartament, 995 01:24:19,900 --> 01:24:22,420 sakemm konna jispiċċaw ta 'karattri li jinqraw. 996 01:24:22,420 --> 01:24:26,650 U filwaqt li aħna qed tagħmel dan, aħna nistennew fuq karattru wieħed mill-istandard pulzieri 997 01:24:26,650 --> 01:24:29,090 Kull darba waħda inti tip xi ħaġa fil-linja tal-kmand, 998 01:24:29,090 --> 01:24:32,820 li l-qari fil-karattru minn standard pulzieri 999 01:24:32,820 --> 01:24:38,330 Imbagħad putchar huwa biss se tpoġġi l-karatteristiċi naqraw up here mill-inkartament li l-istandard. 1000 01:24:38,330 --> 01:24:42,890 Tista bniedem putchar, iżda huwa biss it-tqegħid l-istandard out, huwa istampar dan il-karattru. 1001 01:24:42,890 --> 01:24:51,600 Inti tista 'wkoll sempliċiment tagħmel printf ("% c", c); L-istess idea. 1002 01:24:53,330 --> 01:24:56,670 Li għaddej biex jagħmlu x-massa tal-ħidma tagħna. 1003 01:24:56,670 --> 01:25:00,300 >> L-aħħar ħaġa li aħna qed tmur biex trid tagħmel huwa biss fclose fajl tagħna. 1004 01:25:00,300 --> 01:25:03,310 Jekk inti ma fclose, li l-nixxija memorja. 1005 01:25:03,310 --> 01:25:06,680 Aħna rridu li fclose-fajl aħna oriġinarjament miftuħa, u naħseb li hu. 1006 01:25:06,680 --> 01:25:13,810 Jekk nagħmlu dan, I diġà kisbu problemi. 1007 01:25:13,810 --> 01:25:17,260 Ejja naraw. 1008 01:25:17,260 --> 01:25:19,960 What did li jilmentaw dwar? 1009 01:25:19,960 --> 01:25:30,220 Mistenni "int" iżda l-argument huwa tat-tip "Struct _IO_FILE *". 1010 01:25:36,850 --> 01:25:39,370 Aħna ser tara jekk li x-xogħlijiet. 1011 01:25:45,210 --> 01:25:53,540 Permess biss fil C99. Augh. Okay, jagħmlu hacker_typer. 1012 01:25:53,540 --> 01:25:57,760 Issa irridu jiksbu deskrizzjonijiet aktar utli. 1013 01:25:57,760 --> 01:25:59,900 Allura l-użu ta 'identifikatur mhux iddikjarat "normal_settings". 1014 01:25:59,900 --> 01:26:04,170 I ma sejħa hija normal_settings. I sejħitilha current_settings. 1015 01:26:04,170 --> 01:26:12,090 Mela ejja bidla kollha ta 'dak. 1016 01:26:17,920 --> 01:26:21,710 Issa tgħaddi l-argument. 1017 01:26:26,290 --> 01:26:29,500 I ser jagħmlu dan 0 għal issa. 1018 01:26:29,500 --> 01:26:36,720 Okay. . / Hacker_typer cp.c. 1019 01:26:36,720 --> 01:26:39,590 I wkoll ma ċar l-iskrin fil-bidu. 1020 01:26:39,590 --> 01:26:42,960 Iżda int tista 'tfittex lura għas-sett problema aħħar biex tara kif inti ċar l-iskrin. 1021 01:26:42,960 --> 01:26:45,160 Huwa biss l-istampar xi karattri 1022 01:26:45,160 --> 01:26:47,210 filwaqt li dan qed tagħmel dak li nixtieq do. 1023 01:26:47,210 --> 01:26:48,900 Okay. 1024 01:26:48,900 --> 01:26:55,280 U jaħsbu dwar għaliex dan meħtieġ biex tkun 0 minflok stdin, 1025 01:26:55,280 --> 01:27:00,560 li għandha tiddefinixxi # 0, 1026 01:27:00,560 --> 01:27:03,890 din hija tilmenta li - 1027 01:27:13,150 --> 01:27:19,360 Qabel I meta qal li hemm deskritturi fajl iżda imbagħad inti ukoll għandek * FAJL tiegħek, 1028 01:27:19,360 --> 01:27:23,210 a deskrittur fajl huwa biss numru sħiħ wieħed, 1029 01:27:23,210 --> 01:27:26,970 billi * FILE għandha mazz sħiħ ta 'għalf assoċjati magħha. 1030 01:27:26,970 --> 01:27:30,380 Ir-raġuni għandna bżonn li ngħidu 0 minflok stdin 1031 01:27:30,380 --> 01:27:37,480 huwa li stdin huwa * FILE li jindika l-ħaġa li hija referenzar descriptor fajl 0. 1032 01:27:37,480 --> 01:27:45,070 Allura anke up here meta I do fopen (ARGV [1], jien jkollna * FAJL lura. 1033 01:27:45,070 --> 01:27:51,180 Imma x'imkien f'dak * FILE hija ħaġa li jikkorrispondi għall-deskrittur fajl għal dak il-fajl. 1034 01:27:51,180 --> 01:27:57,430 Jekk inti tħares lejn il-paġna bniedem għall miftuħa, hekk naħseb li inti ser ikollok tagħmel bniedem 3 miftuħ - Nope - 1035 01:27:57,430 --> 01:27:59,380 bniedem 2 miftuħ - yeah. 1036 01:27:59,380 --> 01:28:06,250 Jekk inti tħares lejn il-paġna għal miftuħa, miftuħa huwa bħal fopen aktar baxx ta 'livell, 1037 01:28:06,250 --> 01:28:09,350 u huwa jirritorna l-deskrittur fajl attwali. 1038 01:28:09,350 --> 01:28:12,050 fopen ma mazz ta 'għalf fuq quċċata ta' miftuħa, 1039 01:28:12,050 --> 01:28:17,640 li minflok jirritornaw biss li deskrittur fajl prospetti FILE sħiħa * pointer 1040 01:28:17,640 --> 01:28:20,590 ġewwa tiegħu huwa deskrittur tagħna fajl ftit. 1041 01:28:20,590 --> 01:28:25,020 Allura standard tirreferi għall-ħaġa * FAJL, 1042 01:28:25,020 --> 01:28:29,120 billi 0 jirreferi għall biss l-istandard deskrittur fajl fih innifsu. 1043 01:28:29,120 --> 01:28:32,160 >> Mistoqsijiet? 1044 01:28:32,160 --> 01:28:35,930 [Laughs] Blew permezz ta 'dak. 1045 01:28:35,930 --> 01:28:39,140 Kull dritt. Aħna qed isir. [Laughs] 1046 01:28:39,140 --> 01:28:42,000 >> [CS50.TV]