[Powered by Google Translate] [Seksyon 5 - pi konfòtab]
[Rob Bowden - Inivèsite Harvard]
[Sa a se CS50. - CS50.TV]
>> Tankou mwen te di nan imel mwen, gen yon bann bagay sa yo ou ka itilize
lòt pase aparèy a aktyèlman fè ansanm sa yo, pwoblèm.
Nou rekòmande ou fè li nan aparèy la jis paske Lè sa a, nou ka pi fasil ede ou
e nou konnen ki jan tout bagay ki pral travay.
Men, kòm yon egzanp sou ki kote ou ka fè bagay sa yo si, di, ou pa gen aksè
nan yon aparèy oswa ou ta vle travay nan sousòl la Sant Syans -
ki aktyèlman yo gen aparèy la twò -
si ou vle travay nenpòt kote.
Se yon egzanp Eske ou wè / tande pale de sch?
Sch se fondamantalman jis tankou konekte nan yon bagay.
Aktyèlman, kounye a mwen SSHed nan aparèy la.
Mwen pa janm travay dirèkteman nan aparèy la.
Isit la se aparèy la, epi si ou gade desann isit la ou wè adrès sa a IP.
Mwen pa janm travay nan aparèy la li menm;
Mwen toujou vin sou nan yon fenèt iTerm2 fenèt / tèminal.
Ou kapab sch ak sa yo ki adrès IP, sch jharvard@192.168.129.128.
Mwen sonje ke nimewo trè fasil paske li nan tankou yon modèl bèl.
Men, ki pral mande m 'pou modpas mwen, epi kounye a mwen nan aparèy la.
Fondamantalman, nan pwen sa a, si ou louvri moute yon tèminal andedan nan aparèy nan tèt li,
sa a koòdone, sepandan ou ta sèvi ak li, se egzakteman menm bagay la tou
kòm koòdone nan mwen lè l sèvi avèk plis pase isit la, men kounye a ou ap SSHed.
Ou pa bezwen sch aparèy la.
Yon egzanp nan yon lòt kote ou te kapab sch se mwen trè w ke ou gen pa default -
Oh. Pi gran.
Tout moun nan ou ta dwe gen pa kont FAS default sou serveurs yo FAS.
Pou m ', mwen ta sch rbowden@nice.fas.harvard.edu.
Li nan pral mande w ki premye fwa a, nou di wi.
Modpas mwen se jis pral fè modpas FAS m 'yo.
Se konsa, koulye a, mwen SSHed serveurs yo bèl, e mwen ka fè anyen mwen vle sou isit la.
Yon anpil nan klas ou ta ka pran, tankou 124, yo ale nan gen ou Upload bagay isit la
aktyèlman soumèt kouche pwoblèm ou.
Men, di ou pa gen aksè nan aparèy ou an.
Lè sa a, ou ka fè bagay sa yo, tankou sou isit la li pral di -
Sa a se jis seksyon nou an kesyon.
Li pral mande w fè sa nan aparèy la.
Olye de sa mwen pral jis fè l 'sou sèvè a.
Mwen pral ouvriers sa.
Pwoblèm nan a pwal ke w ap itilize yo lè l sèvi avèk yon bagay tankou jdi
oswa kèlkeswa sa andedan nan aparèy la.
Ou pa pwal gen sa sou sèvè a FAS.
Li nan tout jis pral fè sa a koòdone textuelle.
Se konsa, ou ta ka swa youn, eseye aprann yon editè tèks sa yo genyen.
Yo gen Nano.
Nano se nòmalman trè fasil yo itilize.
Ou kapab sèvi ak flèch ou yo ak tape nòmalman.
Se konsa, sa a pa difisil.
Si ou vle jwenn vrèman anpenpan ou ka itilize anak,
ki mwen pwobableman pa ta dwe louvri paske mwen pa menm konnen ki jan yo fèmen anak.
Kontwòl X, Kontwòl C? Yeah.
Oswa ou ka sèvi ak vim, ki se sa m 'itilize.
Se konsa, sa yo se opsyon ou genyen.
Si ou pa vle fè sa, ou ka tou, si ou gade nan manual.cs50.net--
Oh.
Sou yon PC, ou ka sch lè l sèvi avèk mastike,
ki w ap ale nan gen download separeman.
Sou yon Mac, ou ka jis pa Terminal itilize default oswa ou ka telechaje iTerm2,
ki se tankou yon bèl, Tèminal anpenpan.
Si ou ale nan manual.cs50.net ou pral wè yon ap mennen nan notepad + +,
ki se ki sa ou ka itilize sou yon PC.
Li pèmèt ou sftp soti nan notepad + +, ki se fondamantalman sch.
Ki sa sa ap kite ou fè se edit dosye ou lokalman,
ak Lè sa a, nenpòt lè ou vle sove yo, li pral sove nice.fas,
ki kote ou ka Lè sa a, kouri yo.
Ak ekivalan a sou yon Mac a pwal TextWrangler.
Se konsa, li pèmèt ou fè menm bagay la.
Li pèmèt ou edite dosye lokalman epi sove yo nan nice.fas,
ki kote ou ka Lè sa a, kouri yo.
Se konsa, si w ap janm kole san yon aparèy, ou gen opsyon sa yo
toujou fè kouche pwoblèm ou.
Pwoblèm nan yon sèl ki pral yo dwe ke ou pa pwal gen bibliyotèk la CS50
paske nice.fas pa pa default gen sa.
Ou kapab swa download bibliyotèk la CS50 -
Mwen pa panse mwen bezwen ki nan pwen sa.
Ou kapab swa download bibliyotèk la CS50 ak kopi li nan men nice.fas,
oswa mwen panse ke nan pwen sa a nou pa itilize li ankò de tout fason.
Oswa si nou fè sa, ou ka pou tan an ke yo te ranplase li ak
en yo nan fonksyon yo nan bibliyotèk la CS50 de tout fason.
Se konsa, ki pa ta dwe ki anpil nan yon restriksyon.
Epi sa a, sa.
>> Mwen pral tounen nan aparèy la kounye a, nou ap fè tout sa nan aparèy la.
Gade nan seksyon nou an kesyon, nan kòmansman an, tankou mwen te di nan imel mwen an,
nou gen pale sou yon sèl nan kout ou te sipoze yo gade.
Nou gen Redirecting la & tiyo ak kesyon sa yo twa.
>> Pou kilès kouran fonksyon tankou printf ekri pa default?
Se konsa, kouran. Ki sa ki se yon kouran?
Yon kouran dlo se fondamantalman tankou li jis kèk -
Li pa menm yon sous 1S ak 0s.
Kouran an li a mande pou isit la se deyò estanda.
Ak soti pou estanda se yon kouran ki lè ou ekri sou li,
li parèt sou ekran an.
Soti Creole, pa kouran, sa vle di ou jis ekri 1S ak 0s sou li,
ak nan fen lòt kote nan soti estanda jis li soti nan ki kouran.
Se jis nan yon afè de 1S ak 0s.
Ou ka ekri nou nan dlo oswa ou ka li nan sous dlo
depann sou sa ki kouran an aktyèlman se.
Lòt de larivyè yo default yo se estanda nan ak erè estanda.
Creole nan se nenpòt lè ou GetString, li te ap tann pou ou pou w bagay D '.
Se konsa, li rete ap tann pou ou, li la aktyèlman ap tann sou estanda nan,
ki se reyèlman ki sa ou jwenn lè ou tape nan klavye la.
W ap tape nan estanda pous
Erè Creole se fondamantalman ekivalan a soti estanda,
men li la espesyalize nan ke lè ou enprime yon erè estanda,
w ap sipoze fè sèlman enprime mesaj erè ak sa yo ki
pou ou kapab distenksyon ant mesaj regilye enprime ekran an
kont mesaj erè depann sou si y 'al nan soti estanda oswa erè estanda.
Dosye tou.
Creole soti, estanda nan, ak erè estanda yo se jis espesyal larivyè,
men reyèlman nenpòt ki dosye, lè ou louvri yon dosye a, li vin yon kouran nan bytes
ki kote ou ka jis li nan ki kouran.
Ou menm, pou pati ki pi, ka jis panse a yon dosye kòm yon kouran nan bytes.
Se konsa, sous dlo sa yo ekri nou nan pa default? Creole deyò.
>> Ki sa ki nan diferans ki genyen ant> ak >>?
Èske nenpòt moun ki gade videyo a davans? Oke.
> A pwal ki jan ou redireksyon nan dosye,
ak >> tou se pral redireksyon pwodiksyon nan dosye,
Men, li la olye ale nan kole nan dosye a.
Pou egzanp, kite a di mwen rive gen dikt dwa isit la,
ak lòt bagay la sèlman andedan nan dikt se chat, chat, chen, pwason, chen.
Youn nan lòd ki di ou gen nan liy lan bay lòd se chat,
ki se jis pral enprime sa ki nan nan yon dosye.
Se konsa, lè m 'di dikt chat, li pral enprime, chat chat, chen, pwason, chen. Sa a tout chat fè.
Sa vle di ke li enprime estanda soti, chat chat, chen, chen pwason,.
Si m 'olye vle redireksyon ki nan yon dosye, mwen ka itilize> ak redireksyon li nan tou sa dosye a se.
Mwen pral rele dosye a dosye.
Se konsa, kounye a si mwen ls, mwen pral wè mwen gen yon dosye nouvo rele dosye-a.
Men, si mwen louvri l 'moute, li te pral fè ekzakteman ki sa chat mete nan liy lan lòd.
Se konsa, kounye a, si mwen fè sa ankò, lè sa a li pral redireksyon pwodiksyon an nan dosye li an,
ak mwen pral gen menm bagay la egzak.
Se konsa, teknikman, li konplètman anporte ki sa nou te fè.
Epitou, n ap wè si mwen chanje dikt, mwen te pran soti chen.
Koulye a, si nou chat dikt nan dosye ankò, nou pwal gen vèsyon nan nouvo ak chen retire li.
Se konsa, li konplètman Vanport li.
Olye de sa, si nou sèvi ak >>, li te ale nan tache dosye-a.
Koulye a, louvri dosye, nou wè nou gen jis menm bagay la de fwa enprime
paske li te gen yon fwa, Lè sa a, nou apandis nan orijinal la.
Sa ki Se konsa, ke a> ak >> fè.
youn nan pwochen mande - Li pa mande sou li.
>> Yon sèl nan lòt ke nou gen se <, ki si> redireksyon soti estanda,
<Yo pral redireksyon estanda pous
Ann gade pou wè si nou ta gen yon egzanp.
Mwen ka ekri yon reyèl rapid.
Kite a pran nenpòt ranpli, hello.c.
Relativman senp dosye-a.
Mwen jis ap resevwa yon kòd li ansanm ak Lè sa a, enprime "Alo" kèlkeswa sa fisèl la mwen jis te antre nan te ye.
Se konsa, fè alo ak Lè sa a,. / Hello.
Kounye a li nan pouse m 'antre nan yon bagay,
ki vle di li an ap tann sou bagay yo dwe antre nan estanda pous
Se konsa, antre nan tou sa mwen vle nan estanda pous Nou jis ap pral di Hello, Rob!
Lè sa a, li la enprime estanda soti Hello, Rob!
Si m 'fè. / Alo ak Lè sa a, redireksyon,
pou kounye a ou ka sèlman redireksyon ki sòti nan yon dosye.
Se konsa, si mwen mete nan kèk dosye li an, txt, epi mwen mete Rob,
si mwen kouri alo ak Lè sa a, redireksyon txt a dosye a. / hello, li la pral di Hello, Rob! imedyatman.
Lè li premye vin GetString ak li a ap tann sou estanda nan,
estanda nan se pa ap tann sou klavye a pou done jwenn te antre nan.
Olye de sa, nou te reyorante resous-estanda nan yo li nan dosye txt la.
Se konsa, li la pral li soti nan txt a dosye, ki se jis liy Rob a,
ak Lè sa a, li pral enprime Hello, Rob!
Men, si mwen te vle, mwen te kapab fè tou. / Alo <txt
ak Lè sa a, estanda a deyò ki enprime li a, ki se Hello, Rob!,
Mwen ka redireksyon ki nan dosye pwòp li yo.
Mwen pral jis rele dosye a alo - pa gen okenn, mwen pa vle, paske sa a, se ègzèkutabl a - txt2.
Koulye a, txt2 ki pral gen randman de. / Alo txt <, ki a pwal Hello, Rob!
>> Kesyon?
>> Oke. Se konsa, Lè sa a, isit la nou gen tiyo.
Tiyo yo se inite ki sot pase a nan Jefò.
>> Oh. Mwen devine yon inite plis nan Jefò se si olye pou yo> ou fè 2>,
ki nan Redireksyon estanda erè.
Se konsa, si yon bagay te ale nan erè estanda, li pa ta jwenn mete nan txt2.
Men, remake, si mwen fè 2>, Lè sa a, li la toujou enprime Hello, Rob! nan liy lan bay lòd
paske mwen m 'sèlman Redireksyon estanda erè, mwen pa Redireksyon estanda deyò.
Creole erè ak soti estanda yo diferan.
Si ou te vle aktyèlman ekri nou nan erè estanda,
Lè sa a, mwen te kapab chanje sa a yo dwe fprintf stder.
Se konsa, printf, pa default, simagri soti estanda.
Si m 'vle enprime yon erè estanda manyèlman, lè sa a mwen gen yo sèvi ak fprintf
ak yo espesifye ki sa m 'vle enprime a.
Si olye m 'te fè fprintf stdou, lè sa a sa a, se fondamantalman ekivalan a printf.
Men, fprintf estanda erè.
Se konsa, koulye a, si mwen redireksyon sa a nan txt2, Hello, Rob! se toujou ap resevwa enprime nan liy lan bay lòd
depi li nan ap resevwa enprime yon erè estanda ak mwen sèlman Redireksyon estanda deyò.
Si m 'koulye a redireksyon estanda erè, kounye a li pa t' jwenn enprime, ak txt2 a pwal Hello, Rob!
Se konsa, kounye a, ou ka enprime erè aktyèl ou nan erè estanda
epi enprime mesaj regilye ou a soti estanda.
Se konsa, lè ou kouri pwogram ou an, ou ka kouri li kòm. / Alo sa a ki kalite ak 2 a>
pou ke pwogram ou a pral nan kouri nòmalman,
men nenpòt ki mesaj erè ke ou jwenn ou ka tcheke pita nan boutèy demi lit erè ou a,
Se konsa erè, ak Lè sa a, gade pita ak dosye erè ou ap gen nenpòt ki erè sa ki te rive.
>> Kesyon?
>> Youn nan dènye se pip, ki ou ka panse a kòm pran estanda a soti nan yon sèl lòd
ak fè li estanda a nan nan kòmand kap vini an.
Yon egzanp isit la se eko se yon bagay liy lòd
ki se jis pral repete tou sa mwen mete kòm agiman li yo. Mwen pa pral mete quotes.
Eko bla, bla, bla se jis ale nan enprime bla, bla, bla.
Anvan, lè m 'te di mwen te gen yo mete Rob nan yon dosye txt
paske mwen ka sèlman redireksyon txt dosye, olye de sa, / si mwen repete Rob
ak Lè sa a, tiyo l 'nan. / hello, ki pral fè tou menm kalite bagay sa yo.
Sa a ap pran randman de lòd sa a, eko Rob,
epi itilize li tankou D 'a pou. / hello.
Ou ka panse a li kòm premye redireksyon eko Rob nan yon dosye
ak Lè sa a, D 'a. / alo ke dosye ki te jis outputted.
Men, li pran dosye a tanporè soti nan imaj la.
>> Kesyon sou sa?
>> Nan pwochen kesyon an ki pral gen pou wè ak sa a.
Ki sa ki ta ka tiyo ou itilize a jwenn kantite a nan non inik nan yon dosye rele names.txt?
Kòmandman sa yo nou ap ale nan vle sèvi ak isit la yo se inik, kidonk unik, ak Lè sa a, wc.
Ou ka fè unik nonm kite ak aktyèlman gade a sa ki sa li fè,
ak li jis ale nan filtre adjasan matche liy nan D 'a.
Apre sa, nonm wc ki pral enprime newline, pawòl la, yo konte multiple pou chak dosye.
Ak youn nan dènye nou pral vle itilize se sòt,
ki se pral jis sòt liy nan dosye txt.
Si m 'fè kèk dosye txt, names.txt, epi li Rob, Tommy, Jozèf, Tommy, Jozèf, RJ, Rob,
sa m 'vle fè isit la se jwenn sou ki kantite non inik nan sa a dosye.
Se konsa, sa yo ta dwe repons lan ta dwe ye? >> [Elèv] 4. >> Yeah.
Li ta dwe 4 depi Rob, Tommy, Jozèf, RJ yo, se non yo sèlman inik nan sa a dosye.
Premye etap la, si mwen jis fè konte mo sou names.txt,
Sa a se aktyèlman di m 'tout bagay.
Sa a se aktyèlman enprime - Ann gade pou wè, nonm wc - newlines, mo, epi konte multiple.
Si m 'sèlman swen sou liy, Lè sa a, mwen ka jis fè wc-l names.txt.
Se konsa, sa a, se etap 1.
Men, mwen pa vle wc-l names.txt paske names.txt jis gen tout non yo,
e mwen vle met deyò ansyen lwil nenpòt moun ki pa inik.
Se konsa, si m 'fè unik names.txt, ki pa byen, ban m' sa m 'vle
paske non yo double toujou la.
Poukisa se sa? Poukisa se unik pa fè sa m 'vle?
[Elèv] Doublon la yo se pa [fèbl] >> Yeah.
Sonje paj la nonm pou unik di filtre liy matche adjasan.
Yo ap pa adjasan, se konsa li pa pral filtre yo.
Si m 'sòt yo an premye, names.txt sòt ki pral mete tout liy yo kopi yo ansanm.
Se konsa, kounye a names.txt sòt se ke.
Mwen pral vle itilize sa kòm opinyon nan unik, ki se | unik.
Sa ki ban m 'Jozèf, RJ, Rob, Tommy,
e mwen vle yo sèvi ak sa kòm opinyon nan wc L-,
ki se ale nan, ban m '4.
Tankou li di isit la, sa ki te kapab tiyo ou itilize?
Ou kapab fè yon anpil nan bagay sa yo tankou lè l sèvi avèk yon seri de kòmandman
ki kote ou sèvi ak pwodiksyon an soti nan yon lòd kòm opinyon nan lòd kap vini an.
Ou kapab fè yon anpil nan bagay sa yo, yon bann bagay sa yo entelijan.
>> Kesyon?
Oke.
Sa a se li pou tiyo ak Jefò.
>> Koulye a, nou ale nan bagay la reyèl, bagay la kodaj.
Anndan sa a PDF yo, w ap wè lòd sa a,
epi ou pral vle kouri lòd sa a nan aparèy ou an.
wje se yo lòd, ki pou jis ap resevwa yon bagay nan men entènèt la,, fondamantalman,
Se konsa wje ak URL sa a.
Si ou te ale nan URL sa nan navigatè ou a, li ta download ki dosye.
Mwen te jis klike sou li, se konsa li telechaje dosye a pou mwen.
Men, ekri wje nan ke bagay andedan nan tèminal nan
se jis ale nan download li nan tèminal ou a.
Mwen gen section5.zip, ak ou pral vle ouvriers section5.zip,
ki se pral ba ou yon folder rele section5,
ki se ale nan gen tout dosye sa yo nou ap pral lè l sèvi avèk jodi a andedan nan li.
Kòm non dosye pwogram sa yo 'sijere yo, yo se yon buggy ti jan,
Se konsa misyon ou a se fè konpwan poukisa lè l sèvi avèk gdb.
tout moun fè yo telechaje / konnen ki jan yo jwenn yo telechaje
nan aparèy yo? Oke.
>> Kouri ./buggy1, li pral di fòt Segmentation (nwayo jete),
ki nenpòt ki lè ou jwenn yon segfault, li nan yon move bagay.
Nan ki sikonstans ou jwenn yon segfault?
[Elèv] Dereferencing yon konsèy nil. >> Yeah. Se konsa, ki se yon egzanp.
Dereferencing yon konsèy nil w ap ale nan jwenn yon segfault.
Ki sa ki yon segfault vle di se w ap manyen memwa ou pa ta dwe manyen.
Se konsa, dereferencing yon konsèy nil an touche adrès 0,
ak, fondamantalman, tout òdinatè sèjousi di ke 0 adrès se memwa ou pa ta dwe manyen.
Se konsa, Se poutèt sa dereferencing yon rezilta konsèy nil nan yon segfault.
Lè ou rive pa inisyalize yon konsèy, lè sa a li gen yon valè fatra,
epi konsa lè w ap eseye dèreferans li, nan tout chans w ap manyen memwa
sa a, se nan mitan an nan okenn kote.
Si ou rive jwenn chans ak valè nan fatra
rive lonje dwèt sou yon kote sou pil la oswa yon bagay,
Lè sa a, lè ou dèreferans ki konsèy ki ou pa t 'inisyalizèd,
anyen pa pwal ale mal.
Men, si li nan lonje dwèt a, di, yon kote ant chemine a ak pil wòch la,
oswa li nan lonje dwèt jis yon kote ki pa te itilize pa pwogram ou an ankò,
Lè sa a, w ap manyen memwa ou pa ta dwe manyen yo epi yo ou segfault.
Lè w ekri yon fonksyon repetitif e li recurses fwa twò anpil
ak chemine ou a ap grandi twò gwo ak eurt yo chemine nan bagay sa yo
ke li pa ta dwe fè kolizyon ak, w ap manyen memwa ou pa ta dwe manyen,
konsa ou segfault.
Se pou sa ke yon segfault se.
>> Li la tou rezon nan menm ke si ou gen yon fisèl tankou -
kite yo ale tounen nan pwogram anvan yo.
Nan hello.c-I'm jis pwal fè yon lòt bagay.
Char * s = "alo mond!";
Si mwen itilize * s = yon bagay oswa s [0] = 'X';
kidonk, fè hello,. / hello, poukisa ke segfault?
Poukisa sa a segfault?
Ki sa ou ta atann yo rive?
Si m 'te fè printf ("% s \ n", yo); sa ki ou ta atann yo dwe enprime?
[Elèv] X hello. >> Yeah.
Pwoblèm lan se ke lè ou deklare yon fisèl tankou sa a,
s se yon konsèy ki nan pwal ale sou chemine a,
ak sa a se montre se sa a fisèl ki se genyen nan yo nan Read-Only memwa.
Se konsa, jis pa non yo, memwa a Read-Only, ou ta dwe jwenn lide la
ke si ou eseye chanje sa ki nan Read-Only memwa,
w ap fè yon bagay ou pa ta dwe ap fè ak memwa ak ou segfault.
Sa a se aktyèlman yon gwo diferans ant Char nan * ak Char nan [].
Se konsa, Char nan [], kounye a sa a fisèl yo pral mete yo sou chemine a,
ak chemine a se pa li-sèlman, ki vle di ke sa a yo ta dwe travay parfètman anfòm.
Ak li fè sa.
Sonje byen lè m 'fè Char * s = "alo mond!", S tèt li se sou chemine a
men pwen an yon lòt kote, e ke yon lòt kote k ap pase yo li-sèlman.
Men, Char nan [] se jis yon bagay sou pil la.
Se konsa, sa a, se yon lòt egzanp nan yon segfault pase.
>> Nou te wè ki ./buggy1 a nan yon segfault.
Nan teyori, ou pa ta dwe gade nan buggy1.c imedyatman.
Olye de sa, nou pral gade nan li nan gdb.
Remake lè ou jwenn fòt Segmentation (nwayo jete),
ou jwenn sa a ranpli plis pase isit la yo rele prensipal yo.
Si nou ls-l, n ap wè ke debaz se nòmalman yon dosye trè gwo.
Sa a se nimewo a nan bytes nan dosye a, se konsa li sanble li nan 250-yon bagay kilookte.
Rezon ki fè la pou sa a se ke sa ki pil fatra debaz la aktyèlman se
se lè aksidan pwogram ou an, eta a nan memwa nan pwogram ou an
jis vin kopye ak kole nan sa a dosye.
Li vin jete nan ki dosye.
Pwogram sa a, pandan ke li te kouri, rive gen yon itilizasyon memwa nan alantou 250 kilookte,
e konsa se sa ki te resevwa jete nan sa a dosye.
Koulye a, ou ka gade nan ki dosye si nou fè gdb buggy1 prensipal yo.
Nou ka jis fè gdb buggy1, ak ki pral jis kòmanse moute gdb regilyèman,
lè l sèvi avèk buggy1 kòm dosye D 'li yo.
Men, si ou fè gdb buggy1 debaz yo, Lè sa a, li la espesyalman pral kòmanse moute gdb
pa gade nan ki dosye prensipal yo.
Epi ou di buggy1 gdb vle di konnen ke ke dosye debaz soti nan pwogram nan buggy1.
Se konsa, gdb buggy1 debaz ki pral imedyatman mennen nou
nan kote pwogram lan rive mete fen nan.
Nou wè isit la Pwogram sispann ak, 11 siyal fòt Segmentation.
Nou rive wè yon liy nan asanble a, ki pwobableman se pa trè itil.
Men, si ou tape b oswa baktras, ki k ap pase yo dwe fonksyon an
ki ba nou lis la nan ankadreman aktyèl pil nou an.
Se konsa, baktras. Li sanble ke nou sèlman gen de ankadreman chemine.
Premye a se ankadreman chemine prensipal nou an,
ak dezyèm la se ankadreman an pil pou sa a fonksyon ki nou rive yo an,
ki sanble nou sèlman gen kòd la tout pèp pou li a.
Se konsa, kite yo ale tounen nan fonksyon prensipal nou an,
ak fè sa nou kapab fè ankadreman 1, ak mwen panse ke nou ka fè tou desann,
Men, mwen prèske pa janm fè desann - oswa leve. Yeah.
Leve, li desann. Up pote ou moute yon sèl ankadreman chemine, desann pote ou desann yon ankadreman chemine.
Mwen gen tandans pa janm sèvi ak sa.
Mwen te jis espesyalman di, 1 ankadreman ki se ale nan ankadreman an ki make 1.
Ankadreman 1 ki pral fè nou antre ankadreman chemine prensipal yo,
ak li di dwa isit la liy lan nan kòd nou rive yo a.
Si nou te vle yon koup plis liy nan kòd, nou ka di lis,
Epi sa a, pral bay nou tout liy ki nan kòd wonn li.
Liy lan nou segfaulted nan te 6:
si (strkan ("CS50 wòch", argv [1]) == 0).
Si li pa evidan ankò, ou ka jwenn li dwat soti nan isit la jis pa panse poukisa li segfaulted.
Men, nou ka pran li yon sèl etap plis ak di, "Poukisa ta argv [1] segfault?"
Ekri ak lèt ​​detache Ann argv [1], epi li sanble 0x0 li a, ki se konsèy nan nil.
Nou ap strcmping CS50 wòch ak nil, ak pou ke a pral segfault.
Epi poukisa se argv [1] nil?
[Elèv] Paske nou pa t 'ba li nenpòt agiman bay lòd-liy.
Yeah. Nou pa t 'ba li nenpòt agiman bay lòd-liy.
Se konsa, ./buggy1 se sèlman pral gen argv [0] dwe ./buggy1.
Li pa nan ale nan gen yon argv [1], se konsa ke a pral segfault.
Men, si, olye de sa, mwen fè jis CS50, li pral di Ou jwenn yon D
paske se sa ki li nan sipoze fè.
Gade nan buggy1.c, li te sipoze fè enprime "Ou ka resevwa yon D" -
Si argv [1] se pa sa "CS50 wòch", "Ou jwenn yon D", lòt bagay "Ou jwenn yon A!"
Se konsa, si nou vle yon A, nou bezwen sa a yo konpare kòm vre,
ki vle di ke li konpare ak 0.
Se konsa, argv [1] bezwen yo dwe "CS50 wòch".
Si ou vle fè sa sou liy lan bay lòd la, ou bezwen sèvi ak \ yo sove espas la.
Se konsa, CS50 \ wòch ak Ou jwenn yon A!
Si w pa fè antislach a, poukisa sa a pa travay?
[Elèv] Li nan de prèv diferan. >> Yeah.
Argv [1] a pwal CS50, ak argv [2] a pwal wòch. Oke.
>> Koulye a, ./buggy2 ki pral segfault ankò.
Olye pou yo k ap louvri l 'ak dosye nwayo li, nou pral jis louvri moute buggy2 dirèkteman,
Se konsa gdb buggy2.
Koulye a, si nou jis kouri pwogram nou an, lè sa a li nan pral di Pwogram resevwa siyal SIGSEGV,
ki se segfault a siyal, e sa se kote li te rive li rive vre.
Gade nan baktras nou an, nou wè ke nou te nan oh_no fonksyon an,
ki te aple pa miyon fonksyon an, ki te aple pa binky fonksyon an,
ki te aple pa prensipal la.
Nou ka wè tou agiman yo sa yo fonksyon.
Agiman a miyon ak binky te 1.
Si nou lis oh_no fonksyon an, nou wè ke oh_no se jis ap fè Char ** s = nil;
* S = "boom";
Poukisa ta ke fail?
[Elèv] Ou pa ka dèreferans konsèy la nil? >> Yeah.
Sa a se jis di yo se nil, kèlkeswa si sa rive yo dwe yon ** Char,
ki, depann sou ki jan ou esplike l ', li te kapab fè yon konsèy nan yon konsèy nan yon fisèl
oswa yon etalaj de strings.
Li nan s se nil, se konsa * s se dereferencing yon konsèy nil,
ak kidonk sa a ki pral aksidan.
Sa a se youn nan fason ki pi rapid ou ka posib segfault.
Li nan jis deklare yon konsèy nil epi imedyatman segfaulting.
Sa a ki sa oh_no ap fè.
Si nou ale yon sèl ankadreman, lè sa a nou pral jwenn nan fonksyon an ke yo rele oh_no.
Mwen bezwen fè bagay sa a.
Si ou pa antre nan yon lòd, epi ou jis frape Antre ankò,
li pral jis repete lòd la anvan ke ou kouri.
Nou se nan ankadreman 1.
Lis sa a ankadreman, nou wè isit la se fonksyon nou an.
Ou ka frape lis ankò, oswa ou kapab fè lis 20 epi li ap gen lis pi plis.
Miyon nan fonksyon di si mwen se 1, lè sa a ale nan fonksyon an oh_no,
lòt ale nan fonksyon an sinueu.
E nou konnen, mwen se 1 paske nou rive wè moute isit la
te ki miyon rele ak agiman sa 1.
Oswa ou ka jis enprime mwen epi li pral di mwen se 1.
Nou se kounye a nan miyon, epi si nou moute yon lòt ankadreman, nou konnen nou pral fini nan binky.
Up. Koulye a, nou ap nan binky.
Lis sa a fonksyon - lis ki sou devan mwatye koupe m 'wete -
li te kòmanse koupe tankou si m 'se 0, lè sa a nou pral rele li oh_no, lòt bagay rele miyon.
Nou konnen mwen te 1, se konsa li rele miyon.
Epi, koulye a nou ap tounen nan prensipal yo, ak prensipal se jis pral fè int mwen = rand ()% 3;
Sa se sèlman pral ba ou yon nimewo o aza ke se swa 0, 1, oswa 2.
Li nan ale nan rele binky avèk nimewo, epi li pral retounen 0.
Gade sa a,
jis mache nan pwogram nan manyèlman san kouri li imedyatman,
ou ta mete yon pwen repo nan prensipal yo, ki vle di ke lè nou kouri pwogram nan
pwogram ou an kouri moute jiskaske li frape yon pwen repo.
Se konsa, kouri pwogram nan, li pral kouri ak Lè sa a, li pral frape fonksyon prensipal epi yo sispann kouri.
Koulye a, nou ap andedan nan prensipal yo, ak etap oswa pwochen ki pral pou mennen nou nan liy lan pwochen nan kòd.
Ou kapab fè etap oswa kap vini an.
Frape pwochen, koulye a mwen te mete rand ()% 3, pou nou ka enprime valè a nan mwen,
epi li pral di mwen se 1.
Koulye a, li fè sa pwoblèm si nou itilize pwochen oswa etap.
Mwen devine li konte nan yon sèl anvan an, men nou ta vle sèvi ak pwochen.
Si nou itilize etap, nou etap antre nan fonksyon an, ki vle di gade nan bagay la reyèl
ki k ap pase andedan nan binky.
Si nou itilize vini yo, Lè sa a, sa vle di li ale sou fonksyon an
ak jis ale nan liy lan pwochen nan kòd nan fonksyon prensipal nou an.
Dwa isit la sou liy sa a, mwen te nan kote li te di rand ()% 3;
si m 'te fè etap, li t ap antre nan aplikasyon de rand
ak gade sa k ap pase a, ak mwen te kapab etap nan fonksyon an rand.
Men, mwen pa pran swen sou fonksyon an rand.
Mwen jis vle pou yo ale nan liy lan pwochen nan kòd nan prensipal yo, Se konsa, mwen sèvi ak pwochen.
Men koulye a, mwen fè swen sou fonksyon an binky, se konsa mwen vle etap antre nan sa.
Koulye a, mwen nan binky.
Liy nan premye nan kòd la pwal di si (mwen == 0), mwen pran yon etap,
nou wè nou fini nan miyon.
Si nou bagay sa yo lis, nou wè ke li tcheke se mwen = 0.
mwen se pa egal a 0, se konsa li te ale nan kondisyon an lòt bagay,
ki se ale nan rele miyon (mwen).
Ou ta ka resevwa konfonn.
Si ou jis gade nan liy sa yo dirèkteman, ou ta ka panse si (mwen == 0),
oke, Lè sa a, mwen te pran yon etap e kounye a, mwen nan miyon (mwen),
ou ta ka panse ke yo dwe vle di mwen = 0 oswa yon bagay.
No Li jis vle di ke li konnen li ka bwa dirèkteman nan miyon nan liy (mwen).
Paske mwen se pa 0, pwochen etap la pa pral fini nan lòt la.
Lòt Bagay se pa yon liy li a pral kanpe nan.
Li nan jis pral pou yo ale nan liy lan pwochen li ka aktyèlman egzekite, ki se miyon (mwen).
Stepping nan miyon (mwen), nou wè si (mwen == 1).
Nou konnen mwen = 1, Se konsa, lè nou etap, nou konnen nou pral fini nan oh_no
paske mwen = 1 rele oh_no fonksyon an, ki ou ka etap antre nan,
ki se ale nan mete Char ** s = nil epi imedyatman "boom".
Lè sa a, aktyèlman gade nan aplikasyon an nan buggy2,
sa a, mwen se jis ou jwenn yon nimewo o aza - 0, 1, oswa 2 - w rele nan binky,
ki si mwen se 0 li mande oh_no, lòt moun li rele miyon, ki vini leve isit la.
Si m 'se 1, rele oh_no, lòt bagay rele sinueu, ki vini isit la,
si mwen se 2, rele oh_no.
Mwen pa menm panse ke gen se yon fason -
nenpòt moun ki wè yon fason pou fè sa a yon pwogram ki pa pral segfault?
Paske sof si mwen manke yon bagay, si mwen se 0, ou pral imedyatman segfault,
lòt bagay ou ale nan yon fonksyon ki si mwen se 1 ou segfault,
lòt bagay ou ale nan yon fonksyon kote si mwen se 2 ou segfault.
Se konsa, pa gen pwoblèm sa ou fè sa, ou segfault.
>> Mwen devine yon fason nan repare-l ta dwe olye de fè Char ** s = nil,
ou ta ka malok espas pou ke fisèl.
Nou ta ka fè malok (sizof) - sizof ki sa?
[Elèv] (Char) * 5? >> Sa a sanble dwa?
Mwen asepte sa a ap travay si mwen aktyèlman kouri l ', men li pa sa m ap chache pou.
Gade nan ki kalite s. Se pou nou ajoute int *, se konsa int * x.
Mwen ta fè malok (sizof (Int)).
Oswa si mwen te vle yon etalaj de 5, mwen ta fè (sizof (Int) * 5);
E si mwen gen yon ** int?
Ki sa ki ta mwen malok?
[Elèv] Kantite moun ki nan konsèy la. >> Yeah. (Sizof (Int *));
Menm bagay desann isit la.
Mwen vle (sizof (Char *));
Sa a se pral asiyen espas pou konsèy la ki lonje dwèt nan "boom".
Mwen pa bezwen asiyen espas pou "boom" tèt li
paske sa a se fondamantalman ekivalan a sa m 'te di anvan
nan Char * x = "boom".
"Boom" nou te deja egziste. Li k ap pase nan egziste nan rejyon an Read-Only nan memwa.
Men, li deja egziste, ki vle di liy sa a nan kòd, si yo se yon ** Char,
Lè sa a, * s se yon * Char ak w ap mete sa a * Char nan pwen nan "boom".
Si mwen te vle yon kopi "boom" nan a, Lè sa a, mwen ta bezwen asiyen espas pou s.
Mwen pral fè * s = malok (sizof (Char) * 5);
Poukisa 5?
Poukisa nou pa 4? Li sanble tankou "boom" se 4 karaktè. >> [Elèv] karaktè a nil.
Yeah. Tout moun nan strings ou yo ale nan bezwen pèsonaj la nil.
Koulye a, mwen ka fè yon bagay tankou strka - Ki fonksyon an pou kopye yon kòd?
[Elèv] cpy? >> Strki.
strki moun.
Se konsa, strki oswa strki.
strki se yon ti jan pi an sekirite depi ou ka presize egzakteman kouman anpil karaktè,
men isit la li pa gen pwoblèm paske nou konnen.
Se konsa, strki ak gade nan agiman sa yo.
Agiman an premye se destinasyon nou an.
Agiman Dezyèm se yon sous nou an.
Nou pral fè kopi nan * destinasyon nou s konsèy "boom nan".
Poukisa ta ka ou vle fè sa a ak yon strki olye pou yo jis ki sa nou te genyen anvan
nan * s = "boom"?
Gen yon rezon ou ta ka vle fè sa, men sa ki se ke rezon ki fè?
[Elèv] Si ou vle chanje yon bagay nan "boom". >> Yeah.
Koulye a, mwen ka fè yon bagay tankou s [0] = 'X';
paske pwen nan pil wòch la ak espas ki sou pil wòch la ke moun sa a montre
se yon konsèy nan plis espas sou pil wòch la, ki se estoke "boom".
Se konsa, sa a se kopi "boom" ke yo te ki estoke nan pil wòch la.
Gen teknikman de kopi "boom" nan pwogram nou an.
Genyen yon nan premye ki nan jis yo bay nan sa a "boom" konstan fisèl,
ak kopi an dezyèm nan "boom", strki te kreye kopi a nan "boom".
Men, se kopi a nan "boom" ke yo te ki estoke sou pil wòch la, ak pil wòch la w ap lib yo chanje.
Pil wòch la se pa li-sèlman, se konsa ke vle di ke s [0]
ki pral kite ou chanje valè la nan "boom".
Li nan pral kite ou chanje sa yo karaktè.
>> Kesyon?
Oke.
>> Deplase sou buggy3, buggy3 gdb kite l 'la.
Nou jis kouri li ak nou wè nou jwenn yon segfault.
Si nou baktras, gen sèlman de fonksyon.
Si nou ale moute nan fonksyon prensipal nou yo, nou wè ke nou segfaulted nan liy sa a.
Se konsa, jis gade nan liy sa a, pou (Int liy = 0; fje bagay sa a fè sa ki nil pa egal;
liy + +).
Te ankadreman anvan nou yo rele _IO_fgets.
Ou ap wè ke yon anpil ak bati-an fonksyon C,
ki lè ou jwenn segfault a, pral gen reyèlman skre non fonksyon
tankou sa a _IO_fgets.
Men, ki nan ale nan gen rapò ak sa a rele fje.
Yon kote andedan isit la, nou ap segfaulting.
Si nou gade nan agiman yo nan fje, nou ka enprime tanpon.
Se pou nou enprime kòm yon - Oh, pa gen okenn.
Ekri an lèt detache a pa pral travay egzakteman jan mwen vle l 'bay.
Se pou yo gade nan pwogram aktyèl la.
Tanpon se yon etalaj karaktè. Li se yon etalaj karaktè nan 128 karaktè.
Se konsa, lè m 'di tanpon ekri ak lèt ​​detache, li te ale nan enprime sa yo karaktè 128,
Mwen devine ki se ki sa yo espere.
Ki sa mwen te kap chèche se enprime adrès la nan zòn de defans,
men sa pa vrèman fè m 'konnen anpil.
Se konsa, lè m 'rive di moute isit la x tanpon, li montre m' 0xbffff090,
ki, si ou sonje soti nan pi bonè oswa pwen kèk, Oxbffff gen tandans ka yon rejyon chemine-ich.
Chemine a gen tandans kòmanse yon kote jis anba 0xc000.
Jis pa wè adrès sa a, mwen konnen ke zòn de defans sa k ap pase sou pil la.
Relance pwogram m 'yo, kouri, leve, tanpon nou te wè sa te sekans nan karaktè
ki se bèl anpil san sans.
Lè sa a, enprime dosye, ki sa ki dosye sanble?
[Elèv] vid. >> Yeah.
Dosye a se yon nan * DOSYE kalite, se konsa li se yon konsèy,
ak valè sa a nan konsèy se nil.
Se konsa, fje ki pral eseye li soti nan ki konsèy nan yon fason endirèk,
men yo nan lòd jwenn aksè nan ki konsèy, li gen dèreferans li.
Oswa, yo nan lòd jwenn aksè nan ki sa li ta dwe montre a, li dereferences li.
Se konsa li dereferencing yon konsèy nil epi li segfaults.
Mwen te kapab rekòmanse li a.
Si nou kraze nan pwen prensipal nou yo ak kouri,
liy nan premye nan kòd se Char * fichier = "nonexistent.txt";
Sa ta dwe bay yon bèl allusion gwo kòm poukisa pwogram sa a echwe.
Sezisman pwochen pote m 'nan liy nan pwochen, kote mwen louvri sa a ranpli,
ak Lè sa a, mwen imedyatman jwenn nan liy nou an, kote yon fwa mwen frape pwochen, li te ale nan segfault.
nenpòt moun ki vle voye jete soti yon rezon ki fè nou ta ka segfaulting?
[Elèv] File pa egziste. >> Yeah.
Sa a se sipoze yon allusion
ke chak fwa w ap louvri yon dosye ou bezwen yo tcheke ki dosye a aktyèlman egziste.
Se konsa, isit la, "nonexistent.txt";
Lè nou Fichier fopen pou lekti, nou Lè sa a, bezwen di
si (dosye == nil) ak di printf ("File pa egziste!"
oswa - pi bon toujou - Fichier); retounen 1;
Se konsa, kounye a nou tcheke wè si li nan nil
anvan aktyèlman ap kontinye ak ap eseye li soti nan ki dosye.
Nou ka renouvèlman li jis wè ke ki travay.
Mwen gen entansyon genyen ladan yo yon liy nouvo.
Se konsa, kounye a nonexistent.txt pa egziste.
Ou dwe toujou tcheke pou sa a sòt de bagay sa.
Ou dwe toujou tcheke yo wè si fopen retounen nil.
Ou dwe toujou tcheke a asire w ke malok pa retounen nil,
oswa lòt moun ou segfault.
>> Koulye a, buggy4.c.
Kouri. Mwen devine sa a se ap tann pou D 'oswa loupin posib enfini.
Wi, li nan loupin enfini.
Se konsa, buggy4. Li sanble ke nou ap enfini loupin.
Nou ka kraze nan prensipal yo, kouri pwogram nou an.
Nan gdb, toutotan abrevyasyon nan ou itilize se anbigwite
oswa abrevyasyon espesyal yo ke yo bay pou ou,
Lè sa a, ou ka itilize n yo sèvi ak pwochen olye pou yo gen kalite soti pwochen tout wout la.
Epi, koulye a ke mwen te frape n yon fwa, mwen ka jis frape Antre nan kenbe pral pwochen
olye pou yo gen frape n Antre, n Antre, n Antre nan.
Li sanble ke mwen ta nan kèk kalite pou riban ki nan anviwònman etalaj [mwen] a 0.
Li sanble ke mwen pa janm mwen kraze soti nan sa a pou riban.
Si m 'enprime mwen, se konsa mwen se 2, Lè sa a, mwen pral ale kap vini an.
Mwen pral enprime, mwen se 3, Lè sa a, mwen pral ale kap vini an.
Mwen pral enprime mwen e mwen se 3. Next, enprime, mwen se 4.
Aktyèlman, ekri ak lèt ​​detache sizof (etalaj), se konsa yo piti yo gen etalaj a se 20.
Men, li sanble gen nan kèk lòd gdb espesyal pou ale jouk yon bagay k ap pase.
Se tankou mete yon kondisyon sou valè a nan varyab la. Men, mwen pa sonje sa li ye.
Se konsa, si nou kenbe prale -
Kisa nou t'ap di a? Ki sa ou te pote yo moute?
[Elèv] montre mwen ajoute - >> Yeah. Se konsa, montre m ka ede w.
Si nou jis montre mwen, li pral mete isit la sa ki valè a nan mwen se
Se konsa, mwen pa bezwen enprime li chak fwa.
Si nou jis kenbe pral vini yo, nou wè 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5.
Yon bagay ki pral fò anpil sa ki mal, e mwen se ke yo te Reyajiste a 0.
Gade nan buggy4.c, nou wè tout sa ki k ap pase se etalaj int [5];
pou (mwen = 0; mwen <= sizof (etalaj); mwen + +)
etalaj [mwen] = 0;
Kisa nou wè sa a, se sa ki mal isit la?
Kòm yon allusion, lè mwen te fè gdb a buggy4 - kite a kraze prensipal yo, kouri -
Mwen t 'ekri ak lèt ​​detache sizof (etalaj) jis yo wè sa ki kondisyon an se kote m' ta dwe finalman kraze deyò.
Ki kote m 'ye? Èske mwen kouri?
Mwen pa t 'deklare ankò.
Se konsa, enprime sizof (etalaj) ak sa a, se 20,
ki espere depi etalaj mwen, se yon nan gwosè 5 ak li a nan 5 nonm antye yo,
se konsa bagay la tout antye yo ta dwe 5 * sizof (Int) bytes, kote sizof (Int) gen tandans ka 4.
Se konsa, sizof (etalaj) se 20.
Kisa mwen ta dwe sa a ta dwe ye?
[Elèv] divize pa sizof (Int). >> Yeah, / sizof (Int).
Li sanble ke gen nan toujou yon pwoblèm isit la. Mwen panse ke sa a ta dwe jis pou <
depi li nan bèl anpil toujou <epi pa janm <=.
Koulye a, kite nan panse sou poukisa sa a te aktyèlman kase.
nenpòt moun ki te Estimation poukisa yo te mwen Reyajiste a 0 nan chak iterasyon nan riban an?
Bagay la sèlman andedan nan isit la ke k ap pase se ke etalaj [mwen] se ke yo te mete a 0.
Se konsa, yon jan kanmenm, liy sa a nan kòd ki lakòz int nou mwen yo dwe mete a 0.
[Elèv] t 'kapab li dwe paske li nan aksyon net memwa a nan pati sa a nan mwen
lè li panse li nan eleman nan pwochen nan etalaj? >> [Bowden] Wi.
Lè nou ap ale pi lwen pase nan fen etalaj nou an,
yon jan kanmenm espas sa a ke nou ap aksyon net la aksyon net valè a nan mwen.
Se konsa, si nou gade nan buggy4 a, kase prensipal yo, kouri,
kite a enprime adrès ki nan mwen.
Li sanble ke li nan bffff124.
Koulye a, kite a enprime adrès la nan etalaj [0]. 110.
Ki sa ki sou [1]? 114.
[2], 118.
11C, 120. etalaj [5] se bfff124.
Se konsa, etalaj [5] la gen menm adrès ak mwen, ki vle di ke etalaj [5] se mwen.
Si yo gen adrès la menm yo, yo se menm bagay la.
Se konsa, lè nou mete etalaj [5] a 0, nou ap mete mwen a 0.
Men, si ou panse osijè de sa a an tèm de chemine a,
int mwen yo te deklare premye, ki vle di mwen vin kèk espas sou pil la.
Lè sa a, etalaj [5] se afekte, se konsa Lè sa a, 20 bytes resevwa lajan sou pil la.
Se konsa, mwen vin afekte an premye, Lè sa a, sa yo bytes 20 jwenn afekte.
Se konsa, mwen k ap pase dwat devan etalaj la,
epi paske nan wout la, tankou m 'te di semèn pase a, kote teknikman chemine a ap grandi desann,
lè ou endèks nan yon etalaj, n ap garanti ke pozisyon nan 0th nan etalaj la
toujou k ap pase anvan pozisyon an pwemye nan etalaj la.
Sa a se kalite ki jan mwen te trase li semèn pase a.
Remake nan pati anba a nou gen adrès 0 ak nan tèt la nou gen Max adrès.
Chemine a ap toujou ap grandi desann.
Se pou nou di nou asiyen mwen.
Nou asiyen nonb antye relatif mwen, ki vle di nan kite l 'jis di moute isit la nonb antye relatif mwen vin afekte.
Lè sa a, nou asiyen etalaj nou an 5 nonm antye yo, ki vle di ke anba ke,
depi chemine a ap grandi desann, sa yo ki nonb antye relatif 5 jwenn afekte.
Men, paske se sou kouman ranje travay, n ap garanti ke pozisyon an pwemye nan etalaj la
toujou gen yon adrès mwens pase bagay la dezyèm nan etalaj la.
Se konsa, 0 pozisyon etalaj toujou gen rive an premye nan memwa,
Lè nou konsidere ke pozisyon etalaj 1 gen rive apre sa
ak pozisyon etalaj 2 gen rive apre sa,
ki vle di ke 0 pozisyon etalaj ta rive yon kote anba isit la,
pozisyon etalaj 1 ta rive pi wo a ki
paske k ap deplase moute vle di pi gwo adrès depi adrès la maksimòm se leve isit la.
Se konsa, etalaj [0] desann isit la, etalaj [1] moute isit la, etalaj [2] moute isit la, etalaj [3] moute isit la.
Avi sou jan anvan nou resevwa lajan nonb antye relatif mwen tout wout la moute isit la,
kòm nou avanse pli lwen e pli lwen nan etalaj nou an, nou ap vin pi pwòch ak pi pre nonb antye relatif nou mwen.
Li jis konsa k ap pase ki etalaj [5], ki se youn pozisyon pi lwen pase etalaj nou an,
se egzakteman ki kote nonm antye mwen te rive yo dwe afekte.
Se konsa, sa a, se pwen kote nou rive yo dwe frape espas ki la sou chemine a
ki te resevwa lajan pou nonb antye relatif mwen, epi nou ap mete ke a 0.
>> Sa a ki jan ki travay. Kesyon? Yeah.
[Elèv] Pa janm lide. Oke.
[Elèv] Ki jan ou evite sa yo sòt de erè?
Sa yo sòt de erè? Pa sèvi ak C kòm lang programmation ou a.
Sèvi ak yon lang ki gen avèk limit etalaj tcheke.
Osi lontan ke ou se atansyon, ou jis bezwen pou fè pou evite pral sot pase avèk limit yo nan etalaj ou a.
[Elèv] Se konsa, isit la, lè nou te ale sot pase avèk limit yo nan etalaj ou -
[Bowden] Sa a kote bagay sa yo kòmanse pral mal. >> [Elèv] Oh, oke.
Osi lontan ke ou rete nan memwa a afekte pou etalaj ou a, ou se amann.
Men, C fè sa ki pa gen okenn kont kouran erè. Si m 'fè etalaj [1000], li pral kè kontan jis modifye tou sa k ap pase -
Li ale nan konmansman an nan etalaj la, Lè sa a, li ale 1000 pozisyon apre epi li kouche li a 0.
Li pa fè ankenn kont kouran ki oh, sa a pa gen aktyèlman 1000 bagay sa yo nan li.
1000 se yon fason pi lwen pase sa m 'ta dwe chanje,
Lè nou konsidere ke Java oswa yon bagay ou pral jwenn etalaj soti nan endèks avèk limit
oswa endèks soti nan eksepsyon limit.
Se poutèt sa yon anpil nan pi wo nivo lang gen bagay sa yo
kote si ou ale pi lwen pase limit ki nan etalaj la, ou fail
pou ke ou pa kapab chanje bagay sa yo soti nan anba ou
ak Lè sa a, bagay sa yo ale pi mal pase jis ap resevwa yon eksepsyon
di ke ou te ale pi lwen pase nan fen etalaj la.
[Elèv] Se konsa, yo ta dwe nou te jis chanje <= jis <? La >> [Bowden] Yeah.
Li ta dwe <sizof (etalaj) / sizof (Int);
depi sizof (etalaj) a se 20, men nou sèlman vle 5. >> [Elèv] Dwa.
Plis kesyon? Oke.
>> [Elèv] Mwen gen yon kesyon. >> Yeah.
[Elèv] Ki sa ki varyab la etalaj aktyèl?
[Bowden] Tankou sa ki etalaj?
Etalaj tèt li se yon senbòl.
Li se jis adrès ki nan kòmansman an nan 20 bytes yo ke nou ap indican.
Ou ka panse a li kòm yon konsèy, men li se yon konsèy konstan.
Le pli vit ke bagay sa yo jwenn konpile, etalaj la varyab pa egziste ankò.
[Elèv] Se konsa, li montre kouman li jwenn gwosè a nan etalaj?
Kantite moun ki nan etalaj refere a gwosè a nan ki blòk ki ki senbòl refere a.
Lè m 'fè yon bagay tankou printf ("% p \ n", etalaj);
kite a kouri li.
Ki sa ki t 'mwen jis fè sa ki mal?
'Etalaj' etalaj deklare isit la.
Oh, moute isit la.
Sonnen se entelijan, epi li k ap pase nan avi ke mwen te deklare etalaj la kòm 5 eleman
men mwen m 'Indexing nan pozisyon 1000.
Li ka fè sa paske sa yo, se jis konstan.
Li ka sèlman ale twò lwen nan remarke ke mwen m 'pral pi lwen pase limit ki nan etalaj la.
Men, remake anvan lè nou te gen m 'rete nan kòrèk,
li pa ka pètèt detèmine konbyen valè mwen te kapab pran sou,
se konsa li pa kapab detèmine ke mwen te ale pi lwen pase nan fen etalaj la.
Se jis rezone yo te entelijan.
>> Men koulye a, fè buggy4. Se konsa, ki lòt bagay mwen fè sa ki mal?
Chal deklare fonksyon bibliyotèk 'printf'.
Mwen pral vle # enkli .
Oke. Koulye a, kouri buggy4.
Enpresyon valè a nan etalaj la tankou mwen te fè isit la, enprime li kòm yon konsèy
simagri yon bagay ki sanble ak sa a - bfb8805c - ki se kèk adrès
sa a, se nan rejyon an chemine-ich.
Etalaj tèt li se tankou yon konsèy, men li se pa yon konsèy reyèl,
depi yon konsèy regilye nou kapab chanje.
Etalaj se jis kèk konstan. Blòk yo 20 nan memwa kòmanse nan 0xbfb8805c adrès.
Se konsa, bfb8805c nan adrès sa a +20--oswa mwen devine -20 -
se tout nan memwa a afekte pou sa a etalaj.
Etalaj, varyab la li menm se pa sa ki estoke nenpòt kote.
Lè w ap konpile, du a - vag men nan li -
men du a pral jis itilize kote li konnen etalaj yo dwe.
Li konnen ki kote pozisyon kòmanse,
ak sa li ka toujou jis fè bagay sa yo an tèm de konpansasyon soti nan ki kòmansman.
Li pa bezwen yon varyab tèt li reprezante etalaj.
Men, lè m 'fè yon bagay tankou int * p etalaj =; kounye a p se yon konsèy ki pwen ak sa yo ki etalaj,
e kounye a, p aktyèlman egziste sou pil la.
Mwen lib yo chanje p. Mwen kapab fè p = malok.
Se konsa, li orijinal pwente etalaj; kounye a li lonje dwèt nan kèk espas sou pil la.
Mwen pa kapab fè etalaj = malok.
Si sonnen se entelijan, li pral rele nan m 'dwa koupe baton an.
Aktyèlman, mwen sèten GCC ta fè sa tou.
Se konsa, kalite etalaj 'int [5]' se pa sede.
Ou pa ka bay yon bagay nan yon kalite etalaj
paske etalaj se jis yon konstan.
Li se yon senbòl ki referans sa yo bytes 20. Mwen pa kapab chanje li.
>> [Elèv] Lè ki kote gwosè a nan etalaj la ki estoke?
[Bowden] Li pa nan ki estoke nenpòt kote. Li nan lè li nan konpile.
Se konsa, ki kote gwosè a nan etalaj ki estoke?
Ou ka itilize sèlman sizof (etalaj) andedan nan fonksyon sa a, ki etalaj la te deklare tèt li.
Se konsa, si m 'fè kèk fonksyon, foo, epi mwen fè (Int etalaj [])
printf ("% d \ n", sizof (etalaj));
ak Lè sa a, desann isit la mwen rele foo (etalaj);
andedan nan fonksyon sa a - kite a kouri li.
Sa a se sonnen yo te entelijan ankò.
Li nan di m 'ki sizof sou paramèt fonksyon etalaj
ap retounen gwosè nan '* int'.
Sa a ta dwe yon erè si li pa sa m 'te vle rive.
Se pou nou aktyèlman fèmen Werror.
Avètisman. Avètisman yo se amann.
Li pral toujou konpile osi lontan ke li gen yon avètisman.
. / A.out ki pral enprime 4.
Avètisman an ki te pwodwi se yon endikatè ki klè nan sa ki ale mal.
Sa a etalaj int se jis ale nan enprime sizof (Int *).
Menm si mwen mete etalaj [5] nan isit la, li la toujou jis pral enprime sizof (Int *).
Se konsa, le pli vit ke w fin pase l 'nan yon fonksyon, distenksyon ki genyen ant ranje ak endikasyon
se inègzistan.
Sa a k ap pase yo yon etalaj ki te deklare sou chemine a,
men le pli vit ke nou pase ki valè, ki 0xbf bla, bla, bla nan fonksyon sa a,
Lè sa a, sa a konsèy lonje dwèt ak sa yo ki etalaj sou pil la.
Se konsa, ki vle di ke sizof aplike sèlman nan fonksyon ki te etalaj la te deklare,
ki vle di ke lè w ap konpile sa a fonksyon,
lè rezone ale nan fonksyon sa a, li wè etalaj la se yon etalaj int nan gwosè 5.
Se konsa, Lè sa a, li wè sizof (etalaj). Oke, ki nan 20.
Sa a se aktyèlman ki jan sizof fondamantalman travay pou prèske tout ka yo.
Sizof se pa yon fonksyon m; li nan yon operatè.
Ou pa rele fonksyon an sizof.
Sizof (Int), du a pral jis tradui ki a 4.
Te resevwa li? Oke.
>> [Elèv] Se konsa, sa se diferans ki genyen ant sizof (etalaj) nan prensipal ak nan foo?
Sa a se paske nou ap di sizof (etalaj), ki se nan * int kalite,
Lè nou konsidere ke etalaj la desann isit la se pa nan * int kalite, li nan yon etalaj int.
>> [Elèv] Se konsa, si ou te gen paramèt la nan etalaj [] olye pou yo int etalaj *,
ta sa vle di ke ou ta ka toujou chanje pozisyon paske kounye a li nan yon konsèy?
[Bowden] Tankou sa a? >> [Elèv] Yeah. Èske ou ka chanje pozisyon nan fonksyon an kounye a?
[Bowden] Ou te kapab chanje pozisyon nan tou de ka.
Nan tou de ka sa yo ou yo gratis yo di etalaj [4] = 0.
[Elèv] Men, ou ka fè pwen etalaj yon lòt bagay?
[Bowden] Oh. Yeah. Nan nenpòt ka - >> [elèv] Yeah.
[Bowden] distenksyon ki genyen ant etalaj [] ak yon etalaj * Int, pa gen.
Ou kapab tou jwenn kèk etalaj pluridimansyonèl nan isit la
pou kèk sentaks pratik, men li la toujou jis yon konsèy.
Sa vle di se mwen menm ki gratis fè etalaj = malok (sizof (Int)); e kounye a, pwen yon lòt kote.
Men, jis tankou ki jan sa ap travay pou tout tan ak toujou,
chanje sa a etalaj pa fè li lonje dwèt sou yon lòt bagay
pa chanje sa a etalaj desann isit la paske li nan yon kopi agiman an,
li pa yon konsèy ak sa yo ki agiman.
Ak aktyèlman, menm jan plis endikasyon ke li nan ekzakteman menm bagay la -
nou deja wè simagri sa ki etalaj enprime -
ki sa si nou enprime adrès la nan etalaj la oswa adrès la nan adrès ki nan etalaj la
swa kot moun sa yo?
Se pou nou inyore sa a youn.
Oke. Sa a se amann. Li nan kounye a kouri. / A.out.
Etalaj enprime, Lè sa a, enprime adrès la nan etalaj la, ki se menm bagay la.
Etalaj jis pa egziste.
Li konnen lè w ap enprime etalaj, w ap enprime senbòl la ki refere a sa yo bytes 20.
Enpresyon adrès la nan etalaj la, byen, etalaj pa egziste.
Li pa gen yon adrès, se konsa li jis simagri adrès la nan 20 moun ki bytes.
Osito ke ou konpile desann, renmen nan konpile buggy4 ou an. / A.out,
etalaj se inègzistan.
Endikasyon egziste. Matris pa fè sa.
Blòk yo nan memwa ki reprezante etalaj la toujou egziste,
men etalaj la varyab ak varyab la ki kalite pa egziste.
Moun sa yo se tankou diferans ki prensipal ant ranje ak endikasyon
yo osito ke w fè apèl fonksyon, pa gen okenn diferans.
Men, andedan nan fonksyon sa a, ki etalaj la li menm te deklare, sizof travay yon fason diferan
depi w ap enprime gwosè a nan blòk yo olye pou yo gwosè a nan kalite la,
epi ou pa kapab chanje li paske li nan yon senbòl.
Enpresyon bagay la ak adrès la nan bagay la simagri menm bagay la.
Epi sa a, bèl anpil li.
[Elèv] Èske ou ta kapab di ke yon lòt fwa ankò?
Mwen ta ka janm manke yon bagay.
Etalaj Enpresyon ak adrès etalaj simagri menm bagay la,
Lè nou konsidere ke si ou enprime yon konsèy kont adrès ki nan konsèy la,
bagay la yon sèl simagri adrès la nan ki sa w ap lonje dwèt a,
lòt la simagri adrès ki nan konsèy la sou pil la.
Ou ka chanje yon konsèy; ou pa kapab chanje yon senbòl etalaj.
Ak sizof konsèy ki pral enprime gwosè a nan ki kalite konsèy.
Se konsa, int * p sizof (p) ki pral enprime 4,
men int etalaj [5] ekri ak lèt ​​detache sizof (etalaj) ki pral enprime 20.
[Elèv] Se konsa, int etalaj [5] pral enprime 20? >> Wi.
Se poutèt sa andedan buggy4 lè li itilize yo dwe sizof (etalaj)
sa a te fè mwen <20, ki se pa sa nou te vle.
Nou vle mwen <5. >> [Elèv] Okay.
[Bowden] Lè sa a, le pli vit ke ou kòmanse pase nan fonksyon yo,
si nou te fè sa int * P = etalaj;
andedan nan fonksyon sa a, nou ka fondamantalman itilize p ak etalaj nan egzakteman fason yo menm,
eksepte pou pwoblèm nan sizof ak pwoblèm nan chanje.
Men, p [0] = 1; se menm bagay la kòm li di etalaj [0] = 1;
Ak le pli vit ke nou di foo (etalaj); oswa foo (p);
andedan nan fonksyon an foo, sa a se apèl la menm de fwa.
Pa gen okenn diferans ant de sa yo apèl.
>> Tout moun bon sou sa? Oke.
Nou gen 10 minit.
>> N ap eseye jwenn nan pwogram sa a Typer pirataj,
sit wèb sa a, yo te soti kite ane pase a oswa yon bagay.
Li nan jis sipoze tankou ou tape owaza epi li simagri soti -
Kèlkeswa dosye li k ap pase nan yo te chaje se sa ki li sanble tankou w ap tape.
Li sanble ke kèk kalite opere kòd sistèm.
Sa a ki sa nou vle aplike.
Ou ta dwe gen yon ègzèkutabl binè te rele hacker_typer
ki pran nan yon diskisyon sèl, dosye a nan "kalite aker."
Kouri ègzèkutabl a ta dwe klè ekran an
ak Lè sa a, enprime soti yon karaktè nan dosye a fin pase-a chak fwa itilizatè a apwi yon kle.
Se konsa, tou sa ou peze kle yo, li ta dwe voye jete lwen ak olye enprime yon karaktè soti nan dosye a
ki se agiman an.
Mwen pral bèl anpil di w ki sa bagay sa yo nou ap ale nan bezwen konnen yo se.
Men, nou vle tcheke deyò bibliyotèk la termios.
Mwen pa janm te itilize sa a bibliyotèk nan tout lavi m ', se konsa li gen rezon trè minim.
Men, sa a se pral fè bibliyotèk la nou ka itilize yo jete karaktè a ou frape
lè w ap tape nan estanda pous
Se konsa, hacker_typer.c, epi nou ap ale nan vle # enkli .
Gade nan paj la nonm pou termios - I'm devinèt tèminal li nan OS oswa yon bagay -
Mwen pa konnen kijan li li.
Gade sa a, li di yo mete sa yo dosye 2, konsa nou pral fè sa.
>> Premye bagay premye, nou vle pran m 'nan yon diskisyon sèl, ki se dosye a nou ta dwe louvri.
Se konsa, sa m 'vle fè? Kouman pou mwen tcheke wè mwen gen yon agiman yon sèl?
[Elèv] Si arg egal li. >> [Bowden] Yeah.
Se konsa, si (arg = 2!) Printf ("itilizasyon:% s [dosye yo louvri]").
Se konsa, kounye a si mwen kouri sa a san yo pa founi yon agiman dezyèm - o, mwen bezwen liy nan nouvo -
ou pral wè li di l ':. / hacker_typer,
ak Lè sa a, agiman nan dezyèm ta dwe dosye a mwen vle louvri.
Kounye a ki sa mwen dwe fè?
Mwen vle li nan sa a dosye. Kouman pou mwen li nan yon dosye?
[Elèv] Ou louvri li an premye. >> Yeah.
Se konsa, fopen. Ki sa ki fopen sanble?
[Elèv] fichier. >> [Bowden] fichier a pwal argv [1].
[Elèv] Lè sa a, ki sa ou vle fè ak li, pou - >> [Bowden] Yeah. La
Se konsa, si nou pa t 'sonje, ou jis ta ka fè fopen moun,
kote li pral gen yon konstitisyon chemen Char * kote chemen se fichier,
Konstitisyon * Char mòd.
Si ou rive pa a sonje sa mòd se, Lè sa a, ou ka gade pou mòd.
Anndan nan paj nonm, pèsonaj la koupe a se sa ki ou ka itilize pou fè rechèch pou bagay sa yo.
Se konsa, mwen tape / mòd pou fè rechèch pou mòd.
n ak N yo se sa ki ou ka itilize yo sik atravè alimèt rechèch la.
Isit la li di pwen yo mòd agiman nan yon fisèl
kòmanse ak youn nan sekans sa yo.
Se konsa, r, Open tèks dosye pou lekti. Sa a ki sa nou vle fè.
Pou lekti, e mwen vle nan magazen sa.
Bagay la a pwal yon * DOSYE. Kounye a ki sa mwen vle fè?
Ban m 'yon dezyèm fwa.
Oke. Kounye a ki sa mwen vle fè?
[Elèv] Tcheke si li nan nil. >> [Bowden] Yeah.
Nenpòt ki lè w louvri yon dosye, asire w ke ou se avèk siksè kapab louvri li.
>> Koulye a, mwen vle fè sa bagay termios kote mwen vle premye li anviwònman mwen ye kounye a
epi sove moun ki nan yon bagay, Lè sa a, mwen ta vle chanje anviwònman m '
jete nenpòt karaktè ke mwen tape,
ak Lè sa a, mwen vle mete ajou sa yo anviwònman.
Lè sa a, nan fen pwogram lan, mwen ta vle chanje tounen nan anviwònman orijinal mwen.
Se konsa, struct an a pwal nan termios tip, ak mwen pral vle de moun sa yo.
Youn nan premye a pwal current_settings m 'yo,
ak Lè sa a, yo pwal santi yo dwe hacker_settings m 'yo.
Premyèman, mwen pral vle sove anviwònman aktyèl m 'yo,
Lè sa a, mwen pral vle mete ajou hacker_settings,
ak Lè sa a, fason nan fen pwogram m 'yo, mwen vle retounen anba anviwònman aktyèl.
Se konsa, ekonomize anviwònman ye kounye a, wout la ki travay, nou termios moun.
Nou wè ke nou gen sa a tcsetattr Int, Int tcgetattr.
Mwen pase nan yon struct termios pa konsèy li yo.
Wout la sa a pral gade se - I've deja bliye sa ki te fonksyon an rele.
Kopi ak keratin li.
Se konsa, tcgetattr, lè sa a mwen vle pase nan struct a ke mwen ekonomize enfòmasyon ki nan,
ki a pwal current_settings,
ak agiman an premye se dèskripteur nan dosye pou bagay la mwen vle pou konsève pou atribi ki pou.
Ki sa ki dèskripteur nan dosye se, se tankou nenpòt ki lè ou louvri yon dosye, li vin yon dèskripteur dosye-a.
Lè m 'fopen argv [1], li vin yon dèskripteur dosye ki w ap indican
nenpòt lè ou vle li oswa ekri nou nan li.
Sa se pa dèskripteur nan dosye mwen vle itilize isit la.
Gen twa deskriptè dosye ou gen pa default,
ki se estanda nan, estanda soti, ak erè estanda.
Pa default, mwen panse ke li nan estanda nan se 0, estanda soti se 1, ak erè estanda se 2.
Se konsa, sa m 'vle chanje anviwònman yo nan?
Mwen vle chanje anviwònman yo nan nenpòt lè mwen frape yon karaktè,
Mwen vle li nan jete ki karaktè lwen olye pou yo enprime li a ekran an.
Ki sa ki kouran - estanda nan, soti estanda, oswa erè estanda -
reponn a bagay sa yo lè m 'tape nan klavye a? >> [Elèv] Creole pous >> Yeah.
Se konsa, mwen ka swa fè 0 oswa mwen kapab fè stden.
Mwen ap resevwa current_settings a nan estanda pous
>> Koulye a, mwen vle mete ajou sa yo anviwònman,
konsa premye fwa mwen pral kopye nan hacker_settings sa ki current_settings m ', se.
Ak ki jan strukt travay se li pral jis yon kopi.
Sa a kopi tout jaden yo, menm jan ou ta atann.
>> Koulye a, mwen vle mete ajou kèk nan jaden yo.
Gade nan termios, ou ta gen li nan yon anpil nan sa a
jis yo wè sa ki ou ta vle gade pou li a,
men drapo yo w ap ale nan vle gade pou yo se eko,
Se konsa repete apre lòt fin karaktè D 'eko.
Premye fwa mwen vle mete - I've deja bliye sa jaden yo ye.
Sa a se sa struct a sanble.
Se konsa, mòd opinyon mwen panse ke nou vle chanje.
Nou pral gade nan solisyon an a asire w ke nan ki sa nou vle chanje.
Nou ta vle chanje lflag yo nan lòd yo anpeche ki bezwen yo gade atravè tout bagay sa yo.
Nou ta vle chanje mòd lokal yo.
Ou ta gen li nan bagay sa a tout antye yo konprann kote tout bagay ki dwe
ke nou vle chanje.
Men, li la anndan mòd lokal kote n ap pral vle chanje sa.
Se konsa, hacker_settings.cc_lmode se sa ki sa yo rele.
c_lflag.
Sa a se kote nou jwenn nan operatè lojik.
Nou se kalite soti nan tan, men nou pwal ale nan li rapid reyèl.
Sa a se kote nou jwenn nan lojik operatè yo,
kote mwen panse mwen te di ke youn tan lontan ke nenpòt lè ou kòmanse fè fas ak drapo,
w ap ale nan dwe lè l sèvi avèk lojik operatè anpil.
Chak ti jan nan drapo a koresponn ak kèk sòt de konpòtman.
Se konsa, isit la, sa a drapo a gen yon pakèt moun sou bagay sa yo diferan, kote tout nan yo vle di yon bagay diferan.
Men, sa ki mwen vle fè se jis fèmen ti jan a ki koresponn ak repete apre lòt fin.
Se konsa, yo vire ki wete m 'fè & = ¬ repete apre lòt fin.
Aktyèlman, mwen panse ke li la tankou tECHO oswa yon bagay. Mwen jis ale nan tcheke ankò.
Mwen ka termios li. Li nan jis repete apre lòt fin.
Repete apre lòt fin a pwal yon ti jan sèl.
¬ repete apre lòt fin ki pral vle di tout Bits yo mete nan 1, ki vle di tout drapo yo mete vre
eksepte pou ti jan a repete apre lòt fin.
By fini drapo lokal mwen an ak sa a, sa vle di tout drapo ki aktyèlman ap mete nan vre
yo pral toujou mete vre.
Si yo drapo repete apre lòt fin m 'mete nan verite a, Lè sa a, sa a se nesesèman mete fo sou drapo a repete apre lòt fin.
Se konsa, liy sa a nan kòd jis vire sou drapo a repete apre lòt fin.
Liy ki lòt kote nan kòd, mwen pral jis kopi yo nan enterè yo nan tan ak Lè sa a, eksplike yo.
Nan solisyon an, li te di 0.
Li pwobableman pi bon yo ouvètman di stden.
>> Remake mwen tou fè repete apre lòt fin | ICANON isit la.
ICANON refere a yon bagay ki apa a, ki vle di mòd kanonyal.
Ki sa ki vle di kanonyal mòd se nòmalman lè w ap tape soti nan liy lòd,
estanda nan pa trete anyen toutotan ou poko frape newline.
Se konsa, lè ou GetString, ou tape yon pakèt moun sou bagay sa yo, Lè sa a, ou frape newline.
Sa a se lè li nan voye nan estanda pous
Sa a default la.
Lè m 'fèmen kanonyal mòd, kounye a chak karaktè sèl ou peze
se sa vin trete, ki se nòmalman kalite move paske li nan ralanti nan pwosesis sa yo bagay sa yo,
ki se poukisa li a bon tanpon l 'nan liy tout antye.
Men, mwen vle nan chak karaktè ap trete
depi m 'pa vle li rete tann pou mwen pou m frape newline
anvan li trete tout karaktè yo mwen te sezisman.
Sa a vire nan mòd kanonyal.
Bagay sa a jis vle di lè li aktyèlman trete karaktè.
Sa vle di travay sou yo imedyatman; le pli vit ke mwen sezisman yo, travay sou yo.
Ak sa a se fonksyon la ki se mete ajou anviwònman mwen an pou estanda nan,
ak mwayen TCSA fè li kounye a.
Opsyon yo lòt yo tann jiskaske yo tout bagay ki se kounye a sou kouran an trete.
Sa pa reyèlman gen pwoblèm.
Jis kounye a chanje anviwònman mwen an kapab fè nenpòt sa se kounye a nan hacker_typer_settings.
Mwen devine mwen rele l 'hacker_settings, kidonk kite a chanje sa.
Chanje tout bagay sa yo hacker_settings.
>> Koulye a, nan fen pwogram nou an, nou ap ale nan vle retounen
nan sa se kounye a andedan nan normal_settings,
ki se pral jis gade tankou & normal_settings.
Avi mwen pa te chanje nenpòt nan normal_settings mwen an depi orijinal jwenn li.
Lè sa a, jis chanje yo tounen, mwen pase yo tounen nan fen an.
Sa a te mete ajou nan. Oke.
>> Koulye a, anndan isit la mwen pral jis eksplike kòd la nan enterè an de tan.
Li pa ke kòd anpil.
Nou wè nou li yon karaktè nan dosye a. Nou rele l 'f.
Koulye a, ou kapab fgetc nonm, men ki jan fgetc ki pral travay
se jis li a pral retounen pèsonaj la ke ou jis li oswa èof,
ki koresponn nan fen a nan dosye a oswa kèk kap pase erè.
Nou ap loupin, kontinye li yon karaktè sèl nan dosye a,
jiskaske nou te kouri soti nan karaktè li.
Ak pandan n ap fè sa, nou tann sou yon karaktè sèl soti nan estanda pous
Chak fwa yon sèl ou tape yon bagay nan liy lan lòd,
ki nan lekti nan yon karaktè soti nan estanda pous
Lè sa a, putchar se jis pral mete Char nan nou li moute isit la nan dosye a soti estanda.
Ou kapab putchar moun, men li jis mete estanda soti, li nan enprime ki karaktè.
Ou kapab tou jis fè printf ("c%", c); Menm lide.
Sa se pral fè èstime nan travay nou an.
>> Bagay la pase nou pral vle fè se jis fkloz dosye nou yo.
Si ou pa fkloz, sa se yon fwit memwa.
Nou vle fkloz dosye a nou orijinal louvri, e mwen panse ke nan li.
Si nou fè sa, mwen deja gen pwoblèm.
Ann gade pou wè.
Ki sa ki t 'li pote plent osijè de?
Espere 'int' men agiman se nan kalite 'struct _IO_FILE *'.
Nou pral wè si ki travay.
Se sèlman pèmèt nan C99. Augh. Okay, fè hacker_typer.
Koulye a, nou jwenn deskripsyon plis itil.
Se konsa, sèvi ak nan idantifyan sekrè 'normal_settings'.
Mwen pa t 'rele li normal_settings. Mwen rele l 'current_settings.
Se konsa, kite a chanje nan tout sa.
Koulye a, pase agiman.
Mwen pral fè sa-a 0 pou kounye a.
Oke. . / Hacker_typer cp.c.
Mwen menm mwen te pa t 'klè ekran an nan kòmansman an.
Men, ou ka gade tounen nan mete nan pwoblèm dènye yo wè ki jan ou klè ekran an.
Li nan jis enprime kèk karaktè
pandan y ap sa a ap fè sa m 'vle yo fè.
Oke.
Ak panse sou rezon ki fè sa a bezwen yo dwe 0 olye pou yo stden,
ki ta dwe # defini 0,
sa a se ki ap plenyen ke -
Anvan lè m 'te di ke gen nan deskriptè dosye men Lè sa a, nou menm tou nou gen * DOSYE ou a,
yon dèskripteur dosye se jis yon nonb antye relatif sèl,
Lè nou konsidere ke yon * DOSYE gen yon pakèt antye nan bagay ki asosye ak li.
Rezon ki fè nou bezwen di 0 olye pou yo stden
se ke stden se yon * DOSYE ki pwen bagay sa a, ki indican dèskripteur dosye 0.
Se konsa, menm moute isit la, lè m 'fè fopen (argv [1], mwen jwenn yon * DOSYE tounen.
Men, yon kote nan ki * DOSYE se yon bagay ki koresponn a dèskripteur nan dosye pou sa dosye.
Si ou gade nan paj la nonm pou louvri, Se konsa, mwen panse ou pral dwe fè nonm 3 louvri - non -
nonm 2 louvri - wi.
Si ou gade nan paj la pou ouvè, ouvè, se tankou yon fopen pi ba-nivo,
epi li retounen dèskripteur nan dosye aktyèl.
fopen fè yon pakèt moun sou bagay sou tèt ouvè,
ki olye pou yo retounen jis ki dèskripteur dosye retounen yon DOSYE antye * konsèy
andedan nan ki se dèskripteur dosye ti kras nou an.
Se konsa, estanda nan refere a bagay la * DOSYE,
Lè nou konsidere ke 0 refere a jis estanda nan dèskripteur dosye ki nan tèt li.
>> Kesyon?
[Ri] te Gate nan sa.
Tout dwa. Nou ap fè. [Ri]
>> [CS50.TV]