>> [Tónlist spila]
>> ROB BODEN: Allt í lagi.
Svo, fyrsta sem fyrst, af vídeó úr kunnuglega andlit.
>> [Video spilun]
>> -Allt í lagi.
Þetta er CS50, og þetta er byrjunin á viku þrjú.
Fyrirgefðu að ég gat ekki verið þarna með þér í dag, en leyfa mér að kynna
Eigin CS50 er Rob Boden.
>> [END vídeó spilun]
>> [Lófaklapp og Skál]
>> ROB BODEN: The Viðtöl í þessi vídeó er frábær.
Allt í lagi.
Svo fyrst það er önnur hádegismat.
Það er á morgun á 01:15.
Það er engin hádegismatur föstudaginn.
Það er með Quora.
Tommy er ekki hér enn, en eitt af fólk það er fyrrum yfirmaður CF,
Tommy McWilliam.
Svo er hann skemmtilegur gaur.
Þú ættir að koma.
>> Allt í lagi.
Svo í síðustu viku, við byrjuðum að brjóta sundur um hvað streng raunverulega er.
Við höfum vitað frá upphafi að það er röð af stöfum.
En í síðustu viku, delved við í raun að það er í raun röð
stafir, vel, við höfum nú fylki af stöfum.
Og við vitum að a band, er það fylki stafi, aftast,
við höfum þetta sérstaka null bæti, þetta sviga 0, sem gefur til kynna lok
band.
>> Og svo er band fylki af stafir, en við getum haft meira en
bara fylki af stöfum, við getum haft fjölda af einhverju
tegund af hlutur sem við viljum.
Svo, ef þú manst frá síðustu viku, Ages forrit sem Davíð kynnt
mjög fljótt.
Svo fyrsta sem við ætlum að gera er að spyrja notandann um heiltala, sem
fjöldi fólks í herberginu.
Þegar við höfum sem heiltölu, við erum að lýsa fylki.
Taka þessa krappi setningafræði.
Þú ert að fara að venjast því.
>> Þannig að við erum að lýsa fjölda heiltalna kallað aldur, og það eru n
heiltölur í þessu fylki.
Þannig að þetta mynstur hérna, þetta 4 INT Ég er jafnt og 0, I er minni en n, ég auk
plús, það er líka að fara að vera hægt að að þú færð mjög venjast.
Því það er ansi mikið hvernig þú ert alltaf að fara að iterate yfir fylki.
Svo muna að n er lengd array okkar.
Og svo hér erum við ítrekað að biðja fyrir aldri sem ég í herberginu.
>> Eftir þetta förum við niður, og fyrir hvað handahófskennt ástæða, við þá
prenta út hversu gamall þeir eru að fara að vera á ári héðan í frá.
Og keyra þessi forrit, skulum gera aldri, punktur rista aldri.
Svo fjöldi fólks í herberginu, skulum segja að það eru þrír.
Og segja, fyrst maður er 13, Næsta er 26, og síðasta er 30..
Svo þá er það mun kunnugt er yfir þeim þremur fólk, prenta út 14, 27, og 31.
>> Svo muna að þegar við lýsa Fylki af stærðinni N, Vísitölurnar í því
array, fylki hefur gildi og vísitölur 0, 1, 2, alla leið
allt að n mínus 1.
Svo þegar ég sagði það voru þrjár manneskjur í herberginu, og við setjum hér
fyrsta endurtekning í gegnum þetta lykkja, ég er að fara að vera 0.
Svo í vísitölunni 0.
Við erum að framselja fyrsta aldri sem notandi slær inn.
Þá í the næstur einn, við erum að slá inn Seinni n notandinn slær, og í
við hliðina á tveimur, síðustu n.
>> Svo eftir því að fylki af stærð þrjú hefur ekki neitt
í vísitölunni þremur.
Þetta er ekki gild.
Allt í lagi.
Svo, að fara aftur hingað.
Svo nú er að við höfum brugðist við fylki, við höfum einhverja þekkingu.
Nú ætlum við að fara á stjórn lína rifrildi, sem eru að fara að vera
laglegur viðeigandi að þetta vandamál setja.
>> Svo allt þar til nú, þegar þú hefur lýst meginhlutverki þitt höfum við
sagði Int helstu ógilt.
Svo ógilt bara þýðir að við erum ekki liggur einhver
rök til þessa aðgerð.
Nú erum við að fara að sjá að helstu getur tekið nokkrar rök.
Hér við köllum þá INT argc og band argv sviga.
The sviga, enn og aftur, sem bendir til að við erum að fást við fylki.
Svo hér, band argv sviga, við erum að takast á við fjölda strengi.
Svo argc, það er að fara að kynna hversu margir rök við höfum
samþykkt til þessarar áætlunar.
Og til að sjá hvað það þýðir, skulum loka þessu.
>> OK.
Svo allt þar til nú höfum við keyrt á hverjum program eins punktur skástrik aldri.
Við getum líka, í stjórn lína, framhjá standast rök, þannig að hugtakið, stjórn
lína rifrildi.
Svo fyrsta rifrildi, halló heimur.
Svo hér, argc væri þrír.
Það er telja á rökum í stjórn lína.
Argc er alltaf að minnsta kosti 1, þar sem punktur rista aldri, sig, telst eitt af
the stjórn lína rifrildi.
>> Þá er halló fyrst.
Ef punktur rista aldur er 0, þá Halló er fyrst og heimurinn er
Seinni stjórn lína rifrildi.
Svo band argv, við erum að fara að sjá, inniheldur strengi, punktur skástrik
aldur, halló, og heimurinn.
Og, eftir beiðni Davíðs, við erum að fara til að spila myndskeið kynna það.
>> [Video spilun]
>> -Hingað til í áætlunum sem við höfum skrifað, höfum við lýst því yfir
Helstu og int helstu ógilt.
Og allan þennan tíma, sem ógilt hefur einfaldlega verið að tilgreina að
program hjartarskinn ekki taka allir stjórn lína rifrildi.
Með öðrum orðum, þegar notandi rekur program, hann eða hún getur veitt stjórn
lína rifrildi með því að skrifa til viðbótar orð eða setningar eftir að forritið er
nafn þegar beðið er um.
>> Jæja, ef þú vilt þú forrit til að taka stjórn lína rifrildi, einn eða
fleiri slík orð, þurfum við að skipta ógilt með nokkrum rökum.
Svo skulum gera það.
Fela CS50.h.
Hafa Standard io.h.
Int helstu.
Og nú, í stað þess að ógilt, ég ætla að tilgreina við int heitir argc, og
array strengi kallast argv.
Nú, argc og argv eru einfaldlega samninga.
>> Við gætum hafa kallað þessi rök flest allt sem við viljum.
En hvað er mikilvægt er að argc er int vegna þess, samkvæmt skilgreiningu, er það
fara að innihalda rök telja, að fjöldi orða í heild að
notandi hefur slegið hvetja hans eða hennar.
argv, á meðan, rifrildi vektor, er að fara til raunverulega vera fylki geyma
öll orðin sem notandinn hefur slegið hvetja hans eða hennar.
>> Við skulum halda áfram að gera eitthvað núna með einum eða fleiri af þessum
stjórn lína rifrildi.
Einkum skulum fara á undan og prenta hvað orð notandinn slær
eftir nafni forritsins þegar beðið er um.
Open krappi.
Loka krappi.
Printf prósent s sviga og komma.
Og nú þarf ég að segja printf hvaða gildi að stinga inn í þessi tákn.
Ég vil fyrsta orðið sem notandinn hefur slegið eftir nafni forritsins,
og svo ég ætla að tilgreina argv krappi 1, loka
sviga, semíkommu.
>> Nú, hvers vegna krappi 1 og ekki krappi 0?
Jæja, það kemur í ljós, sjálfkrafa vistuð í argv 0 er að fara að vera
raunverulegt nafn áætlunarinnar.
Þannig að fyrsta orðið sem notandinn slær eftir nafn forritsins er með
venju, að fara að vera geymd í argv 1.
Skulum nú saman og keyra þetta forrit.
>> Gerðu argv 0, punktur skástrik argv 0.
Og nú orð eins halló.
Enter.
Og þar höfum við það, halló.
>> [END vídeó spilun]
>> ROB BODEN: Allt í lagi.
Loka það.
Svo taka a líta á þessi forrit sem við kynntum bara okkur vel, bara
til að sýna, ef við prentað argv 0, gera, nú hvað er það, argv 0, punktur rista argv 0.
Svo, eins og búist, það er prentun út nafn af the program, þar argv 0 er
alltaf að fara til vera the nafn af the program.
En við skulum gera eitthvað aðeins meira áhugavert.
>> Svo í Heimadæmi, youll 'vera kynna þessa virkni, atoi.
Og hvað þurfum við notum atoi fyrir?
Það er að fara að breyta band til heiltala.
Þannig að ef ég geng framhjá band, eitt tvö þrjú, til atoi, sem munum breyta því
til tölunnar, einn tveir þrír.
Þannig að við erum að fara að breyta fyrsta stjórn lína rifrildi heiltala,
og þá bara prenta það heiltölu.
>> Svo í grundvallaratriðum, við erum konar reimplementing GetInt, bara
heiltala er slegið á stjórn lína í stað í áætluninni
gagnvirkt.
Svo, gera argv 0, við skulum gera það hér, og loka því.
Svo gangi argv 0, og við skulum slá inn heiltala, einn tveir þrír fjórir einn tveir.
Svo það verður að prenta heiltala, einn Tveir Þrír Four einn tveir.
There ert sumir næmi til atoi að það mun hætta að umhyggja um neitt
utan gilt tölugildi staf, en það skiptir ekki máli.
>> Svo hvað finnst þér gerist ef ég að gera þetta?
Skiptingu kenna.
Svo hvers vegna er það?
Ef þú horfir aftur á dagskrá okkar, við erum umbreyta argv 1, fyrsta rifrildi
Eftir að forritið heiti, heiltala.
En það er engin rök liðin Eftir að forritið nafn.
Svo hér sjáum við að þetta er þrjótur program, þar sem, ef við reynum að keyra hana
án rök, það verður bara hrun.
>> Svo annar sameiginlegur mynstur sem þú munt sjá er eitthvað eins og, ef argc er minna
en tveir, sem gefur til kynna að það var ekki að minnsta kosti program nafn og
fyrsta rifrildi, þá munum við gera eitthvað eins printf, ekki nóg
stjórn lína rifrildi.
Það er líklega ekki góð til að prenta, það er líklega eitthvað, eins og
þú ættir að slá inn heiltölu í stjórn lína.
Ég verð bara að enda það þar.
Og síðan aftur 1.
Svo muna að í lok okkar program, ef við aftur 0, þessi tegund af
sýnir árangur.
Og helstu einnig sjálfkrafa skilar 0 ef þú hefur ekki.
>> Svo hér erum við retuning 1 til kynna að það er ekki árangur.
Og þú getur aftur hvað sem þú vilt, bara, 0 sýnir árangur, og
eitthvað annað til kynna bilun.
Svo skulum keyra þessa útgáfu af hlutum.
Svo nú, ef við ekki inn a stjórn lína rök, verður það rétt að segja
okkur, ekki nógu stjórn lína.
Náði ekki að klára setninguna.
Annars, ef við fara í raun það eina, það geta ljúka verkefninu.
Svo er þetta hvernig þú myndir nota argc í skyni að sannreyna fjölda
stjórn lína rifrildi sem eru í raun liðin.
>> Svo skulum gera þetta forrit aðeins meira flókið, og líta á sekúndu
endurtekning á hlutum.
Svo nú, við erum ekki bara prentun á Fyrsta stjórn lína rifrildi.
Hér erum við iterating frá int i jafningjar 0, I er minni en argc, ég auk
plús, og prentun argv, vísitölu i.
Þannig að þetta mynstur, aftur, þetta er sú sama mynstur eins og áður, nema í stað
um að hringja í breytu n, við erum að nota argc.
>> Þannig að þetta er iterating yfir hverri vísitölu í fylkinu, og prentun hvor
þáttur í þeirri fylking.
Og svo, þegar við hlaupa þetta forrit, vel, Ég vissi ekki að slá inn hvaða stjórn lína
rök, svo það bara prentar the program nafn.
Ef ég inn helling af hlutum, verður það prenta einn, hvor á sinni línu.
>> OK.
Þannig að við skulum taka þetta einu skrefi lengra.
Og í stað þess að prenta hvert rifrildi á eigin línu, við skulum prenta hvert
eðli hvers rifrildi í sér línu.
Svo muna að argv er fylki af strengjum.
Svo er það band, en fylki af stöfum?
Svo það þýðir að argv er í raun array af fylki af stöfum.
Svo að taka kostur af því, skulum hunsa þetta fyrir nú.
Skulum íhuga bara strenginn argv 0.
>> Þannig að ef við viljum koma hvert eðli argv 0 á eigin línu, þá vil ég
að gera mynstur sem við erum að nota til, ég er minni en lengd array,
sem hér er strlen af, það er ekki það sem ég vil gera, band
s jafngildir argv 0.
Svo er i minni en lengd af okkar array, sem í þessu tilfelli er fylki
af stöfum, ég plús plús.
Og svo, eins og við sáum í síðustu viku, það er tilvalið ef við færa þetta strlen utan
á ástandi, þar sem n verður að bæta að strlen af ​​s hvert sinn sem við förum
gegnum lykkjuna, og það er ekki að fara að breytast.
Þannig að við munum setja það jafnt n hérna.
>> OK.
Svo nú erum við iterating yfir hverri vísitölu í array.
Og svo, ef við viljum prenta hvert eðli í því fylki, prósent c er
fáni við viljum að nota fyrir stafi.
Og nú brík ég er að fara að vera band, vísitölu eðli i, þannig að ef
band voru halló.
þá er 0 er að fara að vera H, s krappi 1 mun vera E, og svo framvegis.
>> Svo nú viljum að sameina þessir tveir hlutir.
Við viljum að prenta hvern staf hvers stjórn lína rifrildi.
Þannig að við ætlum að hafa hreiður fyrir lykkja.
Og á hefðbundinn hátt, í fyrsta gegn er i, næsta er að fara að vera J, n
verður strlen af ​​argv Ég, ég er minna en n, ég auk plús.
Og nú í stað þess að prentun argv i, svo argv krappi ég er að fara að kemba -
það er að fara að vera i-th stjórn lína rök, argv i, j er að fara að
vera jth eðli i-th rök.
Ég losna við þetta upp hér nú þar sem við setja það inn í þessi lykkja.
Svo jafngildir String s jafningjar argv i, og þá s krappi j.
>> Jæja, þurfum við ekki að lýsa Þessi breyta s.
Í staðinn munum við bara sameina þessar tveimur í það sem við þurftum, argv i, j.
>> Ræðumaður 1: [inaudible].
>> ROB BODEN: gott símtal.
Þannig að þetta er brotinn.
Ef ég hljóp í raun það, við myndum hafa áttað sig á þessu.
Svo gegn mér þykir vænt um í þessu tiltekna fyrir
lykkja er J, Iterator.
Svo þú myndi hafa rekið inn í mál, sennilega óendanlegur lykkja, ef við
hafði ekki að laga það.
Þessi 'hvers vegna við erum líka að tala um kembiforrit dag.
>> OK.
Svo skulum keyra þetta forrit.
Og við skulum raunverulega bæta sérstakt printf hérna sem vilja bara prenta
aðra línu, þar sem þetta þýðir að þegar við hlaupa the program, það verður að vera autt
lína á milli hverrar eðli Hver stjórn lína rifrildi.
Jæja, munum við sjá hvað það þýðir.
OOP.
Got sumir galla.
Villa óbeint lýsa virka bókasafn strlen.
>> Svo fara aftur inn í kerfi okkar, ég gleymdi að kjötkássa fela string.h.
Svo string.h er að fara að vera hausaskrár sem lýsir
fallið strlen.
OK, safnar það.
Nú, við skulum hlaupa það.
Svo bara það.
Það er að fara að prenta út okkar Forritið, halló heimur.
Það er að fara að prenta hvert hlutur, hvert eðli, á eigin línu.
OK.
>> Þannig að við skulum taka í raun þetta einu skrefi lengra.
Og í stað þess að nota string.h, við skulum hugsa um hvernig við myndum framkvæma okkar eigin
strlen virka.
Þannig að ég ætla strax að gefa fall undirskrift.
Svo skulum kalla á my_strlen, og það er að fara að taka a band sem rök,
og við gerum ráð fyrir að fara aftur á lengd strengsins.
Svo, hvar er þessi gaur?
Já.
OK.
Svo muna frá fyrri renna að var einnig frá síðustu viku, að
array af stöfum, heilbrigður, a band, þannig að við skulum segja að þetta er band s okkar.
Þannig að ef s er strengurinn, halló, þá, H-E-L-L-O, í minni, sem er að fara að
vera, og þá er þetta sviga 0 staf.
>> Svo hvernig fáum við lengd s?
Jæja, the bragð er að leita að þessu Bakslag 0 staf þennan null
Ljúka.
Svo reiknirit er að fara að vera eitthvað eins fáir
nóg stafir að -
skulum hafa þetta hönd fulltrúar sumir gegn, skulum kalla þetta int lengd.
Svo, frá hérna, erum við fara að iterate yfir band okkar.
>> Þannig að fyrsta staf, það er H, og það er ekki aftur rista 0, svo
lengd er 1.
Iterate að næsta staf, E, og það er ekki sviga 0.
Lengd er 2.
L, 3.
L, 4.
O, 5.
Og að lokum, ná við sviga 0, og svo það þýðir, vel,
Þessi strengur er yfir.
Svo skulum skila 5.
>> Svo í raun útfæra það, fyrst, n lengd minn jafngildir 0, hægri hönd mín.
Og við erum að fara að iterate -
>> Ræðumaður 1: [inaudible]
>> ROB BODEN: Oh, skjóta.
Gott símtal.
Boom.
Svo n lengd jafngildir 0.
Svo nú, á meðan s lengd ekki jafnt og þá, sviga 0.
Svo man, þetta sviga 0, er það Raunveruleg eðli, og það gefur til kynna
enda strengsins.
Rétt eins og, einnig, sviga n er í raun eðli.
Sviga 0 er að fara að kynna í lok band okkar.
Ég vil ekki að setja það þar.
Og á meðan s við lengd er ekki jafnt og núll Ljúka, þá
við erum bara að fara að hækka lengd.
Svo, í lok áætlunarinnar okkar, lengd er loksins að fara að
vera 5 í þessu tilviki.
Og við verðum bara að fara aftur lengd.
>> OK.
Svo nú hérna, ég er ekki gera my_strlen.
Skulum taka saman það til að tryggja allt sé klárt.
Var ég að gera í 2?
Eða var það 1?
Það ætti að gera.
Allt í lagi.
Svo er þetta argv 2.
Virkar eins og vænst, þrátt var að sá sem ég gerði það í?
Já.
OK.
Þessi útgáfa af hlutur ekki hafa á printf nýja línu eftir, en það
skiptir ekki máli.
OK.
Svo vann eins og vænta.
>> Nú getum við jafnvel sameina þetta einu skrefi frekar, þar sem tilkynning hér, vel,
fyrst, við erum að grabbing strlen af ​​argv i, og þá erum við iterating yfir
Hver stafur í þeirri band.
Svo í stað þess að gera það, hvað ef við bara sameinað þetta rökfræði bíða
þangað til við högg sviga 0 rétt þetta fyrir lykkju?
Svo iterate meðan argv i, j er ekki jafn sviga 0.
Svo skulum hlaupa það fyrst.
>> Allt í lagi.
Svo hér, þetta ástand er að segja -
skulum hreinsa þetta.
Svo nú, láta þetta vera argv okkar.
Svo þegar ég hljóp bara þessi forrit áður, argv er fylki af strengjum.
Og svo, ef ég keyra það með punktur slash argv 2, halló heimur, þá argv
sjálft er lengd 3, fyrir argv núll, halló, og heimurinn.
>> Og innan hvers þessara vísitalna er, sjálft fylki, þar sem þetta verður
punktur, þetta mun vera slash, ég veit ekki ef það var í rétta átt, ég
held ekki það var.
A-R-V þjóta, þarf meira pláss.
Skulum skera í þessu fylki.
A-R-V Dash 0, og þá sviga 0.
Og síðan í lamasessi verður halló.
Segjum, H-E sviga 0.
Og að lokum, W-O sviga 0.
>> Svo reiknirit sem við skrifuðum bara, hreiður fyrir lykkjur, hvað þeir eru
að gera er, verðum við fyrst að gegn i og þá j.
Þetta væri auðveldara með kóða á skjár, Förum aftur til þessa.
OK.
Svo eftir að ég er Iterator sem er iterating yfir hverja skipun
lína rifrildi.
Og j er Iterator iterating yfir hvern staf í því
stjórn lína rifrildi.
Svo er það þetta innsti printf er að gera er, höfum við printf argv 0 0, printf
argv 0 1, printf argv 0 2, 0 3, 0 4, 0 5, 0 6, en nú, argv 0 7 er að fara að
jafn sviga 0.
>> Svo þá erum við hættir að fyrir lykkju, og nú ég iterates í 1.
Og nú erum við að fara að prenta argv 1 0, argv 1 1 -
Jæja, nú, þar sem ég skera halló stutt, argv 1 2 er aftur að fara að vera
sviga 0.
Og svo, vöxtur i og halda áfram, og svo á, þar til við að prenta út allar
heimurinn og þeir eru þrír stjórn lína rök, og við munum hætta út af
að ysta lykkja, og klára áætlun okkar.
OK.
>> Svo skulum við koma aftur hingað.
Svo þú munt öðlast þekkingu við stjórn lína rifrildi um þetta
einkum Heimadæmi.
>> Nú, kembiforrit.
Svo þú hefur sennilega nú þegar þurfti að gera sumir kembiforrit með fyrri þín
Heimadæmi.
Og eitt mjög auðvelt leið kembiforrit, fyrst, við skulum líta á þrjótur program.
Jæja, ganga í gegnum þetta forrit, við erum að fara að spyrja notandann um
heiltala, grípa þessi heiltala, og þá, geðþótta, höfum við while lykkju sem
er bara að fara að lækka I þar til það er jafnt og 10.
Skulum gera ráð bara ég slá heiltala stærri en 10.
Svo lækka ég þar til það er jafnt og 10..
>> Og þá höfum við aðra en lykkja að á meðan ég er ekki jafn 0, við erum
fara að lækka i um 3.
Þannig að ef þú sérð ásetningi galla hér, það er að þetta verður lækka ég til
vera 10, og þá er þetta á meðan lykkja mun lækka I frá 10, til 7, til 4, til að 1,
neikvæða 2, í neikvæðar 5, og svo framvegis, neikvæðra óendanlegu, þar sem ég mun
aldrei jafn 0.
Og þá í lok þessarar áætlunar, við höfum foo virka sem er
fara á prenti út að ég.
>> Þannig að þetta er stutt og léttvæg program, og villan er augljós,
sérstaklega eftir að ég bara sagði hvað villan var.
En ætlunin hér er vel, þetta gæti raun líta út sumir af þinn
lausnir frá gráðugur frá síðasta Heimadæmi, og kannski þú þarft
sumir óendanlegur lykkja í forritinu, og þú hefur ekki hugmynd
hvað veldur því.
Svo mjög gagnlegur kembiforrit tækni er bara að bæta við printfs
allan kóðann þinn.
>> Svo hér er ég vil printf utan fyrst meðan lykkja.
Og hér ég vil printf, og ég verð bara prenta i.
Ég ætla jafnvel að gera fyrst en lykkja, i.
Utan, annað en lykkja.
Enn og aftur, prenta inni af hér, gildi i.
Og við skulum hlaupa þetta.
>> Svo punktur slash kemba.
Sláðu inn heiltölu.
Skulum gera 13.
Og búmm.
Sjáum við að við erum óendanlega lykkja inni á sekúndu á meðan lykkja.
Svo nú vitum við hvað villan er.
En printf kembiforrit er fullkomlega frábært, en þegar áætlanir þínar fá
lengri og flóknari, eru flóknari lausnir
fá hlutina virka.
Svo skulum við fjarlægja öll þessi printfs.
Og við skulum vera viss að ég gerði ekki brjóta neitt.
OK.
>> Þannig að forritið sem við erum að fara til kynna er kallað
GDB, fyrir GNU Debugger.
Ja, reyndar, við skulum fjarlægja kemba fyrir annað, og gera kemba aftur.
Ja, reyndar fyrst, góð lexía í stjórn lína rifrildi.
Takið eftir að þessi Clang stjórn sem er saman allt er að fara framhjá
í stjórn lína, þessir stjórn lína rifrildi.
Svo nákvæmlega hvernig þú ert að fara að nota stjórn lína rifrildi, eins og við
gerði áður, og eins og þú munt í PSET 2, það er hvernig Clang er að nota þær.
>> Svo eftir því að þetta fyrsta fána, þjóta ggdb3, hvað það er að segja er, Clang,
þú ættir að safna saman þessa skrá með ætlunin að við munum að lokum
þarf að kemba það.
Svo eins lengi og þú hafa þessi fána, Þá getum við gdb kemba.
Og það verður opnað upp GNU Debugger.
>> Þannig að það eru fullt af skipunum sem þú þarft að venjast.
Fyrsta sem þú munt sennilega strax þörf er Run.
Svo hvað er rekið að fara að gera?
Það er að fara að byrja kerfi okkar.
Svo hlaupa, byrjar program, the program biður okkur um heiltala, 13.
Og þá er það óendanlega lykkja sem ráð, nema ég fjarlægt
printfs, svo við gerum ekki einu sinni að sjá það.
Lauk venjulega.
Oh.
Það er hugsanlegt að það vafði alla leið um, aftur til - hunsa það.
Ráð fyrir að það var ekki hætta venjulega.
Það er flókið svar við þessu.
>> Svo nú, það er ekki mjög nytsamleg.
Svo bara að keyra forritið okkar inni þetta aflúsara er ekki að hjálpa okkur í einhverju
leið, þar sem við gætum hafa bara gert punktur rista kemba utan gdb.
Svo sá stjórn sem Þú munt sennilega -
og ég ætla að hætta þessu.
Control-D eða hætta, bæði vinna.
Svo skulum opna það upp aftur.
>> Annar stjórn sem þú munt sennilega langar strax að
venjast er Break.
Þannig að við munum brjóta á helstu fyrir nú, og svo skal ég útskýra það.
Jæja, hér sjáum við sett breakpoint á þessari línu í debug.c.
Svo það brot þýðir að þegar ég tegund hlaupa, the program er að fara að
halda áfram að birtast þar Ég lenti breakpoint.
Svo þegar ég lenti hlaupa, the program byrjun, og þá brýtur það um leið og það
fer inn í helstu hlutverk.
Brjóta helsta er að fara að vera eitthvað þú gerir nokkuð algengt.
>> Og nú, til að kynna þér til fleiri skipanir.
Eftir hér, að það er að segja að við brotnaði á línu 11, er þannig
printf, sláðu inn integer.
Svo að stjórn Næsta er að fara að vera hvernig við förum í næstu línu af kóða.
Þetta er að fara að leyfa okkur að stíga gegnum línu áætlun okkar fyrir línu.
Svo næst.
>> Nú lína 12, við erum að fara að fá heiltölu.
Next.
Og ef þú högg bara inn aftur, verður það endurtaka the síðastur hlutur þú gerðir.
Þannig að ég þarf ekki að slá næst í hvert skipti.
Svo sláðu inn integer, 13..
Svo nú, lína 14, en ég er meiri en 10, og ég ætla að gera næst.
Og við sjáum að við erum að fara að lækka i.
Þannig að við ætlum að lækka ég aftur.
>> Svo nú, annað gagnlegt stjórn er Print.
Svo Print er að fara að prenta út gildi breytu.
Skulum koma út gildi á breytilegum i.
Skulum prenta i.
Það er að fara að segja að ég er 11.
Nú erum við aftur á Next meðan i er meiri en 10.
Svo er enn meiri en ég 10, þar sem það er 11.
Ég mínus mínus.
Skulum prenta ég aftur.
Eins og vænta, það er 10.
>> Svo nú, næst.
Það er að fara aftur til the ástand, ég er meiri en 10, en ég er nú 10, svo
það er ekki meiri en 10, þannig að við reiknum það að falla úr while lykkju.
Og nú erum við hér þessi lína af kóða.
Og annar stjórn, List, er bara að fara til að sýna fyrri og næsta
par af línum af kóða, í Ef þú tapað sjálfur.
Þannig að við lauk bara þessa meðan lykkja, og nú höfum við gert þetta
meðan lykkja, línu 18.
Svo á meðan ég er ekki jafn 0.
Og næst, ég er jafnt i mínus 3, og við munum taka eftir, þetta verður bara að halda áfram.
Og við getum prentað i.
>> Hver stjórn konar hefur flýtileiðir.
Svo er p stutt fyrir prentun.
Þannig að við getum p i.
Bara halda halda n, eða halda að gera næst.
Prenta ég aftur.
Þú sérð nú að það er neikvætt 167.
Þannig að þetta mun halda áfram að eilífu, en ekki virkilega að eilífu, því að þú sást bara það
mun í raun enda á einhverjum tímapunkti.
>> Þannig að er farin gdb.
En við skulum gera eitt í viðbót í gdb.
Uh, kemba.
Svo, í þessu tilviki, að óendanlegur lykkja varð að vera inni
The aðalæð virka.
Og fyrir nú, bara að samþykkja það sem ég er fara að færa óendanlega lykkju í
á foo virka.
Mundu bara að, við lok þessa program vel, þetta var upphaflega
starf foo, sem var bara að fara að prenta i.
En nú erum við að kalla foo, sem er fara að lækka i þar til það er 0, og
þá prenta þá breytu.
OK.
Vista það.
Gerðu kemba.
Og nú, gdb kemba.
OK.
>> Þannig að ef ég keyrt bara þá sem ég ætla ekki að að vera fær um að í raun skref í gegnum minn
program línu-við-línu.
Svo skulum brjóta á helstu, og þá tegund hlaupa.
Svo fara í gegnum þetta, printf, sláðu heiltala, fá heiltala, 13.
Þannig að við ætlum að halda decrementing þar sem i er meiri en 10.
Þá erum við að fara að falla í gegnum meðan lykkja, og fá til the lína -
skulum opna það upp í öðrum glugga.
Svo við decremented þangað til ég var ekki lengur meiri en 10, og síðan við
kallaði aðgerðina, foo.
>> Svo hvað gerðist um leið og ég lenti virka foo, vel, kallaði ég foo, og
svo ég þurfti ekki lengur stjórn á gdb.
Svo um leið og ég lenti næst í þessari línu, hlutir áfram þar til þetta gerðist,
þar sem forritið lauk þegar -
taka það ekki til staðar á endanum.
Þú sást það hlé í smá þó.
Svo hvers vegna gerði ég missa stjórn á Dagskráin á þeim tímapunkti?
Jæja, þegar ég pikka næsta, sem fer til bókstaflegri næsta lína af kóða sem
mun framkvæma.
Svo eftir línu 21, næsta lína af kóða sem mun framkvæma er lína 22,
sem er, sem kemur úr aðal.
Svo ég vil ekki að fara bara í næstu línu af kóða.
Ég vil fara inn í aðgerðina, foo, og þá einnig stíga í gegnum
þeim línum af kóða.
>> Svo fyrir það, höfum við val.
Skulum hætta að aftur.
Brjóta aðal.
Uh, 1, næst, næst, 13, við hliðina, næst, næst, vandlega,
áður en við högg línu foo.
OK.
>> Svo nú erum við í línu 21, þar sem við köllum foo.
Við viljum ekki að slá næsta, þar sem það verður bara að hringja í virka foo, og
fara í næstu línu af kóða.
Það sem við viljum að nota er Step.
Svo er munur á þrepi og Next, þar skref stíga inn í
virka, og Next fer yfir starfsemi.
Það keyrir bara um alla virka og heldur áfram.
>> Svo skref er að fara að koma okkur í aðgerðina, foo.
Og við sjáum hér, nú erum við aftur á þetta á meðan lykkja sem er, í orði,
fara að halda áfram að eilífu.
Og ef þú högg skref, þegar það er ekki einu sinni aðgerð til að hringja, þá er það
eins Next.
Svo er það bara þegar þú ert á línu sem er að kalla á aðgerð þessi skref
er að fara að vera mismunandi frá Next.
Svo skref mun færa okkur hér.
Skref, skref, skref, skref, skref, skref, og við verðum bara óendanlegur lykkja eilífu.
>> Svo þú might venjast því eins og að leið til að auðkenna óendanlega lykkjur, er
bara halda þessu Enter hnappinn til sjá hvar þú færð fastur.
Það eru betri leiðir til að gera það, en nú, það er fullkomlega nægileg.
Og stylistically, í samræmi við Style 50, ætti ég að hafa gert þetta.
OK.
>> Svo eitt síðasta stjórn til kynna.
Jæja, við skulum gdb kemba inn
Svo í stað þess að brjóta á helstu, ef ég vita foo virka er einnig
vandamál, þá gæti ég bara sagði, brjóta á foo, í staðinn.
Segjum að ég brjóta á bæði aðal-og foo.
Svo er hægt að setja eins margar Rofstaðir eins og þú vilt.
Hvenær ÉG tegund hlaupa, það er að fara að hætta á -
ooh, við skulum laun, þar Ég breytti hluti.
Þú munt sjá þessa línu, viðvörun, uppspretta skrá er nýleg en executable.
Svo það þýðir að ég fór bara í hér og breytt þeim í samræmi við Style
50, en ég vissi ekki laun forritið.
Svo gerir GDB mig meðvitaðir um það.
Ég hætta, gera kemba aftur, högg gdb kemba.
OK.
>> Svo nú, aftur að það sem ég var að gera.
Brjóta helstu, brjóta foo.
Nú ef ég hlaupa the program, svo það er að fara að halda áfram þar hits á
Rofstaður.
Það Rofstaður gerist að vera sá fyrsti á helstu.
Nú, í stað þess að gera næst, næst, næst, næst, næst, þangað til ég lenti foo, ég
getur slegið haldið áfram, sem mun halda áfram þangað til þú högg næsta breakpoint.
Ég verð að slá inn heiltölu fyrst.
Halda áfram mun halda áfram þar til ég lenti á Næsta Rofstaður, sem er að
virka foo.
>> Svo keyra mun keyra þar til þú högg a Rofstaður, en þú bara slærð keyra þegar
þú ert að byrja forritið, og þá, frá því, það er að halda áfram.
Ef ég gerði bara brjóta helstu og þá hljóp, munum það brot á
helstu, og þá halda áfram.
Þar sem ég hef ekki brjóta benda á foo, slá inn heiltölu, þá nú er ég
ekki að fara að brjóta á foo.
Það er bara að fara að óendanlega lykkja þar sem.
OK.
>> Svo er það Inngangur að gdb.
Þú ættir að byrja að nota það í vandamál setur þinn.
Það getur verið mjög gagnlegt til að greina galla.
Ef þú í raun bara, lína-við-línu, fara gegnum númerið þitt, og bera saman hvað er
raunverulega að gerast með það sem þú átt von að gerast, þá er það nokkuð
erfitt að missa galla þínum.
OK.
>> Svo í síðustu viku Davíð kom upp þetta leyndarmál-lykill dulmál efni fyrir
fyrsta skipti, þar sem við viljum ekki lykilorð bara verið geymd á okkar
tölva í sumum látlaus textaskrá, þar einhver getur komið aftur og bara
opna það upp og lesa þær.
Best væri að þeir vera dulkóðuð á einhvern hátt.
Og í Heimadæmi 2, munt þú vera að takast með einni aðferð við dulkóðun,
eða, vel, tvær aðferðir, en þeir eru ekki svo mikill.
Ef þú gerir á spjallþráð útgáfa, þú ert líka að fara að vera að takast á við
Afkóðun sumt.
>> Svo nú er málið, vel, jafnvel þótt við höfum sterkasta dulkóðun
reiknirit í heiminum, ef þú velur sérlega léleg lykilorð, þá er það
mun ekki hjálpa þér mjög mikið, þar sem fólk vilja enn vera fær um að reikna það út.
Jafnvel þótt að sjá the brengla band og það lítur út eins og óreiðu af rusli
það þýðir ekkert að þeim, ef þeir samt bara þurft að reyna nokkrum lykilorð
að reikna það út, þá þú eru ekki mjög örugg.
Svo horfa á myndskeið sem gerir þeim tímapunkti.
>> [Video spilun]
>> -Hjálm, fiend þú.
Hvað er að gerast?
Hvað ertu að gera dóttur mína?
>> -Leyfa mér að kynna ljómandi ungur lýtalæknir, Dr Phillip
Schlotkin, mesta nefið starf maður í öllu
alheiminum og Beverly Hills.
>> -Your hátign.
>> -Nef starf?
Ég skil ekki.
Hún er nú þegar haft nef vinnu.
Það var sætur sextán staðar.
>> -Nei.
Það er ekki hvað þér finnst.
Það er miklu, miklu verri.
Ef þú gefur mér ekki samsetningu til loftið skjöldur, Dr Schlotkin mun
gefa dóttur þína til baka gömlu nef hennar.
>> -Nei.
Hvar fékkstu þetta?
>> -Allt í lagi.
Ég segi.
Nei, pabbi.
Nei, þú mátt ekki.
>> -Þú ert rétt, minn kæri.
Ég mun sakna nýja nefið.
En ég mun ekki segja honum samsetningu, sama hvað.
>> -Gott og vel.
Dr Schlotkin, gera versta þinn.
>> -My ánægja.
>> [Verkfæri sem skerpti]
>> -Nei.
Bíddu.
Ég segi.
>> -Ég vissi að það myndi vinna.
Allt í lagi.
Gefðu mér hana.
>> -Sameiningin er einn.
>> -Einn.
>> -Tveir.
>> -Þrír.
>> Fjögurra.
>> -Fimm.
>> -Svo er samsetning einn, tveir, þrír, fjórir, fimm.
Það er heimskasta samsetning Ég heyrði einhvern tíma í lífi mínu.
Það er góður af hlutur hálfviti hefði á farangri sínum.
>> -Þakka þér, yðar hátign.
>> -Hvað gerðuð þið?
>> -Ég slökkti á vegg.
>> -Nei þú gerðir það ekki.
Þú slökkt alla myndina.
>> -Ég verð að hafa ýtt á rangan hnapp.
>> -Jæja, setja það aftur á.
Setja myndina aftur.
>> -Já, herra.
Já, herra.
>> -Förum, Arnold.
Komdu, Gretchen.
Auðvitað, þú veist að ég mun samt verða að senda þér reikning fyrir þessu.
>> [END vídeó spilun]
>> ROB BODEN: Allt í lagi.
Svo nú er að við erum nú þegar að tala um öryggi í sumum leiðum, nice
litla bíómynd plakat, þannig að í nýlegri daga, þessi mál með NSA
fylgjast með öllu.
Það getur verið erfitt að líða eins og þér hafa einhvers konar einkalífs í
online heiminum, þó svo að ég gat ekki sagt þú mest um upplýsingar um Prisma.
Svo að flytja út prisma, við erum ekki að fara að vera að tala um það, nú
hugsa um fartölvuna þína.
Svo hérna, ég vil skipta raunverulegum reikninginn minn,
með litla mörgæs mína.
Þannig að ég hef lykilorð sett, og að lykilorð er hvað ég vil það að vera.
>> En mundu að það sem ég er að skrá þig með, þannig að þetta innskráningu
hvetja, er eitthvað forrit.
Það er eitthvað forrit sem var skrifað af einhverjum einstakling.
Og svo, að maður, ef þeir eru sérstaklega illgjarn, þeir gátu
hafa sagt, allt í lagi, þannig að ef lykilorðið sem ég slæ er jafn mínum
Raunveruleg lykilorð, eða það er jafnt að einhverju sérstöku aðgangsorði -
David er ógnvekjandi eða eitthvað -
þá láta þær inn
Svo illgjarn forritari gæti haft aðgangur að öllum Macs, eða
Windows, eða eitthvað.
>> Svo er það ekki mikið áhyggjuefni, þar sem, Ég meina, þetta er tenging program
sem er flutt með OS X, hundruð eða þúsundir manna hafa
yfir þetta númer.
Og svo, ef, í kóðanum þínum einhvers staðar, þú segja ef þetta band jafngildir jafn
David er ógnvekjandi, tenging, þá er einhver að fara að vera, eins og, bíddu.
Þetta er ekki rétt.
Þetta ætti ekki að vera hér.
Svo er það ein leið við fáum hlutina að vera eins konar örugg.
>> En hugsa um jafnvel forrit sem þú skrifar.
Segjum að þú skrifaðir innskráningu program.
Þannig að þetta innskráningu forrit sem þú skrifaðir, svo augljóslega, þú ert góður
forritari.
Þú ert ekki að fara að setja eitthvað illgjarn ef x er jafnt jafngildir David er ógnvekjandi
inn kóðann þinn.
En þetta forrit, hvað þú nota til að safna saman þetta forrit?
Eitthvað eins Clang.
Svo hvað ef sá sem varð um skrifa Clang sérstakt cased í Clang
eitthvað eins og, ef ég er að setja saman tenging program, þá slá inn þennan kóða
í the tenging program sem segir, ef x er jafnt og jafngildir David er ógnvekjandi?
Svo ekki alveg enn, en við höfum það sama gefa hér, þar Clang, vel,
þúsundir, ef ekki tugþúsundir fólk hefur horft á Clang, hafa
horfði á línum af kóða og sagði, allt í lagi, það er ekkert slæmt hérna.
Vitanlega, enginn er að gera nokkuð þessi illgjarn.
>> En hvað er Clang sig, eins og, hvað ef ég safna saman Clang?
Hvað ef ég hef einhverja þýðanda sem safnar Clang sem setur inn Clang
þetta sérstaka hakk sem segir, allt í lagi, þegar ég safna saman Clang, þá
Executable ég fá ætti sérstaklega að líta inni tenging program og settu
þetta lykilorð, jafngildir jafn Dave er ógnvekjandi?
Svo muna að þýðanda sjálfan þarf að vera saman á einhverjum tímapunkti.
Þannig að ef það sem þú velur að taka saman Clang með, sjálft er illgjarn, þá
gæti verið ruglaður öllu leið niður í línu.
>> Svo hér höfum við Ken Thompson og Dennis Ritchie.
Þannig að þetta er helgimynda mynd.
Dennis Ritchie er hægra megin.
Hann er stórt -
ansi mikið skrifaði C. Svo þú getur þakka honum fyrir þennan flokk.
Ken Thomson er á vinstri.
Tveir af þeim skrifaði grundvallaratriðum UNIX.
Jæja, þeir voru Major Höfundar í UNIX.
Það voru sumir aðrir.
Svo Ken Thompson, á einhverjum tímapunkti, hann vinnur Turing verðlaunin.
Og Turing verðlaunin, hef ég alltaf heyrt það vísað þessum hætti, er það
Nobel Prize tölvunarfræði.
>> Svo á Turing Award, hefur hann að gefa þakkarræðu sinni.
Og hann gefur þetta mjög fræga ræðu nú, heitir Hugleiðingar um traustið
Traust, sem við höfum tengt Til á námskeiðinu website.
Og í þessu máli, segir hann, allt í lagi, svo ég skrifaði UNIX, og nú er allt á
þú fólk notar UNIX.
Nú skaltu muna í dag að Linux er bein afkomandi UNIX.
OS X notar beint UNIX.
Gluggakista hjartarskinn ekki svo mikið, en mikið hugmyndir voru teknar úr UNIX.
>> Svo fer hann upp á svið og segir, allt í lagi, ég skrifaði UNIX.
Og bara svo þú krakkar vita, ég er fær til að skrá þig inn í hvert
einn einn af þinn tölva.
Þar sem ég setti einn af þessum sérstöku ef x jafngildir jafngildir Ken Thomson er ógnvekjandi,
þá er ég leyft að skrá þig inn.
Svo fólk eins vel, Hvernig fórstu að þessu?
Við leit á the tenging program og ekkert er þar.
Hann er eins og vel, ég breytt Þýðandinn að skrá þig inn í innskráningu program
þannig að tenging program nú mun hafa sem x er jafnt jafngildir Ken Thompson
er ógnvekjandi.
>> Og þeir segja, vel, það er ekki satt.
Við erum að horfa á þýðanda, og þýðandinn ekki hafa allir línur af
númer svona.
Hann er eins og, OK, en hvað ert þú söfnun þýðanda með?
Og þeir hugsa, og hann er, eins, vel, Ég er sá sem gaf þér þýðanda
þú ert að nota til að safna saman í þýðanda, svo þú ert að setja saman þýðanda, sem
sjálft er illgjarn, og mun brjóta innskráningu program.
Svo í grundvallaratriðum, á þeim tímapunkti, það er engin leið að þú getur litið á upptökum
kóða tenging program til að sjá hvað er rangt.
Þú gætir ekki einu sinni líta í kóðann á þýðanda
til að sjá hvað er rangt.
>> Þú vildi þörf til að líta á vél kóða, raunverulegt tvöfaldur af
saman þýðanda til að sjá, bíddu, þetta línum af kóða ætti ekki að vera hér.
En Ken Thompson tók það einu skrefi lengra og sagði, jæja, það eru
Þessir sérstöku forrit sem raunverulega hjálpa þú lesið tvöfaldur forrit,
og svo ef einhver notað þessi forrit til lesa tvöfaldur, myndu þeir sjá þetta
línur af kóða.
Hann breytt þeim áætlunum að segja, allir rétt, ef þú ert að leita á
þýðanda, ekki sýna þetta tiltekna sett af tvöfaldur.
>> Svo þá þarftu að taka þessi skref lengra og grundvallaratriðum, sem gæti haft
teknar mörgum stigum indirection, og á einhverjum tímapunkti, enginn er í raun
að fara að stöðva.
Svo að boðskapur sögunnar er, þú ert ekki að fara að skrifa
Clang í þessum flokki.
Þú ert að fara að nota klifra Clang mikið í þessum flokki.
Fyrir alla sem þú þekkir, Clang er illgjarn forrit sem er sabotaging hverjum
eitt forrit sem þú hefur nokkurn tíma saman.
Og til að láta þér á það mjög líkur huga, sjá þig á miðvikudag.
>> [Applause]
>> Ræðumaður 2: Á næsta CS50.
>> Ræðumaður 3: Ert þú ekki þora að segja það.
Þú getur gert þetta.
Þú hefur gert þetta áður, getur þú gert þetta í dag, getur þú gert þetta á morgun.
Þú hefur verið að gera þetta í mörg ár.
Bara fara þangað upp og gera þetta.
Þú getur gert þetta.
>> [Tónlist spila]