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]