[Daqq tal-mużika] ROB BODEN: Kull dritt. Għalhekk, l-ewwel ħaġa l-ewwel, ta 'video minn wiċċ familjari. [VIDEO Daqq] -Id-dritt. Dan huwa CS50, u dan huwa il-bidu ta 'tliet ġimgħat. Jien sorry I ma jista 'jkun hemm miegħek llum, iżda ippermettili jintroduċu Stess Rob Boden CS50 tal. [Video daqq END] [Applause U Cheers] ROB BODEN: Il filmografija fl li l-video huwa meraviljuż. Kull dritt. Allura l-ewwel, hemm lunch ieħor. Huwa għada fil 01:15. M'hemm l-ebda ikla din il-ġimgħa. Huwa ma Quora. U Tommy mhux hawn s'issa, iżda wieħed mill- il-poplu hemm eks CF ras, Tommy McWilliam. Hekk hu gost Guy. Għandek ġejjin. Kull dritt. Allura aħħar ġimgħa, bdejna tkissir apparti dwar dak string hija verament. Imxejna magħrufa mill-bidu li huwa sekwenza ta 'karattri. Iżda aħħar ġimgħa, aħna delved fil-fatt li dak li huwa verament sekwenza ta ' karattri, ukoll, issa għandna arrays ta 'karattri. U nafu li string, huwa firxa ta 'karattri, fl-aħħar nett, aħna għandna dan byte null speċjali, dan backslash 0, li jindika t-tmiem ta ' l-sekwenza. U għalhekk string firxa ta ' karattri, imma aħna jista 'jkollu aktar minn biss firxa ta 'karattri, nistgħu jkollhom firxa ta 'kwalunkwe tip ta 'ħaġa li rridu. Għalhekk, jekk inti recall mill-aħħar ġimgħa, il- Etajiet programm li David introdotti verament malajr. Allura l-ewwel ħaġa li aħna qed tmur biex tagħmel hu issaqsi lill-utent għal integer, il- numru ta 'nies fil-kamra. Ladarba għandna li integer, aħna qed tiddikjara firxa. Avviż dan sintassi bracket. Int ser jidraw dan. Allura aħna qed tiddikjara firxa ta 'numri interi imsejħa etajiet, u hemm n interi f'dan array. Allura dan il-mudell dritt hawn, dan int 4 i egwali għal 0, i huwa inqas minn n, i plus plus, li huwa wkoll se tkun mudell li ikollok ħafna użati biex. Minħabba li pjuttost ħafna kif int dejjem se jtenni fuq arrays. Mela ftakar li n hija l- tul ta 'firxa tagħna. U hekk hawn, aħna ripetutament tistaqsi għall-età ta 'persuna i fil-kamra. Wara dan, aħna jinżlu, u għal kwalunkwe raġuni arbitrarja, aħna mbagħad jistampa kemm qodma dawn qed tmur tkun sena minn issa. U t-tmexxija dak il-programm, ejja jagħmlu etajiet, dot etajiet mmejla. Allura numru ta 'nies fil-kamra, ejja ngħidu hemm tlieta. U jgħidu, l-ewwel persuna tkun 13, jmiss huwa 26, u l-aħħar huwa 30. Mela allura dan ser jtenni matul dawk it-tliet nies, jistampa 14, 27, u 31. Mela ftakar li meta aħna jiddikjaraw firxa ta 'daqs n, l-indiċi f'dik firxa, il-firxa għandha valuri u indiċi 0, 1, 2, it-triq kollha sa n minus 1. Allura meta aħna qal kien hemm tliet persuni fil-kamra, u npoġġux fil hawn l-ewwel iterazzjoni permezz ta 'dan loop, i se tkun 0. Allura fl-indiċi 0. Aħna tassenja l-ewwel età l-utent jidħol. Imbagħad fil-wieħed li jmiss, aħna qed jidħlu fil- tieni n-utent jidħol, u b'mod jmiss għal tnejn, l-aħħar n. Allura avviż li firxa ta 'daqs tlieta ma jkollhom xejn fl-indiċi tlieta. Dan mhux validu. Kull dritt. Allura, li tmur lura hawn. Allura issa li aħna ħadthom ttrattati arrays, għandna xi familjarità. Issa aħna qed tmur biex jimxu fuq kmand argumenti linja, li ser ikunu pretty rilevanti għal dan is-sett problema. Allura sa issa, kull meta inti ħadthom ddikjarat funzjoni prinċipali tiegħek, konna qal null prinċipali int. Allura vojt ifisser biss li aħna ma tgħaddi ebda argumenti għal din il-funzjoni. Issa aħna qed tmur biex tara li prinċipali tista 'tieħu xi argumenti. Here we jsejħulhom int argc u parentesi ARGV string. Il-parentesi, għal darb'oħra, li jindika li aħna qed jittrattaw ma 'arrays. So here, brackets ARGV string, aħna qed jittrattaw ma 'firxa ta' kordi. Allura argc, li għaddej biex jindikaw kemm argumenti konna mgħoddi lill dan il-programm. U biex tara dak li jfisser, ejja jagħlqu dan. OK. Allura sa issa, aħna ħadthom run kull programm bħal etajiet dot mmejla. Nistgħu wkoll, fil-linja tal-kmand, passat jgħaddu l-argumenti, u b'hekk it-terminu, l-iggwidar argumenti linja. Allura l-ewwel argument, bonjour dinja. Allura hawnhekk, argc ikun tlieta. Hu l-għadd tal-argumenti fil-linja tal-kmand. Argc huwa dejjem anqas 1, peress dot mmejla etajiet, hija stess, jgħodd bħala waħda mill- l-argumenti linja tal-kmand. Imbagħad bonjour hija l-ewwel. Jekk etajiet dot mmejla huwa l-0, allura bonjour hija l-ewwel, u fid-dinja huwa l- tieni argument linja tal-kmand. Allura l-ARGV string, aħna qed tmur biex tara, fih il-kordi, dot slash etajiet, hello, u fid-dinja. U, b'talba David, aħna qed tmur tilgħab video introduzzjoni li. [VIDEO Daqq] -Sa issa fil-programmi Imxejna miktub, konna tiddikjara prinċipali null prinċipali kif int. U dan il-ħin, li null għandha sempliċiment tispeċifika li l- programm ma tieħu kwalunkwe argumenti linja tal-kmand. Fi kliem ieħor, meta utent runs programm, hu jew hi jista 'jipprovdi kmand argumenti linja billi tikteb addizzjonali kliem jew frażijiet wara tal-programm isem fil-prompt. Ukoll, jekk inti tixtieq program tiegħek biex jieħdu argumenti linja tal-kmand, wieħed jew aktar kliem bħal dawn, għandna bżonn biex jissostitwixxu null ma 'koppja ta' argumenti. Mela ejja tagħmel dan. Inkludi CS50.h. Inkludi io.h. standard Prinċipali Int. U issa, minflok null, jien ser jispeċifika int imsejħa argc, u firxa ta 'kordi imsejħa ARGV. Issa, argc u ARGV huma sempliċiment konvenzjonijiet. Nistgħu sejħu dawn l-argumenti xejn aktar li rridu. Imma dak li huwa importanti huwa li argc hija ta int għaliex, skond id-definizzjoni, huwa tmur fih il-kont argument, il- numru ta 'kliem b'kollox li l- utent ittajpjat fil tiegħu jew tagħha fil-pront. ARGV, sadanittant, argument vector, huwa ser fil-fatt tkun array ħażna kollha tal-kliem li l-utent ikollu ittajpjat fuq tiegħu jew tagħha fil-pront. Ejja tipproċedi biex tagħmel xi ħaġa issa ma 'wieħed jew aktar minn dawn argumenti linja tal-kmand. B'mod partikolari, ejja imorru quddiem u print kwalunkwe kelma t-tipi utent wara l-isem tal-programm fil-prompt. Bracket Open. Parentesi magħluqa. Mija printf backslash iu comma. U issa I bżonn li tgħid printf liema valur biex plagg fil dik placeholder. Irrid li l-ewwel kelma li l-utent ikollu ittajpjat wara isem tal-programm, u għalhekk jien ser tispeċifika ARGV bracket 1, qrib parentesi, virgola. Issa, għaliex bracket 1 u mhux bracket 0? Ukoll, jirriżulta, maħżuna awtomatikament fil ARGV 0 se tkun l- Isem attwali programm. Allura l-ewwel kelma li t-tipi utent wara l-isem tal-programm huwa, minnu konvenzjoni, se tkun maħżuna ARGV 1. Ejja issa jikkompilaw u run dan il-programm. Jagħmlu ARGV 0, dot slash ARGV 0. U issa kelma bħal bonjour. Ikteb. U hemm aħna għandna hija, bonjour. [Video daqq END] ROB BODEN: Kull dritt. Agħlaq din. Allura tieħu ħarsa lejn dak il-programm li aħna biss introdotti lilna, ukoll, biss li juru, jekk aħna istampar ARGV 0, jagħmlu, issa x'inhu, ARGV 0, dot slash ARGV 0. Allura, kif mistenni, huwa istampar l- isem tal-programm, peress ARGV 0 hija dejjem se tkun il- isem tal-programm. Imma ejja nagħmlu xi ħaġa ta ' daqsxejn aktar interessanti. Allura fis-sett problema, inti ser tkun introdott biex din il-funzjoni, atoi. Allura dak li nużaw atoi għall? Li għaddej biex jikkonverti string għal integer. Hekk jekk I jgħaddu l-string, wieħed tnejn tlieta, li atoi, li ser tikkonverti dak għall-eqreb numru sħiħ, wieħed tnejn tlieta. Allura aħna qed tmur biex jikkonvertu l-ewwel kmand argument linja li integer, u mbagħad biss print li numru sħiħ. Allura bażikament, aħna qed tip ta ' reimplementing getint, biss il- integer hija mdaħħla fil-kmand linja minflok fil-programm interattiv. Mela allura, jagħmlu ARGV 0, ejja nagħmlu fil hawn, u tagħlaq dik. Allura running ARGV 0, u ejja jidħlu fil- numru sħiħ, wieħed tnejn tlieta erba wieħed tnejn. Għalhekk ser jistampaw il-numru sħiħ, wieħed tnejn tlieta erba wieħed tnejn. Hemm xi irqaqat li atoi li dan ser tieqaf kura dwar xi ħaġa lil hinn minn karattru numeriku valida, iżda li ma jimpurtax. Allura dak li taħseb jiġri jekk nagħmel dan? Tort Segmentazzjoni. Allura għaliex huwa li? Jekk inti tħares lura lejn programm tagħna, aħna qed konverżjoni ARGV 1, l-ewwel argument wara l-isem tal-programm, għal numru sħiħ. Imma m'hemm l-ebda argument għadda wara l-isem tal-programm. Allura hawn, naraw li dan huwa Buggy programm, peress li, jekk nippruvaw run mingħajr ebda argumenti, se biss crash. Allura ieħor mudell komuni tkun taf tara huwa xi ħaġa simili, jekk argc huwa inqas minn tnejn, li jindika li ma kienx hemm inqas l-isem programm u ewwel argument, allura aħna ser nagħmlu xi ħaġa bħal printf, mhux biżżejjed argumenti linja tal-kmand. Li probabbilment mhix waħda tajba għall-istampar, huwa probabbilment xi ħaġa, bħal għandek tidħol integer fil-linja tal-kmand. I ser biss jispiċċaw hemmhekk. U mbagħad jirritornaw 1. Mela ftakar li fl-aħħar ta 'tagħna programm, jekk nerġgħu lura 0, dik it-tip ta ' jindika suċċess. U prinċipali wkoll awtomatikament prospetti 0 jekk inti ma. Allura hawn, aħna qed retuning 1 biex jindikaw li li mhux suċċess. U inti tista 'tmur lura xi trid, biss, 0 jindika suċċess, u kull ħaġ'oħra jindika falliment. Mela ejja run din il-verżjoni ta 'affarijiet. Allura issa, jekk aħna ma jidħol kmand tal-linja argument, dan ser jgħidlek b'mod korrett us, mhux biżżejjed linja tal-kmand. Ma finitura is-sentenza. Else, jekk aħna attwalment tgħaddiha waħda, jista 'jtemm il-programm. Allura dan huwa kif inti tuża argc fl sabiex jivvalidaw in-numru ta ' argumenti kmand linja li huma attwalment mgħoddija. Mela ejja jagħmlu dan il-programm daqsxejn aktar ikkumplikata, u ħarsa lejn it-tieni iterazzjoni ta 'affarijiet. Allura issa, aħna mhux biss istampar tal- ewwel argument linja tal-kmand. Hawnhekk, aħna qed mtennija minn partijiet ugwali i int 0, i huwa inqas minn argc, i plus plus, u l-istampar ARGV, indiċi i. Allura dan il-mudell, għal darb'oħra, dan huwa l-istess mudell bħal qabel, ħlief minflok ta 'sejħa tal-varjabbli n, aħna qed tuża argc. Allura dan huwa mtennija fuq kull indiċi fil-firxa, u l-istampar kull element f'dak array. U għalhekk, meta aħna run dan il-programm, ukoll, I ma tidħol fi kwalunkwe linja tal-kmand argumenti, għalhekk biss prints l-isem tal-programm. Jekk I tidħol mazz ta 'affarijiet, inneħħu print wieħed, kull wieħed fuq linja tagħha stess. OK. Mela ejja tagħti dan il-pass wieħed ulterjuri. U minflok ta 'stampar kull argument fuq il-linja tagħha stess, ejja jistampaw kull karattru ta 'kull argument fuq il-linja tagħha stess. Mela ftakar li ARGV hija firxa ta 'kordi. Allura dak li huwa string, iżda firxa ta 'karattri? Allura dan ifisser li ARGV huwa verament firxa ta 'firxa ta' karattri. Allura jieħdu vantaġġ ta 'dan, ejja jinjora dan għal issa. Ejja biss tikkunsidra l-ARGV string 0. Allura jekk aħna tixtieq li tressaq kull karattru ta ' ARGV 0 fuq il-linja tagħha stess, allura nixtieq jagħmlu l-mudell aħna qed jintużaw biex, i huwa inqas mit-tul tal-firxa, li hawn, huwa strlen ta ', li mhux dak I trid tagħmel, string s ugwali ARGV 0. Hekk i huwa inqas mit-tul ta 'tagħna array, li f'dan il-każ huwa array ta 'karattri, i plus plus. U hekk, kif rajna aħħar ġimgħa, huwa ideali jekk nimxu li strlen barra tal-kundizzjoni, peress li n se jkun li żżid l strlen ta 'kull darba immorru permezz tal-linja, u huwa mhux se jinbidlu. Allura aħna ser tissettja ugwali għal n hawn fuq. OK. Allura issa, aħna qed mtennija fuq kull indiċi fil-firxa. U hekk, jekk irridu li jistampaw kull karattru f'dak array, mija c huwa il-bandiera irridu li jużaw għall-karattri. U issa i bracket se tkun l- spag, karattru indiċi i, hekk jekk l- string kienu bonjour. allura s 0 se tkun h, i bracket 1 se jkun e, u l-bqija. Allura issa rridu li jgħaqqdu dawn iż-żewġ affarijiet. Aħna tixtieq li jistampaw kull karattru ta 'kull argument linja tal-kmand. Allura aħna qed tmur biex ikollhom a nested għal loop. U konvenzjonalment, l-ewwel counter qed i, il-li jmiss se tkun j, n se jkun il-strlen ta 'i ARGV, i huwa inqas minn n, i plus plus. U issa minflok ta 'stampar i ARGV, hekk ARGV bracket i se indiċi - li għaddej biex tkun il-linja tal-kmand i-th argument, ARGV i, j huwa ser tkun il-karattru jth ta l-argument i-th. I ser teħles minn dan up hawn issa peress li aħna poġġih f'dak loop. Allura huwa ekwivalenti għal string s ugwali ARGV i, u mbagħad parentesi s j. Well, aħna ma bżonn li tiddikjara dan il-varjabbli s. Minflok, aħna ser biss jgħaqqdu dawn tnejn fis-dak li kellna, ARGV i, j. SPEAKER 1: [inaudible]. ROB BODEN: sejħa Tajba. Allura dan huwa miksur. Jekk I attwalment dam, nixtiequ jkunu realizzati dan. Allura l-counter I jimpurtahom f'dan partikolari għall- loop hija j, l iterator. Allura inti run fis kwistjonijiet, probabbilment loop infinita, jekk aħna ma tkunx iffissata dik. C'est pourquoi aħna qed wkoll jitkellem dwar debugging illum. OK. Mela ejja run dan il-programm. U ejja attwalment żid printf separata dritt hawn li se biss print linja oħra, peress li dan ifisser meta aħna tmexxi l-programm, se jkun hemm xi vojt linja bejn kull karattru ta ' kull argument linja tal-kmand. Well, aħna ser tara dak li jfisser. OOP. Ltqajna xi bug. Error impliċitament li tiddikjara funzjoni librerija strlen. Allura jmorru lura fil-programm tagħna, I nesa li hash jinkludu string.h. Allura string.h se tkun l- fajl header li tiddikjara il-funzjoni strlen. OK lok, hija tiġbor. Issa, ejja run. Allura dan. Huwa ser jistampa tagħna isem tal-programm, bonjour dinja. Huwa ser jistampaw kull ħaġa, kull karattru, fuq il-linja tagħha stess. OK. Mela ejja attwalment jieħdu din pass ulterjuri. U minflok jużaw string.h, ejja jaħsbu dwar kif aħna'd jiġu implimentati tagħna stess funzjoni strlen. So I ser jagħtuk immedjatament firma funzjoni. Mela ejja sejħa fil my_strlen, u huwa ser tieħu string bħala argument, u qed nistennew li jirritornaw il- tul ta 'dak string. Għalhekk, fejn huwa li Guy? Iva. OK. Sabiex tiftakar mill-slide ta 'qabel li kien ukoll mill-aħħar ġimgħa, li firxa ta 'karattri, ukoll, string, hekk ejja ngħidu li dan huwa string tagħna s. Hekk jekk i huwa l-sekwenza, hello, allura, H-E-L-L-O, fil-memorja, li għaddej biex jkun, u allura dan backslash 0 karattru. Allura kif nistgħu tikseb it-tul ta 'i? Ukoll, il-trick qed tfittex dan backlash 0 karattru, dan null terminatur. Allura l-algoritmu huwa għaddej li tkun xi ħaġa simili ftit biżżejjed karattri li - ejja jkollhom din idejn jirrappreżentaw xi counter, ejja sejħa dan it-tul int. Allura, li jibdew minn hawn, aħna qed ser jtenni fuq string tagħna. Allura l-ewwel karattru, huwa H, u mhuwiex lura mmejla 0, hekk it-tul huwa 1. Jtenni l-karattru li jmiss, E, u mhuwiex backslash 0. Tul huwa 2. L, 3. L-4. O, 5. U fl-aħħarnett, nilħqu backslash 0, u sabiex ifisser, ukoll, din is-sekwenza huwa fuq. Mela ejja ritorn 5. Allura konkret ta 'din, minn naħa, tul n my ikun egwali għal 0, lemin tiegħi. U aħna qed tmur biex jtenni - SPEAKER 1: [inaudible] ROB BODEN: Oh, rimja. Sejħa tajba. Boom. Allura tul n egwali għal 0. Allura issa, it-tul filwaqt li s ma istess daqs u mbagħad, backslash 0. Mela ftakar, dan backslash 0, huwa karattru attwali, u dan jindika tmiem is-sekwenza. Eżatt bħal, ukoll, backslash n huwa karattru attwali. Backslash 0 se jindikaw l-aħħar ta 'sekwenza tagħna. I ma jridux jitqiegħdu li hemm. U filwaqt li s indiċjati skond it-tul ma jkunx ugwali għall-terminatur null, imbagħad aħna qed biss se inkrement tul. Mela allura, fl-aħħar tal-programm tagħna, tul huwa eventwalment ser jkun 5 f'dan il-każ. U aħna ser biss jirritorna tul. OK. Allura issa stabbiliti hawn, I ma do my_strlen. Ejja josservawha tagħmel ċert kollox jimxi bla xkiel. Was I tagħmel fi 2? Jew kien li 1? Li għandha tagħmel. Kull dritt. Allura dan huwa ARGV 2. Jaħdem bħala antiċipat, għalkemm kien li l-waħda I ma kien fil-? Iva. OK. Din il-verżjoni ta 'affarijiet ma kellux il-linja ġdida printf wara, iżda ma jagħmel ebda differenza. OK. Allura ħadmu kif mistenni. Issa nistgħu anki jgħaqqdu dan il-pass wieħed ulterjuri, fejn avviz hawn, ukoll, ewwel, aħna qed ħtif l strlen ta ARGV i, u allura aħna qed mtennija fuq kull karattru f'dak string. Allura minflok tagħmel dan, dak li jekk aħna biss jgħaqqdu din il-loġika ta 'stennija sakemm aħna hit backslash 0 dritt fis dan għal loop? Allura jtenni filwaqt i ARGV, j ma backslash mhux ugwali 0. Mela ejja run ewwel. Kull dritt. Allura hawn, din il-kundizzjoni huwa qal - ejja ċar li. Allura issa, ħalli din tkun ARGV tagħna. Allura meta I biss dam dak il-programm qabel, ARGV firxa ta 'kordi. U għalhekk, jekk I run ma ARGV dot slash 2, Hello dinja, allura l-ARGV nnifisha hija tul ta '3, għall ARGV żero, hello, u fid-dinja. U ġewwa ta 'kull wieħed minn dawn l-indiċi huwa, innifsu firxa, fejn dan ser tkun dot, dan se jkun slash, I do not know jekk dan kien il-direzzjoni t-tajba, I ma naħsibx li kien. A-R-V sing, jeħtieġu aktar spazju. Ejja maqtugħa dan array. Sing 0, u mbagħad backslash 0 A-R-V. U mbagħad diżordinat se jkun bonjour. Ejja ngħidu, H-E backslash 0. U fl-aħħarnett, W-O backslash 0. Allura l-algoritmu li aħna biss kiteb, l nested għal-linji, dak li qed tagħmel huwa, aħna l-ewwel ikollhom l- kontro i u mbagħad j. Dan ikun aktar faċli ma 'kodiċi fuq il- screen, Ejja ħa mmorru lura għal dan. OK. Allura avviż li i huwa l-iterator li l- mtennija fuq kull kmand argument line. U j huwa l-iterazzjoni iterator fuq kull karattru li argument linja tal-kmand. Allura dak li dan printf ġewwanett qed tagħmel huwa, għandna printf ARGV 0 0, printf ARGV 0 1, printf ARGV 0 2, 3 0, 0 4, 0 5, 0 6, iżda issa, ARGV 0 7 se backslash ugwali 0. Mela allura aħna ħruġ li għal loop, u issa i itenni għal 1. U issa aħna qed tmur biex print ARGV 1 0, ARGV 1 1 - ukoll, issa, peress li jien cut bonjour qasir, ARGV 1 2 hija għal darb'oħra se tkun backslash 0. U għalhekk, inkrement i u tkompli, u hekk, sakemm aħna jistampaw kollha dinja, u dawk huma tlieta linja ta 'kmand argumenti, u aħna ser ħruġ minn l loop aktar imbiegħda, u finitura programm tagħna. OK. Mela ejja jiġu lura hawn. Allura inti ser jiksbu xi familjarità mal- argumenti linja tal-kmand fuq dan partikolari problema stabbiliti. Issa, debugging. Allura inti probabilment diġà kellha tagħmel xi debugging mal preċedenti tiegħek problema stabbiliti. U wieħed mod faċli ħafna ta 'debugging, ewwel, ejja nħarsu lejn programm buggy. Well, mixi permezz dan il-programm, aħna qed tmur biex issaqsi lill-utent għal numru sħiħ, grab li integer, u mbagħad, arbitrarju, għandna loop filwaqt li huwa biss se decrement i sakemm ikun ugwali għal 10. Ejja biss wieħed jassumi jien jidħlu integer akbar minn 10. Allura decrement i sakemm ikun ugwali għal 10. U allura għandna loop ieħor filwaqt li li, filwaqt li i ma tkunx daqs 0, aħna qed se decrement i bi 3. Mela jekk tara l-intenzjoni tal-bug hawnhekk, huwa li dan ser decrement i li tkun ta '10, u allura dan loop filwaqt li se decrement i mill-10, 7, 4, għal 1, għal negattiv 2, għal negattiv 5, u l-bqija, għall-infinit negattiva, peress i se fatt qatt ma ugwali 0. U mbagħad fl-aħħar ta 'dan il-programm, aħna għandna l-funzjoni foo li huwa għaddej print out dak i. Allura dan huwa programm qasir u trivjali, u l-bug hija ovvja, speċjalment wara I biss qal dak li l-bug kien. Iżda l-intenzjoni hawnhekk hija, ukoll, dan jista ' attwalment look like xi tiegħek soluzzjonijiet minn greedy mill-aħħar problema stabbiliti, u forsi inti għandek xi loop infinita fil-programm tiegħek, u ma jkollokx idea x'hemm jikkawżaw. Allura teknika debugging utli ħafna huwa li żżid ftit printfs kollha fuq kodiċi tiegħek. So here I tixtieq printf barra ewwel loop waqt. U hawn irrid printf, u jien ser biss print i. I ser anki tagħmel l-ewwel filwaqt li loop, i. Barra, it-tieni waqt loop. Għal darb'oħra, jistampa ġewwa hawn, il-valur i. U ejja run dan. Debug slash hekk dot. Ikteb integer. Ejja nagħmlu 13. U boom. Naraw li aħna looping infinita ġewwa tat-tieni linja waqt. Allura issa nafu x'inhi l-bug huwa. Iżda debugging printf huwa perfettament kbira, imma ladarba programmi tiegħek jiksbu itwal u aktar ikkumplikati, hemm soluzzjonijiet aktar sofistikati għall- jkollna affarijiet tax-xogħol. Mela ejja jitneħħew dawn printfs kollha. U ejja jagħmlu ċert I ma break xejn. OK. Allura l-programm aħna qed tmur li tintroduċi tissejjaħ GDB, għall GNU Debugger. Well, attwalment, ejja tneħħi debug għall it-tieni, u jagħmlu debug darb'oħra. Well, attwalment ewwel, lezzjoni tajba fl-argumenti linja tal-kmand. Avviż li dan il-kmand Clang li hija kompilazzjoni kollox qed mgħoddija fil-linja tal-kmand, dawn argumenti linja tal-kmand. Allura eżattament kif inti se tkun qed tuża argumenti linja tal-kmand, kif aħna ma qabel, u kif inti ser fil PSET 2, li kif Clang qed jużawhom. Allura avviż li din l-ewwel bandiera, sing ggdb3, dak li kien qal huwa, Clang, inti għandhom jiġbru dan il-fajl bl- intenzjoni li aħna se eventwalment bżonn biex debug dan. Dan sakemm ikollok dak tal-bandiera, allura nistgħu debug GDB. U inneħħu tiftaħ il Debugger GNU. Allura hemm ħafna ta 'kmandi li għandek bżonn biex jidraw. L-ewwel waħda li inti probabilment immedjatament bżonn huwa Run. Allura x'inhu Run se jagħmlu? Huwa ser tibda programm tagħna. Allura run, programm tal-bidu, il-programm jitlob magħna għal integer, 13. U allura huwa looping infinita bħala mistennija, ħlief I jitneħħew l- printfs, hekk aħna ma anki tara li. Ħareġ normalment. Oh. Huwa possibbli li mgeżwra l- mod madwar, lura għall - jinjora dan. Assumi hija ma ħruġ normalment. Hemm tweġiba kkumplikata għal dan. Allura issa, li mhux utli ħafna. Hekk biss running programm tagħna ġewwa ta ' dan debugger ma tgħinna fi kwalunkwe mod, peress li aħna seta 'biss isir dot mmejla debug minn barra GDB. Allura l-kmand wieħed li Int ser ikollok probabbilment - u jien ser nieqaf dan. Kontroll d jew nieqaf, kemm ix-xogħol. Mela ejja tiftaħ it up again. Ieħor kmand li inti probabilment immedjatament jridu jidraw huwa Break. Allura aħna ser jiksru fuq ewlenija għal issa, u mbagħad I ser jispjegaw dan. Well, hawn naraw waqqafna breakpoint fuq din il-linja fil debug.c. Allura dak break ifisser huwa li meta I tip run, il-programm se tkompli taħdem sakemm I hit breakpoint. Allura meta I hit run, il-programm jibda, u mbagħad pawżi hekk kif jidħol l-funzjoni prinċipali. Break prinċipali se tkun xi ħaġa inti pretty komunement tagħmel. U issa, li jintroduċu inti għal xi kmandi aktar. Avviż hawnhekk, li huwa qal we kissru fil-linja 11, li hija printf, jidħol integer. Allura l-kmand jmiss se tkun kif immorru l-linja li jmiss tal-kodiċi. Dan se jippermettilna naslu biex pass permezz tal-linja programm tagħna b'linja. Allura li jmiss. Issa linja 12, aħna qed tmur biex jiksbu l-eqreb numru sħiħ. Next. U jekk inti biss hit Ikteb darb'oħra, dan ser jerġa 'jagħmel l-aħħar ħaġa li għamilt. So I m'għandhomx bżonn li tip jmiss kull darba. Allura jidħol integer, 13. Allura issa, linja 14, filwaqt i huwa akbar minn 10, u jien ser tagħmel li jmiss. U naraw aħna qed tmur biex decrement i. Allura aħna qed tmur biex decrement i ġdid. Allura issa, ieħor utli kmand Stampa. Allura Stampa se jistampa il-valur tal-varjabbli. Ejja jġibu l-valur ta 'varjabbli i. Ejja jistampaw i. Huwa ser ngħid i huwa 11. Issa aħna jmiss darb'oħra filwaqt li i huwa akbar minn 10. Hekk i għadu akbar minn 10, peress li huwa 11. i minus minus. Ejja jistampaw i ġdid. Kif kien mistenni, huwa 10. Allura issa, li jmiss. Huwa sejjer lura l-kundizzjoni, i huwa akbar minn 10, iżda i issa huwa 10, hekk mhuwiex aktar minn 10, hekk aħna nistennew li jaqgħu barra mill-linja waqt. U issa aħna qed hawn taħt dik il-linja tal-kodiċi. U l-iggwidar, ieħor Lista, huwa biss se li juri l-preċedenti u li jmiss koppja ta 'linji ta' kodiċi, b'mod każ li inti mitlufa yourself. Allura aħna biss ħareġ dan loop filwaqt li, u issa dħalna dan filwaqt li loop, linja 18. Għalhekk, filwaqt li i ma tkunx daqs 0. U, li jmiss, i huwa ugwali i minus 3, u aħna ser avviż, dan ser biss iżommu għaddejjin. U nistgħu jistampaw i. Kull kmand tip ta ikollu shortcuts. Allura p huwa qasir għall Stampa. Allura nistgħu i p. Just iżommu azjenda n, jew iżommu tagħmel jmiss. Stampa i darb'oħra. You see issa huwa negattiv 167. Allura dan se jmorru fuq għal dejjem, iżda mhux verament dejjem, peress li inti biss raw, huwa fil-fatt se jispiċċaw f'xi punt. Allura li hija Mibdi GDB. Imma ejja nagħmlu ħaġ'oħra fil GDB. Uh, debug. Għalhekk, f'dan il-każ partikolari, il- loop infinita ġara li jkun ġewwa ta ' il-funzjoni prinċipali. U għal issa, biss taċċetta li din jien ser jiċċaqalqu l loop infinita fis il-funzjoni foo. Just ftakar li, fit-tmiem ta 'dan programm, ukoll, dan kien oriġinarjament ssejjaħ foo, li kien biss morna għall-istampa i. Iżda issa aħna qed ssejjaħ foo, li hija se decrement i sakemm ikun 0, u imbagħad jistampaw dak il-varjabbli. OK. Ħlief dan. Għamla debug. U issa, debug GDB. OK. Mela jekk jien biss Mexxi allura jien mhux ser jkunu jistgħu attwalment pass permezz tiegħi program-line mill-linja. Mela ejja break fil prinċipali, u mbagħad it-tip run. Allura jmorru permezz ta 'dan, printf, jidħol integer, jiksbu l-eqreb numru sħiħ, 13. Allura aħna qed tmur biex iżommu decrementing sakemm i huwa akbar minn 10. Imbagħad aħna qed tmur biex jaqgħu permezz tal- filwaqt li loop, u biex tikseb l-linja - ejja tiftaħ it up fil-tieqa separata. Allura aħna decremented sakemm i ma kienx għadu akbar minn 10, u allura aħna imsejjaħ il-funzjoni, foo. Allura dak li ġara hekk kif I hit foo funzjoni, ukoll, I imsejħa foo, u imbagħad I ma kellhomx kontroll fuq GDB. Allura malli I hit jmiss fil-linja, affarijiet jitkomplew sakemm dan ġara, fejn il-programm ħareġ meta - jassumu ma kinux jeżistu eventwalment. Inti raw dan nieqaf għal ftit għalkemm. Allura għaliex ma I titlef kontroll fuq il-programm f'dak il-punt? Well, meta I tip li jmiss, li tmur lil il-linja litterali jmiss ta 'kodiċi li se tesegwixxi. Allura wara linja 21, il-linja li jmiss tal-kodiċi li għandha tesegwixxi hija linja 22, li huwa, joħorġu mill-mejn. So I ma jridux biss jmorru mal-linja li jmiss ta 'kodiċi. Irrid li jmorru fil-funzjoni, foo, u imbagħad pass wkoll permezz dawk il-linji ta 'kodiċi. Allura għal dan, għandna alternattiva. Ejja nieqaf li għal darb'oħra. Break prinċipali. Uh, 1, li jmiss, li jmiss, 13, jmiss, jmiss, li jmiss, b'attenzjoni, qabel we hit linja foo. OK. Allura issa, aħna qed fil-linja 21, fejn nitolbu foo. Aħna ma rridux li tip li jmiss, peress li se biss sejħa l-foo funzjoni, u mur l-linja li jmiss tal-kodiċi. Dak li trid tuża hija Pass. Allura hemm differenza bejn Step u Sussegwentement, fejn Pass passi fil- jiffunzjonaw, u Next tmur fuq il-funzjoni. Hija biss tesegwixxi l-intier ta ' l-funzjoni u jżomm għaddejjin. Allura Pass se jressaqna fil-funzjoni, foo. U naraw hawn, issa, aħna qed lura fuq dan loop filwaqt li l-, fit-teorija, se tkompli dejjem. U jekk inti hit Pass, meta lanqas hija funzjoni li jsejħu, allura huwa identika għal Next. Allura huwa biss meta int fuq linja li hija ssejjaħ funzjoni li Jiżdiedu se jvarjaw minn Next. Allura Step se jressaqna hawn. Pass, pass, pass, pass, pass, pass, u Aħna ser biss loop infinita dejjem. Allura inti tista 'tikseb użati biex li bħala tiegħek mod ta 'identifikazzjoni loops infinita, hija biss li żżomm din il Enter biex tara fejn ikollok staġnati. Hemm modi aħjar biex tagħmel dan, iżda għal issa, li huwa perfettament suffiċjenti. U stylistically, li jikkonformaw mad Style 50, I għandu għamlu dan. OK. Allura aħħar kmand wieħed li tintroduċi. Well, ejja GDB debug pulzieri Allura minflok tkissir fi prinċipali, jekk I jafu l-funzjoni foo huwa wkoll il- problema, imbagħad I jista 'jkollhom biss qal, break fil foo, minflok. Ejja ngħidu I break fi kemm prinċipali u foo. Allura inti tista 'tistabbilixxi kif ħafna breakpoints kif tixtieq. Meta tip I run, li għaddej biex tieqaf fil-- ooh, ejja recompile, peress I mibdula affarijiet. Int ser ikollok tara din il-linja, Twissija, sors fajl huwa aktar riċenti minn eżekutibbli. Allura dan ifisser li jien biss marru fil hawn u mibdula dawn biex jikkonformaw ma 'Style 50, imma jien ma recompile il-programm. So GDB jagħmel me konxji ta 'dak. I ser nieqaf, jagħmlu debug darb'oħra, hit debug GDB. OK. Allura issa, lura għal dak li kien isir. Break prinċipali, break foo. Issa jekk I run-programm, dan huwa se tkompli sakemm hits breakpoint. Li breakpoint jiġri li tkun l-ewwel waħda fl prinċipali. Issa, minflok tagħmel li jmiss, li jmiss, li jmiss, jmiss, li jmiss, sal I hit foo, I tista tip tkompli, li se jkompli sakemm inti hit l-breakpoint jmiss. I jkollhom jidħlu n-numru sħiħ l-ewwel. Kompli se tkompli sakemm I hit l- breakpoint li jmiss, li huwa li funzjoni ta 'foo. Allura Run se jimxu sakemm inti hit breakpoint, iżda inti biss tip run meta int tibda l-programm, u mbagħad, Minn hemm, huwa jkompli. Jekk I biss ma break prinċipali u imbagħad dam, dan ser jinkiser fi prinċipali, u mbagħad kompli. Peress li jien ma jkollhom punt tal-qasma fil foo, jidħlu fil-numru sħiħ, allura issa jien mhux se break fil-foo. Huwa biss se infinita loop sakemm dik. OK. Allura dak Intro li GDB. Għandek tibda tuża din f'settijiet problematiċi tiegħek. Hija tista 'tkun ferm utli biex jidentifikaw bugs. Jekk inti fil-fatt biss, linja b'linja minn, jmorru permezz kodiċi tiegħek, u jqabblu dak li huwa verament jiġri ma 'dak li inti tistenna li jiġri, allura huwa pjuttost diffiċli li jitilfu bugs tiegħek. OK. Allura aħħar ġimgħa David aġġornati dan Jittieħed kriptografija sigriet ewlieni għall- ewwel darba, fejn ma rridux passwords biss jiġu maħżuna fuq tagħna kompjuter f'xi fajl test sempliċi, fejn xi ħadd jista 'jiġi maż u biss jiftħuh u jaqrahom. Idealment, huma jkunu encrypted b'xi mod. U fil Problem Set 2, inti ser tkun jittrattaw ma 'metodu wieħed ta' encryption, jew, ukoll, żewġ metodi, iżda mhumiex daqshekk kbira. Jekk inti tagħmel l-Hacker edizzjoni, int wkoll se jkunu jittrattaw decrypting xi affarijiet. Allura l-kwistjoni issa hija, ukoll, anke jekk aħna għandna l-encryption aktar b'saħħithom algoritmu fid-dinja, jekk inti tagħżel password partikolarment dgħajfa, allura mhux se jgħinek ħafna, billi n-nies xorta se tkun tista 'figura hija out. Anki jekk tara l-sekwenza encrypted u jidher qisu mess ta 'żibel dan ifisser xejn għalihom, jekk dawn xorta biss bżonn biex tipprova ftit passwords figura hija out, allura inti mhumiex sikura ħafna. Allura jaraw a video li jagħmel il-punt. [VIDEO Daqq] -Elmu, inti fiend. X'qed jiġri? X'Ser tagħmel biex bint tiegħi? -Permess me jintroduċu l-brillanti kirurgu tal-plastik żgħażagħ, Dr Phillip Schlotkin, l-akbar imnieħer bniedem impjiegi fil-kollu univers, u Beverly Hills. -Your Altezza. -Imnieħer impjieg? Ma nifhimx. Hi diġà kellha impjieg imnieħer. Kienet ħelu sittax preżenti. No. Mhuwiex X'taħseb. Huwa ħafna, ħafna agħar. Jekk inti ma jagħtux me-kombinazzjoni li l-ilqugħ arja, Dr Schlotkin se tagħti tifla tiegħek lura imnieħer tagħha qodma. No. Fejn ma ikollok dan? -Id-dritt. I ser jgħidlek. I ser jgħidlek. Le, daddy. Le, inti ma trid. -You're dritt, għeżież tiegħi. I ser titlef imnieħer ġdida tiegħek. Imma jien mhux se tgħidlu-kombinazzjoni, x'ikun. -Tajjeb ħafna. Dr Schlotkin, jagħmlu agħar tiegħek. My divertiment. [Għodda li tkun qiegħda inċiżiv] No. Stenna. Stenna. I ser jgħidlek. I ser jgħidlek. -I kien jaf ikun xogħol. Kull dritt. Agħti lili. -Il-kombinazzjoni hija waħda. -One. -One. -Tnejn. -Tnejn. -Tnejn. -Tliet. -Tliet. -Tliet. -Erba. -Erba. -Erba. Five. Five. Five. -Allura l-kombinazzjoni tkun waħda, tnejn, tlieta, erba ', ħames. Dik hija l-kombinazzjoni stupidest I qatt semgħu fil-ħajja tiegħi. Dik hija l-tip ta 'ħaġa idjota jkollha fuq bagalji tiegħu. -Grazzi, Altezza tiegħek. -X'għamilt? -I daru off-ħajt. No inti ma. You mitfija l-film kollu. -I irid ikun ippressat-buttuna ħażin. Well, erġa 'poġġih fuq. Poġġi l-movie lura fuq. -Iva, sir. Iva, sir. -Ejja ħa mmorru, Arnold. Come, Gretchen. Of course, inti taf I taf xorta jkollhom inti kont għal dan. [Video daqq END] ROB BODEN: Kull dritt. Allura issa li aħna diġà qed jitkellem dwar sigurtà f'ċerti modi, sbieħ ftit poster movie, hekk fl-aħħar jiem, dawn il-kwistjonijiet mal-NSA monitoraġġ kollox. Jista 'jkun diffiċli li jħossu bħal inti jkollhom xi tip ta 'privatezza fis- dinja online, għalkemm I ma setax jgħid inti ħafna mill-dettalji ta 'priżma. Allura superazzjoni PRISM, aħna qed mhux se li jkun jitkellem dwar dan, issa jaħsbu dwar laptop tiegħek. Allura up hawn, nixtieq li jaqilbu kont attwali tiegħi, bil pingwin ftit tiegħi. So I ikollhom sett password, u li password huwa kwalunkwe I tixtieq li jkun. Imma ftakar li dak li jien qtugħ ma ', għalhekk dan login pront, hija xi program. Huwa xi programm li kien miktub minn xi persuna. U għalhekk, dik il-persuna, jekk huma partikolarment malizzjużi, dawn jistgħu qalu, id-dritt, hekk jekk l-password I jidħlu hija ugwali għal tiegħi password attwali, jew huwa ugwali għal xi password speċjali - David huwa tal-biża jew xi ħaġa - imbagħad ħallihom pulzieri Allura programmer malizzjuż jista 'jkollu aċċess għall kollha tal MACs tiegħek, jew Windows, jew xejn. Allura li mhuwiex ħafna ta 'tħassib, peress li, I mean, dan huwa program login li konsenjat bil OS X, mijiet jew eluf ta 'nies ikollhom rivedut dan il-kodiċi. U hekk, jekk, fil-kodiċi tiegħek x'imkien, inti jgħidu jekk dan string ugwali ugwali David huwa tal-biża, login, allura xi ħadd huwa se jkun, bħal, stenna. Dan mhuwiex dritt. Dan m'għandux ikun hawnhekk. Allura dak mod wieħed nikbru affarijiet li jkun it-tip ta 'sigur. Imma naħseb dwar anki programmi li tikteb. Ejja ngħidu li inti kiteb il-programm login. Allura dan il-programm login li inti kiteb, hekk ovvjament, inti tajba programmer. Int mhux se jagħmlu l-ebda malizzjużi jekk x ugwali ugwali David huwa tal-biża fil-kodiċi tiegħek. Iżda dan il-programm, liema do you jużaw biex jikkompilaw dan il-programm? Xi ħaġa simili Clang. Allura dak li jekk il-persuna li ġara jiktbu Clang speċjali b'għata fil Clang xi ħaġa simili, jekk jiena kompilazzjoni tal- login programm, allura jidħol dan il-kodiċi fil-programm login li tgħid, jekk x ugwali ugwali David huwa tal-biża? Allura ma pjuttost s'issa, iżda aħna għandna l-istess toħroġ hawn, fejn Clang, ukoll, eluf, jekk mhux għexieren ta 'eluf ta' nies, ħarsu lejn Clang, għandhom ħares lejn linji tiegħu ta 'kodiċi u qal, id-dritt, hemm xejn ħażin hawn. Ovvjament, l-ebda waħda qed tagħmel xejn dan malizzjużi. Imma dak li hu Clang innifsu, bħal, jekk dak I jikkompilaw Clang? X'jiġri jekk I għandhom xi kompilatur li jikkompila Clang li introduċa fid Clang dan Hack speċjali li jgħid, id-dritt, meta I jikkompilaw Clang, allura l- eżekutibbli niġi għandu apposta tfittex ġewwa tal-programm login u daħħal dan password, ugwali ugwali Dave huwa tal-biża? Mela ftakar li kompilatur tiegħek innifsu jeħtieġ li jiġi kkompilat f'xi punt. Hekk jekk dak li inti tagħżel li tiġbor Clang ma ', fih innifsu huwa malizzjużi, allura inti jistgħu jiġu invitat kollox mod il-linja. Allura hawnhekk, għandna Ken Thompson u Dennis Ritchie. Allura dan huwa ritratt emblematika. Dennis Ritchie huwa fuq il-lemin. Huwa importanti - pretty ħafna kiteb C. Allura inti tista ' nirringrazzja lilu għal din il-klassi. Ken Thomson fuq ix-xellug. L-tnejn minnhom bażikament kiteb UNIX. Ukoll, dawn kienu kontributuri ewlenin fil UNIX. Kien hemm xi oħrajn. Allura Ken Thompson, f'xi punt, jirbaħ il-Premju Turing. U l-għoti Turing, stajt dejjem jinstemgħu it referenza B'dan il-mod, huwa l- Premju Nobel tax-xjenza tal-kompjuter. Allura fil-Premju Turing, huwa għandu jagħti diskors aċċettazzjoni tiegħu. U huwa jagħti dan id-diskors famużi ħafna issa, imsejħa Riflessjonijiet dwar Fidu Trust, li aħna marbutin 'biex fuq il-websajt kors. U f'dan diskors, huwa jgħid, id-dritt, so I kiteb UNIX, u issa kollha inti nies qed jużaw UNIX. Issa, ftakar llum li Linux huwa dixxendent dirett ta 'UNIX. OS X juża direttament UNIX. Windows ma tant, iżda ħafna ta 'ideat kienu meħuda mill UNIX. Hekk hu tmur sa l-istadju u jgħid, id-dritt, I kiteb UNIX. U biss sabiex inti guys taf, jien kapaċi log fis-kull wieħed biss ta 'kompjuters tiegħek. Peress I jitqiegħdu waħda minn dawn speċjali jekk x ugwali ugwali Ken Thomson huwa tal-biża, allura jien permessi li login. Sabiex in-nies huma simili, ukoll, how'd inti tagħmel dan? Ħarisna lejn il-programm login u xejn hemm. He simili, ukoll, I modifikata l-kumpilatur log fil-programm login sabiex il-programm login issa se jkollhom li x ugwali ugwali Ken Thompson huwa tal-biża. U jgħidu, ukoll, li mhux veru. Aħna qed tħares lejn il-kompilatur, u l- kompilatur ma jkollhom l-ebda linji ta ' kodiċi bħal dik. He simili, OK, imma dak li huma inti kompilazzjoni tal-kompilatur ma? U jaħsbu, u hu, bħal, ukoll, Jien il-wieħed li ħadt l-kumpilatur inti qed tuża biex jikkompilaw l-kompilatur, hekk inti kumpilazzjoni kompilatur, li nnifisha hija malizzjuż, u se jiksru l-programm login. Allura bażikament, f'dak il-punt, hemm ebda mod inti tista 'tħares lejn is-sors kodiċi tal-programm login biex tara dak li hu ħażin. Inti ma tista 'saħansitra tfittex fil- kodiċi sors tal-kompilatur biex tara dak li hu ħażin. Għandek bżonn biex tħares lejn il-magna kodiċi, il-binarju attwali tal- kompilatur kkompilata biex tara, stenna, dawn linji ta 'kodiċi m'għandux ikun hawn. Imma Ken Thompson ħa pass wieħed ulterjuri u qal, ukoll, hemm dawn il-programmi speċjali li attwalment tgħinek taqra l-binarju ta 'programmi, u hekk jekk xi ħadd użat dak il-programm għall- aqra l-binarju, kienu jaraw dawn linji ta 'kodiċi. Huwa modifikati dawk il-programmi li jgħidu, kollha dritt, jekk inti qed tfittex fil- kompilatur, ma jurux din partikolari sett ta 'binarja. Mela allura għandek bżonn tieħu li pass ulterjuri u bażikament, li jistgħu jkollhom livelli multipli meħuda ta 'indirection, u f'xi punt, l-ebda wieħed fil-fatt ser jiġi verifikat. Allura l-morali ta 'l-istorja hija, int mhux se jkun miktub Clang f'din il-klassi. Inti se tkun qed tuża tixbit Clang ħafna f'din il-klassi. Għal kull taf, Clang huwa malizzjuż programm li huwa sabotaging kull programm uniku inti stajt qatt ikkumpilata. U li tħallik fuq dik ominous ħafna jinnota, ara inti nhar l-Erbgħa. [Applause] SPEAKER 2: Fl-CS50 jmiss. SPEAKER 3: M'għandekx inti DARE ngħid li. Tista 'tagħmel dan. Inti ghamilt dan qabel, inti tista 'tagħmel dan illum, inti tista 'tagħmel dan għada. Inti kont qed tagħmel dan għal snin. Just go up hemm u jagħmlu dan. Tista 'tagħmel dan. [Daqq tal-mużika]