>> [MUSIC nagpe-play]
>> Rob BODEN: Lahat ng karapatan.
Kaya, ang unang bagay na unang, ng video mula sa isang pamilyar na mukha.
>> [VIDEO sa pag-playback]
>> Right-Lahat.
Ito ay CS50, at ito ay simula ng linggo tatlo.
Ikinalulungkot kong hindi ko maaaring maging doon sa iyo ngayon, ngunit payagan ang sa akin upang ipakilala
Sariling Rob Boden CS50 ni.
>> [END VIDEO sa pag-playback]
>> [Palakpakan AT Cheers]
>> Rob BODEN: Ang filmography sa video na ay hindi kapani-paniwala.
Ayos lang.
Kaya una, mayroong isa pang tanghalian.
Ito ay bukas sa 01:15.
Walang tanghalian ito Biyernes.
Ito ay may Quora.
At Tommy Hindi pa dito, ngunit ang isa sa ang mga tao doon ay dating ulo CF,
Tommy McWilliam.
Kaya siya ay isang masaya tao.
Dapat mong dumating.
>> Ayos lang.
Kaya noong nakaraang linggo, nagsimula kaming breaking hiwalayin tungkol sa kung ano ang isang string ay tunay na.
Na kilala namin dahil sa simula na ito ay isang pagkakasunod-sunod ng mga character.
Ngunit noong nakaraang linggo, namin delved sa katotohanan na kung ano ay talagang isang pagkakasunod-sunod ng
character, mahusay, mayroon kaming ngayon array ng mga character.
At alam namin na ang isang string, ito ay isang array ng mga character, sa dulo,
mayroon kaming ito espesyal null byte, ito backslash 0, na nagpapahiwatig sa dulo ng
ang string.
>> At kaya isang string ay isang hanay ng mga character, ngunit maaari kaming magkaroon ng higit sa
lamang ng isang array ng mga character, maaari kaming magkaroon ng isang array ng anumang
uri ng bagay na gusto namin.
Kaya, kung isipin mo mula sa nakaraang linggo, ang Programa Ages na ipinakilala David
talagang mabilis.
Kaya unang bagay na kami ay pagpunta sa gawin ay tanungin ang user para sa isang integer, ang
bilang ng mga tao sa room.
Sa sandaling mayroon kaming na integer, kami ay deklarasyon ng isang array.
Pansinin na ito bracket syntax.
Ikaw ay pagpunta sa masanay na.
>> Kaya kami deklarasyon ng isang array ng integer tinatawag na edad at may mga n
integer sa array.
Kaya ang pattern na ito dito mismo, ang 4 int i katumbas ng 0, i Mababa sa n, i plus
plus, na Pupunta rin upang maging isang pattern na ang pinaka ka masanay.
Dahil na medyo magkano kung paano ikaw ay palaging pagpunta upang umulit sa paglipas ng array.
Kaya tandaan na n ay ang haba ng aming array.
At kaya dito, kami ay paulit-ulit na nagtatanong para sa edad ng tao i sa kuwarto.
>> Pagkatapos nito, pumunta kami pababa, at para sa anumang di-makatwirang dahilan, kami pagkatapos
i-print out kung paano lumang sila ay pagpunta upang maging isang taon mula ngayon.
At tumakbo ang program na, sabihin gumawa edad, dot slash edad.
Kaya bilang ng mga tao sa room, sabihin nating may tatlong.
At sabihin, ang unang tao ay 13, susunod na 26 na, at ang huling ay 30.
Kaya pagkatapos ay magkakaroon ito umulit sa paglipas ng mga tatlong mga tao, mag-print ng 14, 27, at 31.
>> Kaya tandaan na kapag idedeklara kami ng isang hanay ng mga laki n, ang mga indeks sa na
array, ang array ay may halaga at mga indeks ng 0, 1, 2, ang lahat ng paraan
hanggang n minus 1.
Kaya kapag sinabi namin mayroong tatlong mga tao sa room, at ilalagay namin in dito
ang unang pag-ulit sa pamamagitan na ito loop, i ay magiging 0.
Kaya sa index 0.
Kami ay magtatalaga sa unang Edad ipinasok ng gumagamit ang.
Pagkatapos ay sa susunod na isa, kami ay pagpasok ng pangalawa n gumagamit ang nagpasok, at sa
sa tabi ng dalawang, ang huling n.
>> Kaya mapapansin na ang isang hanay ng mga laki tatlong ay walang anuman
sa index ng tatlo.
Ito ay hindi wasto.
Ayos lang.
Kaya, balik dito.
Kaya ngayon na na-Aaksyunan namin sa array, mayroon kaming ilang lubos na pagkikilala.
Ngayon kami ay pagpunta upang lumipat sa utos argumento linya, na kung saan ay pagpunta sa maging
medyo may-katuturan sa set na ito problema.
>> Kaya hanggang ngayon, sa tuwing ikaw ay ipinahayag ang iyong pangunahing pag-andar, hindi namin
Sinabi int pangunahing walang bisa.
Kaya walang bisa ay nangangahulugan lamang na kami ay hindi pagpasa sa anumang
mga argumento upang ito function.
Ngayon kami ay pagpunta upang makita na pangunahing Maaaring tumagal ng ilang mga argumento.
Narito tinatawag naming kanila int argc at string argv bracket.
Ang mga bracket, sa sandaling muli, na nagpapahiwatig na aming pagharap sa array.
Kaya dito, string argv bracket, hindi namin pagharap sa isang array ng mga string.
Kaya argc, na pupuntahan ipahiwatig kung gaano karaming mga argumento namin nai
pumasang sa program na ito.
At upang makita kung ano ang ibig sabihin nito ay, ni isara ang ipaalam.
>> OK.
Kaya hanggang ngayon, patakbuhin namin ang bawat programa tulad ng tuldok slash edad.
Maaari din namin, sa command line, nakalipas pumasa sa mga argumento, kaya ang term, utos
line mga argumento.
Kaya ang unang argumento, kumusta mundo.
Kaya dito, argc magiging tatlo.
Ito ay ang bilang ng mga argumento sa command line.
Argc ay palaging hindi bababa sa 1, dahil ang tuldok iwa edad, mismo, binibilang ang bilang isa sa
ang mga argumento command line.
>> Pagkatapos halo ay ang unang.
Kung dot slash edad ay ang 0, pagkatapos ay kumusta ay ang unang, at mundo ay ang
pangalawang argumento command line.
Kaya ang string argv, ipinapadala namin ng pagpunta upang makita, Naglalaman ang mga string, tuldok slash
edad, kumusta, at mundo.
At, ayon sa kahilingan ni David, ipinapadala namin ng pagpunta upang i-play ang isang video na nagpapakilala na.
>> [VIDEO sa pag-playback]
>> -Up hanggang ngayon sa mga programa hindi namin nakasulat, na ipinahahayag namin
pangunahing bilang int pangunahing walang bisa.
At lahat ng oras na ito, na walang bisa ay may lamang na pagtukoy na ang
programa ay hindi gumawa ng anumang utos argumento linya.
Sa ibang salita, kapag tumatakbo ang isang gumagamit ng isang programa, siya ay maaaring magbigay ng utos
argumento linya sa pamamagitan ng pagsusulat ng mga karagdagang salita o parirala pagkatapos ng program
pangalanan sa prompt.
>> Well, kung ang gusto mo sa iyong programa sa tumagal ng mga argumento command line, ang isa o
higit pang mga naturang salita, kailangan naming palitan walang bisa sa loob ng ilang mga argumento.
Kaya sabihin gawin iyon.
Isama CS50.h.
Isama ang standard io.h.
Int pangunahing.
At ngayon, sa halip na walang bisa, pupuntahan ko tukuyin ang isang int tinatawag argc, at isang
array ng mga string na tinatawag argv.
Ngayon, argc at argv ay simpleng balarila.
>> Sana tinatawag namin ang mga argumento pinaka-anumang nais namin.
Ngunit kung ano ang mahalaga ay na argc ay isang int dahil, sa pamamagitan ng kahulugan, ito ay
pagpunta sa maglaman ang bilang argument, ang bilang ng mga salita sa kabuuan na ang
user ay nai-type sa kanyang prompt.
argv, samantala, argumento vector, ay pagpunta sa aktwal na maging isang array sa pag-iimbak
lahat ng mga salita na ang gumagamit ay may nai-type sa kanyang prompt.
>> Ni magpatuloy upang gawin ang isang bagay na ngayon Hayaang may isa o higit pa sa mga
utos argumento linya.
Sa partikular, sabihin sige at i-print kahit anong uri ng salita ang user
pagkatapos ng pangalan ng program sa prompt.
Buksan ang bracket.
Isara ang bracket.
Printf porsiyento s backslash at kuwit.
At ngayon ay kailangan ko upang sabihin sa printf kung ano halaga mag-plug in na placeholder.
Gusto kong ang unang salita na ang gumagamit ay may nai-type pagkatapos ng pangalan ng program,
at kaya ako pupunta upang tukuyin argv bracket 1, malapit
panaklong, tuldok-kuwit.
>> Ngayon, bakit bracket 1 at hindi bracket 0?
Well, ito ay lumiliko out, awtomatikong naka-imbak sa argv 0 ay magiging ang
aktwal na pangalan ng program.
Kaya ang unang salita na uri ng gumagamit pagkatapos ng pangalan ng program ay, sa pamamagitan ng
convention, magiging naka-imbak sa argv 1.
Sabihin ngayon compile at patakbuhin ang program na ito.
>> Gawing argv 0, tuldok slash argv 0.
At ngayon ng isang salita tulad ng halo.
Ipasok.
At doon ay mayroon kaming ito, kumusta.
>> [END VIDEO sa pag-playback]
>> Rob BODEN: Lahat ng karapatan.
Isara iyon.
Kaya ng pagtingin sa program na iyon ipinakilala namin lamang sa amin, mahusay, lamang
upang ipakita, kung i-print namin argv 0, gumawa, ngayon ano ito, argv 0, tuldok slash argv 0.
Kaya, tulad ng inaasahan, ito ay nagpi-print out ang pangalanan ng programa, dahil argv 0 ay
palaging pagpunta sa maging ang pangalanan ng program.
Ngunit gawin ng isang bagay ng ipaalam bit mas kawili-wiling.
>> Kaya sa hanay problema, ikaw ay ipinakilala sa ito function, atoi.
Kaya ano ang ginagamit namin para sa atoi?
Iyon pupuntahan convert ang isang string sa isang integer.
Kaya kung pumasa ako ng string, isa sa dalawang tatlong, sa atoi, na-convert na
sa integer, isa sa dalawang tatlong.
Kaya kami ay pagpunta upang i-convert ang unang utos argumento na linya sa isang integer,
at pagkatapos ay i-print lamang na integer.
>> Kaya talaga, hindi namin uri ng reimplementing getint, lamang ang
integer ay naipasok sa utos linya sa halip ng sa programa
interactive.
Kaya pagkatapos, ginagawa argv 0, ni gawin ipaalam ito in dito, at isara na.
Kaya't ang pagpapatakbo argv 0, at sabihin ipasok ang integer, isa sa dalawang tatlong apat isa dalawa.
Kaya magkakaroon ito i-print ang integer, isa dalawang tatlong apat isa dalawa.
Mayroong ilang mga subtleties sa atoi na ito ay titigil sa pag-aalaga tungkol sa anumang bagay
lampas isang wastong numeric character, ngunit iyon ay hindi mahalaga.
>> Kaya ano ang gagawin sa tingin mo ang mangyayari kung gagawin ko ito?
Segmentation fault.
Kaya bakit ay na?
Kung titingnan mo ang aming programa, kami ay nagko-convert argv 1, ang unang argumento
pagkatapos ng pangalan ng programa, sa isang integer.
Ngunit walang argument ang pinasa pagkatapos ng pangalan ng program.
Kaya dito, nakita namin na ito ay isang maraming surot programa, dahil, kung sinusubukan naming patakbuhin ito
nang walang anumang mga argument, ito ay lamang crash.
>> Kaya isa pang karaniwang mga pattern makikita mo ay isang bagay tulad ng, kung argc Mababa
sa dalawang, na nagpapahiwatig na mayroong hindi hindi bababa sa ang pangalan ng programa at isang
unang argumento, pagkatapos ay gagamitin namin gawin ang isang bagay tulad ng printf, hindi sapat
utos argumento linya.
Iyon ay marahil hindi isang magandang isa upang i-print, marahil ito ay isang bagay, tulad ng
dapat mong ipasok ang isang integer sa command line.
Makikita lamang tapusin ko ito doon.
At pagkatapos ay bumalik 1.
Kaya tandaan na sa dulo ng aming programa, kung ibabalik namin 0, na uri ng
ay nagpapahiwatig ng tagumpay.
At pangunahing Awtomatiko ring Ibinabalik ng 0 kung hindi mo gusto.
>> Kaya dito, kami ay retuning 1 upang ipahiwatig na hindi iyon tagumpay.
At maaari mong ibalik ang kahit anong gusto mo, lamang, 0 nagpapahiwatig ng tagumpay, at
anumang bagay ay nagpapahiwatig pagkabigo.
Magpatakbo ng bersyon na ito ng mga bagay Kaya ipaalam.
Kaya ngayon, kung hindi namin magpasok ng isang command line argumento, makikita mo ito nang tama sabihin
amin, hindi sapat na command line.
Hindi ba matapos ang pangungusap.
Iba Pa, kung talagang kami pumasa ito sa isa, maaari itong makumpleto ang programa.
Kaya ito ay kung paano mo maaaring gamitin argc sa Upang patunayan ang mga numero ng
mga argumento command line na ay talagang pumasa sa.
>> Kaya hayaan ang gumawa ng program na ito ng kaunti pang kumplikado, at tumingin sa ikalawang
pag-ulit ng mga bagay.
Kaya ngayon, kami ay hindi lamang sa pagpi-print ang unang argumento command line.
Dito, kami ay iterating mula int i Kapantay 0, i Mababa sa argc, i plus
plus, at pag-print argv, index i.
Kaya ang pattern na ito, muli, ito ay pareho pattern tulad ng dati, maliban sa halip
ng pagtawag sa variable n, ginagamit namin argc.
>> Kaya ito ay iterating sa ibabaw ng bawat index sa array, at pag-print ng bawat
sangkap sa na array.
At kaya, kapag tumakbo namin ang program na ito, na rin, Hindi ko naglagay ng anumang command line
argumento, kaya lamang ng mga kopya ang pangalan ng programa.
Kung ipinasok ako ng grupo ng mga bagay-bagay, idedetalye ito print ng isa, ang bawat isa sa kanyang sariling linya.
>> OK.
Kaya ipaalam sa tumagal ng isang ito ng karagdagang hakbang.
At sa halip ng pagpi-print ng bawat argumento sa sarili nitong linya, ni-print sa bawat ipaalam
katangian ng bawat argumento sa sarili nitong linya.
Kaya tandaan na argv ay isang array ng mga string.
Kaya kung ano ay isang string, ngunit isang array ng mga character?
Kaya na nangangahulugan na argv ay talagang isang array ng isang array ng mga character.
Kaya sinasamantala ng na, sabihin huwag pansinin ito para sa ngayon.
Isaalang-alang na lamang ang string argv 0 Hayaang.
>> Kaya kung nais namin upang dalhin sa bawat katangian ng argv 0 sa sarili nitong linya, pagkatapos ay nais ko
upang gawin ang mga pattern na aming ginamit upang, i ay mas mababa kaysa sa haba ng array,
saan dito, ay strlen ng, na hindi kung ano ang gusto kong gawin, string
s ay katumbas ng argv 0.
Kaya i ay mas mababa sa haba ng aming array, na sa kasong ito ay isang array
ng mga character, i plus plus.
At kaya, bilang nakita natin noong nakaraang linggo, ito ay mainam kung ililipat namin na strlen labas
ng mga kondisyon, dahil n ang magdaragdag ang strlen ng s sa bawat oras na namin pumunta
sa pamamagitan ng loop, at ito ay hindi pagpunta sa ay nagbabago.
Kaya Ise-set namin ito katumbas n paglipas dito.
>> OK.
Kaya ngayon, kami ay iterating sa ibabaw bawat index sa array.
At kaya, kung gusto naming i-print ang bawat na character sa na array, porsiyento c ay
ang bandila nais naming gamitin para sa mga character.
At ngayon ng isang bracket i ay magiging ang string, index ng character ko, kaya kung ang
string ay halo.
pagkatapos ay s 0 ay magiging h, s bracket 1 ay magiging e, at iba pa.
>> Kaya ngayon gusto naming pagsamahin ang dalawang bagay.
Gusto naming i-print ang bawat karakter ng bawat argumento command line.
Kaya kami ay pagpunta sa may isang nested para sa loop.
At conventionally, ang unang sagot ay i, ang susunod ay magiging j, n
ang magiging strlen ng argv i, i Mas mababa sa n, i plus plus.
At ngayon, sa halip ng pag-print argv ko, kaya argv bracket i ay pagpunta sa index -
na pupuntahan maging ang command line i-ika argument, argv i, j ay pagpunta sa
maging ang jth character ng ang argument i-ika.
Makikita ko mapupuksa ang up dito ngayon dahil ilalagay namin ito sa na loop.
Kaya ay katumbas ay katumbas ng string s argv i, at pagkatapos ay i-bracket s j.
>> Well, hindi namin kailangan na idedeklara variable mga ito.
Sa halip, gagamitin namin lamang pagsamahin ang mga dalawa sa kung ano ang namin ay may, argv i, j.
>> Tagapagsalita 1: [hindi marinig].
>> Rob BODEN: Magandang tawag.
Kaya ito ay nasira.
Kung talagang nagpatakbo ko ito, kami ay na natanto na ito.
Kaya ang counter-aalaga ko tungkol sa sa ang partikular na para sa
loop ay j, ang iterator.
Kaya mo nais na tumakbo sa mga isyu, marahil isang walang-katapusang loop, kung namin
ay hindi naayos na.
Iyon ang dahilan kung bakit din namin pinag-uusapan tungkol sa pag-debug ngayon.
>> OK.
Magpatakbo ng programang ito Kaya ipaalam.
At ni aktwal na magdagdag ng isang hiwalay printf ipaalam dito mismo na lang i-print
isa pang linya, dahil ang ibig sabihin nito kung kailan namin tumakbo ang programa, may makikita maging isang blangko
linya sa pagitan ng bawat katangian ng bawat argumento command line.
Well, makikita namin kung ano ang ibig sabihin iyon.
Oop.
Mayroon ka bang ilang mga bug.
Error nang kataon lamang deklarasyon strlen function ng library.
>> Kaya balik sa aming programa, ako Nakalimutan upang hash isama string.h.
Kaya string.h ay magiging ang header ng file na declares
strlen ang pag-andar.
OK, ito compiles.
Ngayon, magpatakbo ng ito ipaalam.
Kaya lang iyon.
Ito ay pagpunta sa i-print ang aming pangalan ng programa, kumusta mundo.
Ito ay pagpunta sa i-print ang bawat bagay, ang bawat isa karakter, sa sarili nitong linya.
OK.
>> Kaya sabihin talagang tumagal ito isa pa na hakbang.
At sa halip na gamitin string.h, sabihin isipin ang tungkol sa kung paano gusto naming ipatupad ang aming sarili
strlen function.
Kaya ko makikita agad bigyan isang function na lagda.
Kaya sabihin tumawag sa my_strlen, at ito ay pagpunta sa tumagal ng isang string bilang isang argument,
at inaasahan namin upang ibalik ang haba ng na string.
Kaya, kung saan ay na tao?
Oo.
OK.
Kaya tandaan mula sa mga naunang mga slide na ay mula sa huling linggo din, na isang
array ng mga character, mahusay, isang string, kaya sabihin nating ito ang aming string s.
Kaya kung s ay ang string, kumusta, pagkatapos, H-E-L-L-O, sa memorya, na pupuntahan
maging, at pagkatapos ay ang backslash 0 karakter.
>> Kaya paano ko makuha namin ang haba ng s?
Well, ang bilis ng kamay ay naghahanap para sa sumasagot na hampas 0 karakter, ito null
Terminator.
Kaya ang algorithm ba ang pagpunta upang maging isang bagay tulad ng ilang
sapat character na -
magkaroon ng kamay na ito ay kumakatawan sa ilan ipaalam counter, tawagan ni ito haba int ipaalam.
Kaya, na nagsisimula mula sa mahigit dito, kami ay pagpunta upang umulit sa paglipas ng aming mga string.
>> Kaya ang unang character, ito ay H, at hindi ito pabalik iwa 0, kaya
ang haba ay 1.
Umulit sa susunod na karakter, E, at ito ay hindi backslash 0.
Haba ay 2.
L, 3.
L, 4.
O, 5.
At sa wakas, maabot namin ang backslash 0, at sa gayon ay nangangahulugan na, mahusay,
ang string na ito ay higit sa.
Kaya sabihin bumalik 5.
>> Kaya aktwal na pagpapatupad na,, una ang haba ng aking n katumbas ng 0, ang aking kanang kamay.
At kami ay pagpunta upang umulit -
>> Tagapagsalita 1: [hindi marinig]
>> Rob BODEN: Oh, kukunan.
Magandang tawag.
Boom.
Kaya't haba n katumbas ng 0.
Kaya ngayon, haba habang s ay hindi pantay at pagkatapos, backslash 0.
Kaya tandaan, ang backslash 0, ito ay isang aktwal na karakter, at ito ay nagpapahiwatig
sa dulo ng string.
Lamang tulad ng, din, backslash n ay isang aktwal na character.
Backslash 0 ay pagpunta upang ipahiwatig Sa dulo ng aming string.
Hindi ko nais upang ilagay iyon doon.
At habang s-index sa pamamagitan ng haba ay hindi katumbas ng null Terminator, pagkatapos ay
lang kami ng pagpunta sa dinagdagan ng haba.
Kaya pagkatapos, sa pagtatapos ng aming programa, haba ay malaon ng pagpunta sa
magiging 5 sa kasong ito.
At babalik kami lamang haba.
>> OK.
Kaya ngayon pababa dito, gagawin ko hindi gawin my_strlen.
Sumulat ng libro ni ito upang matiyak Hayaan Tumatakbo ang lahat nang maayos.
Ako ginagawa sa 2?
O kaya naman ay na 1?
Na dapat gawin.
Ayos lang.
Kaya ito ay argv 2.
Gumagana bilang inaasahang, bagaman noon na ang isa ginawa ko ito sa?
Oo.
OK.
Ang bersyon na ito ng mga bagay ay walang ang printf bagong linya matapos, ngunit ito
ay hindi magsagawa ng anumang mga pagkakaiba.
OK.
Kaya nagtrabaho tulad ng inaasahan.
>> Ngayon ay maaari kahit pagsamahin namin ito ng isang hakbang karagdagang, kung saan notice dito, mahusay,
una sa lahat, kami ay daklot ang strlen ng argv i, at pagkatapos kami ay iterating sa ibabaw
bawat character sa string na.
Kaya sa halip ng paggawa na, paano kung namin pagsamahin lang logic na ito ng paghihintay
hanggang maabot namin ang backslash 0 pakanan sa ito para sa loop?
Kaya umulit habang argv i, j gumagana hindi katumbas backslash 0.
Unang magpatakbo ng ito Kaya ipaalam.
>> Ayos lang.
Kaya dito, ang kundisyong ito ay sinasabi -
ni i-clear na ipaalam.
Kaya ngayon, sabihin ito maging ang aming argv.
Kaya kapag ko lang Pinatatakbo ng program na bago, argv ay isang array ng mga string.
At kaya, kung nagpapatakbo ko ito na may tuldok slash argv 2, kumusta mundo, pagkatapos ay ang argv
mismo ay haba 3, para argv zero, kumusta, at mundo.
>> At sa loob ng bawat isa sa mga indeks ay, mismo isang array, kung saan makikita ito maging
tuldok, ito ay magiging slash, hindi ko alam kung na noon ay ang karapatan ng direksyon, ako
huwag tingin ito ay.
A-R-V gitling, kailangan ng dagdag na espasyo.
Ni-cut papunta ito array Hayaan.
A-R-V gitling 0, at pagkatapos ay i-backslash 0.
At pagkatapos ay magulo ay magiging kumusta.
Sabihin nating, H-E backslash 0.
At sa wakas, W-O backslash 0.
>> Kaya ang algorithm na sinulat ni namin, ang nested para sa mga loop, kung ano ang kanilang
paggawa ay, unang mayroon kaming ang kontrahin i at pagkatapos j.
Ito ay magiging mas madali gamit ang code sa screen, Sabihin bumalik sa ito.
OK.
Kaya mapapansin na i ay ang iterator na iterating sa ibabaw ng bawat utos
argumento linya.
At j ay ang iterator iterating sa ibabaw ng bawat character sa na
argumento command line.
Kaya kung ano ang ginagawa ito pinakaloob printf ay, na-printf namin argv 0 0, printf
argv 0 1, printf argv 0 2, 3 0, 0 4, 0 5, 6 0, ngunit ngayon, argv 0 7 ay pagpunta sa
katumbas backslash 0.
>> Kaya pagkatapos ay lumabas namin na para sa loop, at ngayon iterates i upang 1.
At ngayon kami ay pagpunta sa pag-print argv 1 0, argv 1 1 -
well, ngayon, dahil pinutol ko kumusta maikling, argv 1 2 ay muling pagpunta sa maging
backslash 0.
At kaya, dinagdagan i at magpatuloy, at iba pa, hanggang sa i-print namin ang lahat ng
mundo, at ang mga tatlong linya ng command argumento, at kami lumabas out sa
ang pinakamalayo loop, at tapusin ang aming programa.
OK.
>> Kaya ng bumalik dito ipaalam.
Kaya magkakaroon ka ng ilang lubos na pagkikilala sa mga argumento command line sa ito
itakda ang partikular na problema.
>> Ngayon, pag-debug.
Kaya marahil mo pa ay nagkaroon na gawin ang ilang mga pag-debug sa iyong nakaraang
itakda ang problema.
At isa napakadaling paraan ng pag-debug, unang, tingnan natin ang isang programa maraming surot ipaalam.
Well, sa paglalakad sa pamamagitan ng programang ito, kami ay pagpunta sa tanungin ang user para sa isang
integer, grab na integer, at pagkatapos, nagkataon, mayroon kaming isang habang loop na
ay lamang ng pagpunta sa pagbawas i hanggang sa ito ay katumbas ng 10.
Hayaan ang mga ipinapalagay na lang ako sa pagpasok isang integer na mas malaki sa 10.
Kaya ng pagbawas i hanggang sa ito ay katumbas ng 10.
>> At pagkatapos ay mayroon kaming isa pang habang loop na, habang i ay hindi katumbas ng 0, kami ay
pagpunta sa pagbawas i sa pamamagitan ng 3.
Kaya kung makikita mo ang layunin ng bug dito, ito ay makikita na ito ng pagbawas i upang
maging 10, at pagkatapos ito habang loop kalooban pagbabawas i mula sa 10, sa 7, 4, sa 1,
sa mga negatibong 2, sa mga negatibong 5, at iba pa, sa mga negatibong infinity, dahil habilin i
hindi kailanman aktwal na kasing-halaga ng 0.
At pagkatapos ay sa dulo ng programang ito, mayroon kaming ang foo function na kung saan ay
pagpunta sa print out na i.
>> Kaya ito ay isang maikli at walang kuwenta programa, at ang bug ay halata,
lalo na pagkatapos ko lang Sinabi kung ano ang bug yan.
Ngunit ang layunin dito ay, well, ito puwede talagang ganito ang hitsura ang ilan sa iyong
mga solusyon mula sa matakaw mula sa nakaraang itakda ang problema, at siguro ang mayroon kang
ilang mga walang-katapusang loop sa iyong programa, at wala kang mga ideya
kung ano ang nagiging sanhi ito.
Kaya isang napaka-kapaki-pakinabang na paraan ng pag-debug ay upang idagdag lamang printfs
lahat ng higit sa iyong mga code.
>> Kaya dito Gusto ko ng printf sa labas muna habang loop.
At dito Gusto ko ng printf, at lang ako makakakita print i.
Kukunin ko kahit gawin muna habang loop, i.
Sa labas, pangalawa habang loop.
Muli, i-print sa loob ng dito, ang halaga i.
At ni patakbuhin ang ipaalam.
>> Kaya tuldok slash-debug.
Magpasok ng isang integer.
Ni gawin 13 Hayaan.
At boom.
Nakita namin na kami ay walang katapusan na looping sa loob ng ikalawang habang loop.
Kaya ngayon alam namin kung ano ang bug ay.
Ngunit ang pag-debug printf ay perpektong mahusay, ngunit sa sandaling ang iyong mga program makakuha ng
mas mahaba at mas komplikado, may mga mas sopistikadong mga solusyon upang
nagsisimula pa bagay na gumagana.
Kaya alisin ang lahat ng mga printfs ipaalam.
At tiyakin nating ako ay hindi ipaalam masira ng kahit ano.
OK.
>> Kaya ang programa kami ng pagpunta upang ipakilala ay tinatawag na
GDB, para GNU Debugger.
Well, talaga, alisin ang pag-debug para ipaalam isang segundo, at muling gumawa ng debug.
Well, talaga una, isang mahusay na aralin sa mga argumento command line.
Pansinin na ito kumalatong utos na kino-compile ang lahat ng bagay ay pumasa sa mga
sa command line, mga utos argumento linya.
Kaya nang eksakto kung paano mo ay pagpunta sa gumagamit mga argumento command line, bilang namin
ginawa mo dati, at tulad ng habilin mo sa PSET 2, na kung paano kumalatong ay gumagamit ng mga ito.
>> Kaya mapapansin na ito sa unang flag, gitling ggdb3, ano na sinasabi ay, kumalatong,
dapat mong ipunin ang file na ito gamit ang layunin na kami ay malaon
kailangan upang i-debug ito.
Kaya hangga't mayroon kang i-flag na iyon, pagkatapos ng aming makakaya GDB-debug.
At magkakaroon ito magbukas ng GNU Debugger.
>> Kaya may mga ng maraming mga utos na kailangan mong masanay.
Unang isa na ikaw ay marahil agad na kailangan ay ang Run.
Kaya kung ano ang Patakbuhin ang pagpunta sa gawin?
Ito ay pagpunta upang simulan ang aming programa.
Kaya tumakbo, simula ng programa, ang programa Humihingi kami para sa isang integer, 13.
At pagkatapos ito ay walang katapusan na looping bilang inaasahan, maliban sa inalis ko ang
printfs, kaya hindi kami kahit na makita na.
Lumabas sa normal.
Oh.
Ito ay posible na ito ay balot ang lahat ng mga paraan sa paligid, pabalik sa - pagbalewala sa mga iyon.
Ipagpalagay na hindi ito lumabas nang normal.
Mayroong isang komplikadong kasagutan sa na.
>> Kaya ngayon, iyan ay hindi masyadong kapaki-pakinabang.
Kaya lang sa pagtakbo ang aming programa sa loob ng debugger na ito ay hindi makakatulong sa amin sa anumang
paraan, dahil maaari naming nagawa na lamang tuldok iwa debug mula sa labas GDB.
Kaya ang isa na command na ikaw ay marahil -
at kukunin ko na huminto ito.
D Control-o lumabas, parehong trabaho.
Kaya buksan ni ito up muli ipaalam.
>> Ang isa pang utos na ikaw ay marahil agad na nais upang
masanay ay Break.
Kaya gagamitin namin masira sa pangunahing para sa ngayon, at pagkatapos ay kukunin ko na ipaliwanag iyon.
Well, dito makita namin itinakda namin ang isang breakpoint sa linyang ito sa debug.c.
Kaya kung ano break na paraan ay na kapag ako type run, ang programa ay pagpunta sa
patuloy na tatakbo hanggang Pindutin ko ang isang breakpoint.
Kaya kapag pindutin ko run, ang programa ay nagsisimula, at pagkatapos ito Pinaghihiwa sa lalong madaling ito
nagpasok sa pangunahing pag-andar.
Hatiin pangunahing ay magiging isang bagay mo medyo karaniwang gawin.
>> At ngayon, upang ipakilala sa ilang higit pang mga utos.
Pansinin dito, na ito ay sinasabi namin sinira sa linya 11, na kung saan ay
printf, ipasok ang isang integer.
Kaya ang command Susunod ay magiging kung paano pumunta kami sa susunod na linya ng code.
Ito ay pagpunta sa-daan sa amin upang basa sa pamamagitan ng aming programa linya sa pamamagitan ng linya.
Kaya susunod.
>> Ngayon 12 linya, kami ay pagpunta upang makuha ang integer.
Susunod.
At kung pindutin mo lang ang Enter muli, ipapakita ito gawing muli ang huling bagay na iyong ginawa.
Kaya hindi ko na kailangan i-type ang susunod sa bawat oras.
Kaya ipasok ang isang integer, 13.
Kaya ngayon, 14 na linya, habang i ay mas malaki sa 10, at makikita ko ang susunod na gagawin.
At nakita namin kami ay pagpunta sa pagbawas i.
Kaya kami ay pagpunta sa pagbawas i muli.
>> Kaya ngayon, isa pang kapaki-pakinabang utos ay Print.
Kaya Print ay pagpunta sa i-print out ang halaga ng variable.
Sabihin maglabas ang halaga ng variable na i.
Mag-print ng i Hayaan.
Ito ay pagpunta sa sabihin i ay 11.
Ngayon Susunod na kaming muli habang i ay mas malaki sa 10.
Kaya i kung mas malaki kaysa pa rin 10, dahil ito ay 11.
i minus minus.
Mag-print ng i muli Hayaan.
Tulad ng inaasahan, ito ay 10.
>> Kaya ngayon, sa susunod.
Ito ay pagpunta bumalik sa kondisyon, i ay mas mataas sa 10, ngunit i ngayon ay 10, kaya
ito ay hindi mas malaki kaysa sa 10, kaya inaasahan namin ito upang malagas ng habang loop.
At ngayon kami ay sa ibaba na linya ng code.
At isa pang utos, List, ay lamang ng pagpunta upang ipakita ang mga nakaraan at susunod na
dalawang linya ng code, sa kaso nawala mo ang iyong sarili.
Kaya't lumabas lang namin ito habang loop, at ngayon pinasok namin ito
habang loop, 18 linya.
Kaya habang i ay hindi katumbas ng 0.
At, sa tabi, katumbas i i minus 3, at kami ay mapansin, ito makikita lamang panatilihin ang pagpunta.
At maaari naming i-print i.
>> Ang bawat command na uri ng mga may shortcut.
Kaya p ay maikli para sa Print.
Kaya aming makakaya p i.
Panatilihin lang na may hawak n, o panatilihin ang paggawa Susunod.
I-print muli i.
Ang makikita mo ngayon na negatibong 167.
Kaya ito ay pumunta sa magpakailanman, ngunit hindi talaga magpakailanman, dahil nakita mo lang, ito
ang talagang magtapos sa isang punto.
>> Kaya na Simula GDB.
Ngunit ni gawin ang isa sa higit pang bagay sa GDB ipaalam.
Uh, mag-debug.
Kaya, sa partikular na kasong ito, ang walang katapusang loop nangyari sa maging sa loob ng
ang pangunahing pag-andar.
At para sa ngayon, tinatanggap lang na na ako pagpunta sa ilipat ang walang katapusang loop sa
ang foo function.
Tandaan lamang na, sa dulo ng ito programa, na rin, ito ay orihinal
pagtawag foo, na noon ay lamang pagpunta sa i-print i.
Ngunit ngayon kami ay pagtawag foo, na pagpunta sa pagbawas i hanggang sa ito ay 0, at
pagkatapos ay i-print ang variable na iyon.
OK.
I-save na.
Gumawa ng debug.
At ngayon, gdb-debug.
OK.
>> Kaya kung Magpatakbo ko lang pagkatapos hindi pupuntahan ko magagawang upang aktwal na hakbang sa pamamagitan ng aking
line-by-line programa.
Kaya sabihin masira sa pangunahing, at pagkatapos i-type run.
Kaya pumunta sa pamamagitan na ito, printf, ipasok ang isang integer, kunin ang integer, 13.
Kaya kami ay pagpunta sa panatilihin decrementing hanggang sa i ay mas malaki sa 10.
Pagkatapos kami ay pagpunta sa mahulog sa pamamagitan ng habang loop, at kumuha ng linya -
buksan ni ito up sa isang hiwalay na window ipaalam.
Kaya decremented namin hanggang sa i noon ay hindi na mas mataas sa 10, at pagkatapos namin
na tinatawag na ang pag-andar, foo.
>> Kaya kung ano ang nangyari sa lalong madaling pindutin ko function ng foo, mahusay, na tinatawag na ako foo, at
pagkatapos ay hindi na ako ay nagkaroon ng kontrol sa GDB.
Kaya sa lalong madaling pindutin ko ang Susunod sa linyang ito, mga bagay na patuloy na hanggang na nangyari ito,
kung saan ang program ay lumabas kapag -
ipinapalagay hindi ito umiiral kalaunan.
Nakita mo itong i-pause para sa isang bit bagaman.
Kaya bakit nawala ko ang kontrol sa ang programa sa puntong iyon?
Well, kapag nagta-type ako sa tabi, na napupunta sa ang literal susunod na linya ng code na
ay isakatuparan.
Kaya pagkatapos ng 21 sa susunod na linya ng code linya, na isakatuparan ay 22 linya,
na kung saan ay, sa paglabas mula sa pangunahing.
Kaya hindi ko nais upang pumunta lamang sa susunod na linya ng code.
Gusto kong pumunta sa ang pag-andar, foo, at pagkatapos din magbasa-basa
mga linya ng code.
>> Kaya para sa iyon, mayroon kaming isang kahalili.
Ni huminto muli na Hayaan.
Hatiin pangunahing.
Uh, 1, susunod, susunod, 13, sa tabi, susunod, susunod, maingat,
bago namin hit linya foo.
OK.
>> Kaya ngayon, hindi kami sa 21 linya, kung saan tinatawag naming foo.
Hindi namin gustong i-type ang susunod, dahil na Tatawagan lamang ang function foo, at
pumunta sa susunod na linya ng code.
Ano gusto naming gamitin ay Hakbang.
Kaya mayroong isang pagkakaiba sa pagitan ng Hakbang at ang Susunod, kung saan ang mga hakbang Hakbang papunta sa
gumana, at Susunod na napupunta sa ibabaw ng function.
Executes Ito lamang ang kabuuan ng ang pag-andar at pinapanatili ang pagpunta.
>> Kaya Hakbang ay pagpunta upang dalhin sa amin sa ang pag-andar, foo.
At nakita namin dito, ngayon, hindi namin pabalik sa ito habang loop na, sa teorya,
pagpunta sa magpatuloy magpakailanman.
At kung pinindot ninyo ang Hakbang, kapag ito ay hindi kahit na isang function na tumawag, pagkatapos ito ay
kapareho ang Susunod.
Kaya lamang kapag ikaw ay nasa isang linya na Tinatawagan ng isang function na Hakbang
Pupunta upang maiba mula sa Susunod.
Kaya Hakbang ay magdadala sa amin dito.
Hakbang, hakbang, hakbang, hakbang, hakbang, hakbang, at kami ay lamang walang-katapusang loop magpakailanman.
>> Kaya maaari mong masanay na bilang iyong paraan ng pagtukoy ng walang katapusan na mga loop, ay
may hawak na lamang ito Enter key upang makita kung saan ka makakakuha ng makaalis.
May mga mas mahusay na paraan upang gawin iyon, ngunit sa ngayon, iyon ay ganap na ganap na sapat.
At stylistically, upang sumunod sa Estilo 50, dapat nagawa ko ito.
OK.
>> Kaya isa huling command upang ipakilala.
Well, gdb ni debug in hayaan
Kaya sa halip na breaking sa main, kung ako alam ang foo function ay din ang
problema, pagkatapos ay maaari kong magkaroon lamang sinabi, masira sa foo, sa halip.
Sabihin nating masira ako sa parehong pangunahing at foo.
Kaya maaari kang magtakda ng kahit gaano karaming breakpoints hangga't gusto mo.
Kapag nagta-type ako sa run, ito ay pagpunta upang itigil ang sa -
ooh, ni-recompile ipaalam, dahil Binago ko bagay.
Makikita mo ang linyang ito, Babala, ang pinagmulan file ay mas kamakailang kaysa executable.
Kaya ibig sabihin nito ay na ko pa lang nagpunta in dito at nabago ang mga ito upang sumunod sa Estilo
50, pero hindi ko mag-recompile ang programa.
Kaya bakit ang GDB sa akin ng kamalayan ng mga iyon.
Kukunin ko quit, muling gumawa ng debug, pindutin gdb-debug.
OK.
>> Kaya ngayon, pabalik sa kung ano ang ginagawa ko.
Hatiin main, bakasyon foo.
Ngayon kung nagpatakbo ako ng programa, kaya pagpunta sa magpatuloy hanggang sa mga hit sa isang
breakpoint.
Breakpoint na ang mangyayari sa ang unang isa sa pangunahing.
Ngayon, sa halip ng paggawa susunod, susunod, susunod, susunod, susunod, hanggang maabot ko foo, ako
Maaari type magpatuloy, na kung saan ay patuloy hanggang maabot ang susunod na breakpoint.
Kailangan ko bang ipasok muna ang integer.
Magpatuloy ay magpapatuloy hanggang maabot ko ang susunod breakpoint, na kung saan ay na
paggana ng mga foo.
>> Kaya Run tatakbo hanggang maabot ang isang breakpoint, ngunit lamang nagta-type ka sa run kapag
ka na nagsisimula sa programa, at pagkatapos, mula roon, ito ay magpatuloy.
Kung ko lang ginawa masira pangunahing at pagkatapos ay ang bumangga, magkakaroon ito masira sa
pangunahing, at pagkatapos ay magpatuloy.
Dahil hindi ko magkaroon ng isang break na punto sa foo, ipasok ang integer, pagkatapos ngayon ako
hindi pagpunta sa masira sa foo.
Lamang Ito ay pagpunta sa Walang-hanggan loop hanggang iyon.
OK.
>> Kaya na Intro sa GDB.
Dapat mong simulan ang paggamit nito sa iyong mga hanay ng problema.
Maaari itong maging kapaki-pakinabang upang makilala ang mga bug.
Kung talagang lamang, linya-by-line, pumunta sa pamamagitan ng iyong code, at ihambing kung ano ang
talaga nangyayari sa kung ano ang inaasahan mong mangyari, pagkatapos ito ay medyo
mahirap na makaligtaan ang iyong mga bug.
OK.
>> Kaya noong nakaraang linggo nagdala up David ito lihim-key cryptography bagay-bagay para sa
unang pagkakataon, kung saan hindi namin nais mga password lang ma-imbak sa aming
computer sa ilang mga plain text file, kung saan isang tao ay maaaring dumating sa paglipas at lamang
buksan ito at basahin ang mga ito.
May perpektong, sila ay naka-encrypt sa ilang mga paraan.
At sa Problema Set 2, ikaw ay pakikitungo may isang paraan ng pag-encrypt,
o, mahusay, dalawang mga pamamaraan, ngunit ang mga ito ay hindi kaya mahusay.
Kung gagawin mo ang Hacker edisyon, handa ka pagpunta din na pagharap sa
decrypting ilang mga bagay.
>> Kaya ang isyu ngayon, na rin, kahit na mayroon kaming ang pinakamatibay na pag-encrypt
algorithm sa mundo, kung pinili mo ang isang lalo na hindi magandang password, pagkatapos ito
ay hindi tutulong sa inyo, dahil ang mga tao magagawang upang malaman ito out pa rin.
Kahit na nakikita ang mga naka-encrypt na string at ito mukhang isang gulo ng basura
na nangangahulugan walang anuman sa kanila, kung sila kailangan pa rin lamang upang subukan ng ilang mga password
upang malaman ito, pagkatapos ay sa iyo ay hindi masyadong secure.
Kaya nanonood ng video na Ginagawa puntong iyon.
>> [VIDEO sa pag-playback]
>> -Helmet, halimaw na tao sa iyo.
Ano kaya ang nangyari?
Ano ang iyong ginagawa sa aking anak na babae?
>> -Pinahihintulutan sa akin upang ipakilala ang makinang batang plastic siruhano, Dr Phillip
Schlotkin, ang pinakamalaking ilong tao na trabaho sa buong
uniberso, at Beverly Hills.
>> -Ang iyong kamahalan.
>> -Ilong trabaho?
Hindi ko maintindihan.
Na siya ay nagkaroon ng isang trabaho ilong.
Iyon ay isang matamis na labing-anim kasalukuyan.
>> -Hindi.
Ito ay hindi kung ano ang palagay mo.
Ito ay magkano, magkano ang mas masahol pa.
Kung hindi mo ibigay sa akin ang kumbinasyon upang ang mga naka kalasag, Dr Schlotkin habilin
bigyan ang iyong anak na babae bumalik sa kanyang lumang ilong.
>> -Hindi.
Saan mo kang makakuha iyon?
>> Right-Lahat.
Kukunin ko sabihin.
Hindi, tatay.
Hindi, hindi mo kailangan.
>> -You're right, aking mahal.
Kukunin ko makaligtaan ang iyong bagong ilong.
Ngunit hindi ko sasabihin sa kanya ang kumbinasyon, kahit na ano.
>> -Tunay na rin.
Dr Schlotkin, gawin ang iyong pinakamasama.
>> -Ang aking kasiyahan.
>> [TOOL pagiging SHARPENED]
>> -Hindi.
Maghintay.
Kukunin ko sabihin.
>> -Ako Alam Gusto ito gumana.
Ayos lang.
Bigyan ito sa akin.
>> -Ang kumbinasyon ay isa.
>> -One.
>> -Dalawang.
>> -Tatlong.
>> -Four.
>> -Limang.
>> -So ang kumbinasyon ay isa, dalawa, tatlo, apat, lima.
Iyan ang stupidest kumbinasyon Kailanman ko narinig sa aking buhay.
Iyan ang uri ng bagay isang tulala ay magkakaroon sa kanyang bagahe.
>> -Salamat sa iyo, ang iyong kamahalan.
>> -Ano ang iyong magagawa?
>> -I-off ang wall.
>> -Hindi mo ang hindi.
Binuhay mo off ang buong pelikula.
>> -Ako ay dapat na napindot ang maling button.
>> -Well, ilagay ito pabalik sa.
Ilagay ang pelikula muli.
>> -Oo, ginoo.
Oo, ginoo.
>> Ng pumunta, Arnold-Hayaan.
Halika, Gretchen.
Siyempre, alam mong idedetalye ko pa rin mayroon upang singilin ka para sa ito.
>> [END VIDEO sa pag-playback]
>> Rob BODEN: Lahat ng karapatan.
Kaya ngayon na mayroon kami ay pakikipag-usap tungkol sa seguridad sa ilang mga paraan, magaling
maliit na pelikula poster, kaya sa kamakailang araw, ang mga isyu sa NSA
sa pagsubaybay sa lahat ng bagay.
Maaari itong maging mahirap na pakiramdam na tulad mo may isang uri ng privacy sa
mundo ng online, kahit na hindi ko maaaring sabihin mo ang karamihan sa mga detalye ng prisma.
Kaya gumagalaw na lampas prisma, hindi namin pagpunta na pakikipag-usap tungkol sa na, ngayon
isipin ang tungkol sa iyong laptop.
Kaya up dito, gusto kong lumipat sa aking aktwal na mga account,
kasama ang aking maliit na penguin.
Kaya ba akong magkaroon ng isang set ng password, at na password ay kahit anong nais ko ito upang maging.
>> Ngunit tandaan na kung ano ako ng pag-log in gamit, kaya ito sa pag-login
prompt, ay ilang mga programa.
Ito ay ilang mga programa na noon ay nakasulat sa pamamagitan ng ilang mga tao.
At kaya, ang taong iyon, kung ang mga ito lalo na nakahahamak na, magagawa nila
sinabi, lahat ng karapatan, sa gayon kung ang password na ipasok ko ay katumbas ng aking
aktwal na password, o ito ay katumbas sa ilang mga espesyal na password -
Si David ay kahanga-hangang o isang bagay -
pagkatapos ay hayaan silang in
Kaya maaaring magkaroon ng isang nakakahamak na programmer access sa lahat ng iyong mga Mac, o
Windows, o kahit ano.
>> Kaya na ay hindi magkano ng isang alalahanin, dahil, Ibig kong sabihin, programa sa pag-login na ito ay
na ipinadala sa OS X, daan-daan o libu-libong mga tao ay may
Sinuri ang code na ito.
At kaya, kung, ang iyong code sa isang lugar, ikaw sabihin kung ang string na ito ay katumbas Kapantay
Si David ay kahanga-hangang, sa pag-login, pagkatapos ay isang tao ay pagpunta sa maging, tulad ng, maghintay.
Ito ay hindi tama.
Ito ay hindi dapat dito.
Kaya iyon ang isang paraan makuha namin ang mga bagay upang maging uri ng secure na.
>> Ngunit isipin ang tungkol sa mga programa kahit na na sinulat mo.
Sabihin nating ikaw ay sumulat sa programa ng pag-login.
Kaya ang program na ito sa pag-login na iyong na sinulat, kaya malinaw naman, ikaw ay isang magandang
programmer.
Hindi ka pagpunta sa ilagay ang anumang mga nakakahamak na kung x ay katumbas ng katumbas David ay kahanga-hangang
sa iyong code.
Ngunit sa programang ito, ano ang ginagawa mo gamitin upang ipunin ang programang ito?
Isang bagay na tulad ng kumalatong.
Kaya kung ano kung ang taong nangyari sa sumulat kumalatong espesyal cased sa kumalatong
isang bagay tulad ng, kung ako ay kino-compile ang programa sa pag-login, pagkatapos ay ipasok ang code
sa pag-login programa na nagsasabing, kung x ay katumbas ng katumbas David ay kahanga-hangang?
Kaya hindi masyadong pa, ngunit mayroon namin ang parehong maglalabas dito, kung saan kumalatong, mahusay,
libo-libo, kung hindi libu-libong mga mga tao, na tumingin sa kumalatong, mayroon
tumingin sa mga linya nito ng code at sinabi, lahat ng karapatan, walang masamang narito.
Malinaw, walang sinuman ang nagiging kahit ano ang nakakahamak na.
>> Ngunit kung ano ang kumalatong mismo, tulad ng, paano kung compile ko kumalatong?
Paano kung mayroon akong ilang mga tagatala na compiles kumalatong na insert sa kumalatong
ito espesyal pataga na nagsasabing, ang lahat ng karapatan, kapag compile ko kumalatong, pagkatapos ay ang
executable ko dapat espesyal tumingin sa loob ng programa ng pag-login at insert
ang password na ito, katumbas ay katumbas ng Dave ay kahanga-hangang?
Kaya tandaan na ang iyong sarili nito tagatala Kailangang ma-pinagsama-sama sa isang punto.
Kaya kung ano ang pinili mo upang ipunin ang kumalatong sa, mismo ay nakakahamak na, pagkatapos mo
ma-screwed ang buong paraan down ang linya.
>> Kaya dito, mayroon kaming Ken Thompson at Dennis Ritchie.
Kaya ito ay isang iconic na larawan.
Dennis Ritchie ay sa kanan.
Siya ay isang pangunahing -
halos sinulat ni C. Kaya maaari mong salamat sa kanya para sa class na ito.
Ken Thomson ay sa kaliwa.
Ang dalawa sa kanila talaga na sinulat na UNIX.
Well, sila ay mga pangunahing nag-ambag sa UNIX.
Nagkaroon ng ilang mga iba pa.
Kaya Ken Thompson, sa isang punto, panalo siya ang Turing Award.
At ang Turing award, nagbigay ako palaging narinig -reference ito sa ganitong paraan, ito ay ang
Nobel Prize ng computer science.
>> Kaya sa Turing Award, siya ay may upang bigyan ang kanyang pagtanggap pagsasalita.
At Binibigyan niya ito napaka sikat na salita ngayon, na tinatawag na Reflections sa pagtitiwala
Tiwala, na namin nai-link ang Upang sa kurso website.
At sa pagsasalita, sabi niya, ang lahat ng karapatan, kaya na sinulat ko UNIX, at ngayon ang lahat ng
ang mga tao ay gumagamit ng UNIX.
Ngayon, tandaan ngayong araw na Linux ay isang direktang inapo ng UNIX.
Direkta ay gumagamit ng OS X UNIX.
Windows ay hindi kaya magkano, ngunit marami ng mga ideya ay kinuha mula sa UNIX.
>> Kaya siya napupunta up sa stage at sabi, lahat ng karapatan, isinulat ko UNIX.
At kaya lang alam mo guys, ako makakapag-log in sa bawat
solong isa sa iyong mga computer.
Dahil Naglagay ako ng isa sa mga espesyal na kung x katumbas ay katumbas ng Ken Thomson ay kahanga-hangang,
pagkatapos ako pinapayagang mag-log in.
Kaya mga tao ay tulad ng, mahusay, how'd gagawin mo na?
Tiningnan namin sa programa sa pag-login at walang naroon.
Siya ay tulad, na rin, na-modify ko ang tagatala upang mag-log sa programa sa pag-login
upang ang programa sa pag-login ngayon ay magkakaroon na x ay katumbas ng katumbas Ken Thompson
ay kahanga-hangang.
>> At sinasabi nila, well, hindi iyon totoo.
Kami ay tumitingin sa tagatala, at ang tagatala ay walang anumang mga linya ng
code tulad na.
Tulad ng Siya ay, OK, ngunit kung ano ang ikaw ay kino-compile ang tagatala may?
At sila sa tingin, at siya ay, tulad ng, mahusay, Ako ang taong nagbigay sa iyo ang tagatala
na iyong ginagamit upang mag-compile ang tagatala, kaya ikaw ay kino-compile ang isang tagatala, na
mismo ay nakakahamak na, at magpo basagin ang programa sa pag-login.
Kaya talaga, sa puntong iyon, mayroong walang paraan na maaari mong tingnan ang pinagmulan
code ng programa sa pag-login upang makita kung ano ang mali.
Hindi mo maaaring kahit na tumingin sa source code ng tagatala
upang makita kung ano ang mali.
>> Kakailanganin mong mag-tumingin sa machine code, ang aktwal na binary ng
inipon tagatala upang makita, maghintay, ang mga linya ng code hindi dapat dito.
Ngunit kinuha ito Ken Thompson isang hakbang karagdagang at sinabi, mahusay, may mga
ng mga espesyal na programa na talaga tulungan basahin mo ang binary ng mga programa,
at kaya kung may isang taong ginamit programa na sa basahin ang mga binary, gusto nilang makita ang mga
linya ng code.
Modify niya mga programa upang sabihin, ang lahat ng karapatan, kung ikaw ay naghahanap sa
tagatala, huwag ipakita ang partikular na hanay ng mga binary.
>> Kaya pagkatapos na kailangan mong gawin na ang isang hakbang karagdagang at isa lamang, na maaaring magkaroon
kinuha maramihang mga antas ng kawalang-tapat, at sa isang punto, walang sinuman ang aktwal
pagpunta sa ma-check.
Kaya mga kapakanang moral ng kuwento ay, ikaw ay hindi pagpunta sa ay sumusulat
Kumalatong sa class na ito.
Ikaw ay pagpunta sa gumagamit sa pag-akyat Kumalatong marami sa class na ito.
Para sa lahat ng alam mo na, kumalatong ay isang nakakahamak na programa na ay sabotaging bawat
solong programa na iyong pinagsama-sama.
At upang mag-iwan ka sa na napaka nagbabala Tandaan, ang nakikita mo sa Miyerkules.
>> [Palakpakan]
>> Tagapagsalita 2: Sa susunod na CS50.
>> Tagapagsalita 3: Huwag mang-ahas mong sabihin na iyon.
Maaari mong gawin ito.
Nagawa mo na ito bago, maaari mong gawin ito ngayon, maaari mong gawin ito bukas.
Hindi ka na ginagawa ito para sa taon.
Pumunta lamang up doon at gawin ito.
Maaari mong gawin ito.
>> [MUSIC nagpe-play]