[Muzikavimo] ROB Boden: Gerai. Taigi, pirmas dalykas, pirma, video nuo pažįstamas veidas. [VIDEO PLAYBACK] -Viskas gerai. Tai CS50, ir tai yra Savaitės trijų pradžia. Atsiprašau aš negalėjau ten su jumis šiandien, bet leiskite man pristatyti CS50 savo Rob Boden. [PABAIGA VIDEO PLAYBACK] [Plojimai ir Cheers] ROB Boden: į filmografija kad vaizdo įrašas yra fantastinis. Gerai. Taigi, pirmiausia, yra ir kitas pietūs. Tai rytoj 01:15. Yra be pietų šį penktadienį. Būtent Quora. Tommy nėra čia dar, bet vienas iš žmonės ten yra buvęs CF, Tommy McWilliam. Taigi jis įdomus vaikinas. Jūs turėtumėte ateiti. Gerai. Taigi, praeitą savaitę, mes pradėjome nesilaikantiems išskyrus apie tai, kas seka tikrai yra. Mes žinoma nuo pat pradžių, kad tai simbolių seka. Tačiau praėjusią savaitę, mes delved į tai, kad tai, kas yra tikrai seka ženklai, gerai, dabar mes turime matricos simbolių. Ir mes žinome, kad seka, tai masyvas simbolių, pačioje pabaigoje, mes turime šį specialų null baitas, tai Backslash 0, tai rodo pabaigą eilutę. Ir taip eilutė yra masyvas ženklai, bet mes galime turėti daugiau nei tiesiog simbolių masyvas, mes galime turėti, bet matrica tipo dalykas norime. Taigi, jei jūs prisimenate iš praeitą savaitę, Amžių programa, kad Dovydas pristatė tikrai greitai. Taigi pirmas dalykas, kurį mes ketiname padaryti, tai prasyti vartotojo sveikojo skaičiaus, žmonių skaičius kambaryje. Kai mes turime, kad sveikasis skaičius, mes skelbiantis masyvą. Atkreipkite Šis laikiklis sintaksė. Jūs ketinate priprasti prie to. Taigi mes skelbiantis sveikųjų skaičių masyvas vadinamas amžiaus, ir yra n sveikieji skaičiai šiame masyve. Taigi šis modelis čia, tai 4 int I lygus 0, i mažiau nei n, i plius plius, kad taip pat bus modelis kad jums labai naudojamas. Kadangi tai gana daug, kaip jūs visada bus pakartoti per masyvus. Taigi nepamirškite, kad n yra ilgis mūsų masyvo. Ir taip čia mes vėl ir vėl kreipiasi dėl asmens i kambaryje amžiaus. Po to, mes einame žemyn, ir dėl kokių nors savavališkai priežastis, mes tada spausdinti kaip senas jie ketina būti metų nuo dabar. Ir veikia tą programą, tegul kad amžiaus, dot velniop amžių. Taigi žmonių skaičius kambaryje, tarkim yra trys. Ir pasakyti, pirmasis asmuo yra 13, šalia yra 26, o paskutinis yra 30. Taigi jis bus pakartoti per šių trijų žmonės, išspausdinti 14, 27 ir 31. Taigi nepamirškite, kad kai mes deklaruoti masyvas dydžio n, toje indeksai matrica, masyvas turi vertybes ir indeksai 0, 1, 2, visi būdas iki n atėmus 1. Taigi, kai mes pasakėme buvo trys žmonės į kambarį, ir mes įdėti čia pirmas iteracijos per šį kilpa, man bus 0. Taigi 0 indeksą. Mes paskiriant pirmą kartą amžiaus vartotojas įveda. Tada kito, mes įvesti Antrasis n vartotojas įveda ir šalia dviejų, paskutinio n. Taigi pastebėti, kad dydžio masyvas trys neturi nieko indekse trijų. Tai negalioja. Gerai. Taigi, grįžta čia. Taigi dabar, kad mes spręsti matricas, mes turime šiek tiek pažįsta. Dabar mes ketiname pereiti į komandą eilutės argumentai, kurie bus gana svarbūs šios problemos rinkinį. Taigi iki šiol, kiekvieną kartą, kai jūs paskelbė savo pagrindinę funkciją, mes sakė int main negaliojančiu. Taigi klaidinga tiesiog reiškia, kad mes ne artimųjų bet argumentai šia funkcija. Dabar mes ketiname pamatyti, kad dažniausiai gali imtis tam tikrų argumentų. Čia mes vadiname juos int argc ir styginių argv skliausteliuose. Skliausteliuose, dar kartą, nurodant kad mes susiduriame su matricomis. Taigi čia, styginių argv skliausteliuose, mes Dirbant su stygų masyvo. Taigi argc, kad ketina nurodyti kiek argumentai mes perduodama šią programą. Ir pamatyti, ką tai reiškia, tegul uždaryti tai. Gerai. Taigi iki šiol, mes paleisti kiekvieną programa, kaip dot slash amžiaus. Mes taip pat gali, komandinės eilutės, praeities perduoti argumentus, taigi terminas, komanda eilutės argumentai. Taigi pirmasis argumentas, hello world. Taigi čia argc būtų trys. Tai iš argumentų skaičius į komandų eilutę. Argc visada yra mažiausiai 1, nes taškas velniop amžiaus, pati skaičiuoja kaip vieną iš komandinės eilutės argumentai. Tada Apie tai pirmą kartą. Jei dot velniop amžius yra nulinis, tada Apie tai pirmasis ir pasaulis antra komandinės eilutės argumentas. Taigi styginių argv, mes ketiname pamatyti, yra stygos, dot velniop amžiaus, labas, ir pasaulis. Ir Dovydo prašymu, mes ketiname Norėdami paleisti vaizdo įrašą, nustatantį, kad. [VIDEO PLAYBACK] -Iki šiol programose mes parašyta, mes deklaruoti Pagrindinis kaip int main negaliojančiu. Ir visą šį laiką, kad tuštuma yra paprasčiausiai nurodant, kad programoje neatsižvelgiama bet komandų eilutės argumentai. Kitaip tariant, kai vartotojas atidaro programa, jis ar ji gali suteikti komandą eilutės argumentai pagal raštu papildomai žodžiai ar frazės, po programos tikslų pavadinimas eilutėje. Na, jei jūs norite, kad jūsų programos į imtis komandinės eilutės argumentus, vieną ar daugiau tokių žodžių, mums reikia pakeisti negalioja su argumentais pora. Taigi galime daryti. Įtraukti CS50.h. Įtraukti standartinę io.h. Int main. Ir dabar, o ne tuščia, aš ruošiuosi nurodyti int vadinamas argc ir masyvo eilučių, vadinamų argv. Dabar argc ir argv yra tiesiog konvencijas. Galėjome vadinamas šie argumentai Patys nieko mes norime. Tačiau svarbu tai, kad argc yra int, nes, remiantis apibrėžimu, yra ketina pateikiama argumentų skaičius, žodžių skaičius, iš viso, kad vartotojas įvedėte į jo ar jos eilutę. argv, tuo tarpu, argumentas vektorius yra vyksta iš tikrųjų būti masyvas saugoti visus žodžius, kad vartotojas turi įvestas į jo ar jos eilutę. Leiskite pradėti daryti kažką dabar su vienu ar daugiau iš šių komandų eilutės argumentai. Visų pirma, eikime į priekį ir spausdinti kokia žodis vartotojas įveda Po programos pavadinimas eilutėje. Atidaryti laikiklis. Uždaryti laikiklis. Printf proc ai Backslash ir kablelis. Ir dabar man reikia pasakyti printf kas vertė prijungti į tą rezervuotą vietą. Noriu pirmąjį žodį, vartotojas turi įvestas po programos pavadinimu, ir todėl aš ruošiuosi nurodyti argv laikiklis 1, arti skliaustelis, kabliataškis. Dabar, kodėl laikiklis 1, o ne 0 laikiklis? Na, it turns out, automatiškai saugomi į argv 0 bus Programos tikrasis vardas. Taigi, pirmas žodis, kad vartotojas įveda Po programos vardas pagal konvencija, bus saugomi argv 1. Leiskite dabar kaupti ir paleisti šią programą. Padaryti argv 0, taškas velniop argv 0. Ir dabar žodis kaip labas. Įveskite. Ir mes jį, labas. [PABAIGA VIDEO PLAYBACK] ROB Boden: Gerai. Uždarykite kad. Taigi, atsižvelgiant į šios programos atrodo, kad mes ką tik pristatė mums gerai, tik rodyti, jei mes spausdinti argv 0, kad dabar kas tai yra, argv 0, taškas velniop argv 0. Taigi, kaip ir tikėtasi, tai spausdinti Programos pavadinimas, nes argv 0 yra visada bus Programos pavadinimas. Tačiau galime padaryti kažką šiek tiek įdomesnis. Taigi, problemų rinkinį, jūs būsite įvesta į šią funkciją, atoi. Taigi, ką mes naudojame atoi už? Kad ketina paversti eilutė iki sveikojo skaičiaus. Taigi, jei aš perkelti eilutę, vienas du trys, į atoi, kad bus konvertuoti, kad į sveikojo skaičiaus, vienas du trys. Taigi, mes ketiname paversti pirmas komandinės eilutės argumentas iki sveikojo skaičiaus, ir tada tiesiog atspausdinti, kad sveikasis skaičius. Taigi, iš esmės, mes rūšies reimplementing getint, tiesiog sveikasis skaičius įrašytas į komandą linija, o ne programoje interaktyviai. Taigi, todėl argv 0, darykime tai čia ir uždaryti, kad. Taigi veikia argv 0, ir tegul įvesti sveikasis skaičius, vienas du trys keturi vienas du. Taigi jis bus atspausdinti sveikasis skaičius, vieną du trys keturi vienas du. Yra keletas subtilybių iki atoi kad jis bus nebesijaudinti apie viską už galiojantį skaitmeniniai ženklai, bet tai nesvarbu. Taigi, ką jūs manote atsitinka jei galiu tai padaryti? Segmentavimas kaltės. Taigi, kodėl tai, kad? Jei pažvelgti atgal į mūsų programą, mes konvertuoti argv 1, pirmasis argumentas po programos pavadinimu, iki sveikojo skaičiaus. Tačiau nėra argumentas praėjo po programos pavadinimu. Taigi čia matome, kad tai yra Buggy programa, nes, jei mes stengiamės jį paleisti be jokių argumentų, jis tiesiog sustos. Taigi, dar vienas bendras modelis pamatysite yra kažkas panašaus, jei argc mažiau kaip du, nurodantis, kad nebuvo bent programos pavadinimas ir Pirmasis argumentas, tada mes kažką daryti kaip printf, nepakanka komandų eilutės argumentai. Tai turbūt nėra gera spausdinti, tai turbūt kažkas, pavyzdžiui, reikia įvesti sveikuosius į komandų eilutę. Aš tiesiog galų jį ten. Ir tada vėl 1. Taigi nepamirškite, kad mūsų pabaigos programa, jei mes grįžtame 0, kad rūšiuoti rodo sėkmę. Ir pagrindinis automatiškai grąžina 0, jei ne. Taigi čia mes Pakartotinė 1 rodo kad tai nėra sėkmė. Ir jūs galite grįžti, ką norite, tiesiog, "0" rodo sėkmę, ir kas nors kitas rodo gedimą. Taigi, galime paleisti šį dalykų versiją. Taigi dabar, jei mes neturime įvesti komandinę eilutę argumentas, kad bus teisingai pasakyti mums, o ne pakankamai komandinės eilutės. Nebaigė sakinio. Kitur, jei mes iš tikrųjų perduoti jį vieną, jis gali baigti programą. Taigi tai, kaip norite naudoti argc į siekiant patvirtinti, kad numeris komandinės eilutės argumentai, kad faktiškai pasinaudos. Taigi galime padaryti šią programą tiek daugiau sudėtinga, ir pažvelgti į sekundę pasikartojančių dalykų. Taigi dabar mes ne tik spauda Pirmasis komandų eilutės argumentas. Čia mes Iteracja iš int i lygių 0, i mažiau nei argc, aš plius plius ir spausdinimas argv indeksas i. Taigi šis modelis, vėlgi, tai yra tas pats modelis, kaip ir anksčiau, išskyrus vietoje skambinama kintamąjį n, mes naudojame argc. Taigi tai yra iteravimu per kiekvieną indeksą masyve, ir spausdinant kiekvieną elementas tame masyve. Ir todėl, kai mes paleisti šią programą, taip pat, Aš ne įvesti bet kokią komandinę eilutę argumentai, todėl tik nuotraukas programos pavadinimas. Jei aš įvesti dalykų krūva, jis bus spausdinti vieną, kiekviena savo linija. Gerai. Taigi paimkime vieną žingsnį toliau. Ir vietoj spausdinti kiekvieną argumentą savo linijos, galime atspausdinti kiekvienas pobūdis kiekvieno argumento atskiroje eilutėje. Taigi nepamirškite, kad argv yra Stygų masyvas. Taigi, kas yra eilutė, bet simbolių masyvas? Taigi, tai reiškia, kad argv tikrai masyvas yra simbolių masyvo. Taigi pasinaudoti, kad tegul ignoruoti tai dabar. Leiskite tiesiog laikyti styginių argv 0. Taigi, jei norime, kad kiekvieną simbolį argv 0 atskiroje eilutėje, tada aš noriu daryti modelį mes įpratę, i mažiau nei masyvo ilgis, kuri čia yra strlen iš, tai ne tai, ką noriu daryti, styginių ai Lygu argv 0. Taigi man yra mažesnis nei mūsų ilgio masyvas, kuris šiuo atveju yra masyvas simbolių, aš plus plus. Ir taip, kaip matėme praeitą savaitę, tai idealus jei mes einame, kad strlen ne su sąlyga, nes n bus pridėti iš s strlen kiekvieną kartą, mes einame per kilpą, ir tai nebus pakeisti. Taigi, mes jį lygų n per čia. Gerai. Taigi dabar mes iteravimu per kiekvienas masyvo indeksas. Ir taip, jei norime atspausdinti kiekvienas simbolis toje masyvo, proc c yra vėliava mes norite naudoti simbolių. Ir dabar laikiklis i bus styginių indeksas simbolis aš, todėl, jei eilutė buvo labas. tada s 0 bus h, s laikiklis 1 bus E, ir taip toliau. Taigi, dabar mes norime sujungti šie du dalykai. Mes norime spausdinti kiekvieną simbolį Kiekvieno komandinės eilutės argumentas. Taigi, mes ketiname turėti įdėtos už kilpos. Ir tradiciškai, pirmas skaitiklis yra i kita bus j, n bus argv i strlen, aš yra mažesnis nei n, i plius plius. O dabar vietoj spausdinimo argv i, todėl argv laikiklis aš ketina indeksas - tai bus i-asis komandinės eilutės argumentas, argv i, j ketina būti jth pobūdis i-asis argumentas. Aš atsikratyti tai čia dabar nes mes įdėti ją į tą kilpą. Taigi yra lygiavertis string s lygių argv aš, tada ai laikiklis j. Na, mums nereikia deklaruoti Šis kintamasis ai. Vietoj to, mes tiesiog sujungti juos du į tai, ką mes turėjome, argv i, j. GARSIAKALBIS 1 [nesigirdi]. ROB Boden: Geras skambutis. Taigi tai yra sulaužyta. Jei aš iš tikrųjų bėgo, mes supratau tai. Taigi skaitiklis man rūpi šioje ypač kilpa yra j, iteratorius. Taigi, jums reikės paleisti į klausimus, tikriausiai begalinis ciklas, jei mes nebuvo nustatyta, kad. Štai kodėl mes taip pat kalbame apie derinimo šiandien. Gerai. Taigi, galime paleisti šią programą. Ir tegul faktiškai pridėti atskirą printf čia, kad bus tiesiog atspausdinti kita linija, nes tai reiškia, kai mes paleisti programą, ten bus tuščias linija tarp kiekvieno charakterio kiekvienas komandinės eilutės argumentas. Na, mes pamatyti, ką tai reiškia. OOP. Turite šiek tiek klaidų. Klaida netiesiogiai skelbiantis bibliotekos funkcija strlen. Taigi grįžtame į mūsų programą, aš Pamiršau maišos yra string.h. Taigi string.h bus header failas, kuris pareiškia, funkcija strlen. Gerai, tai kaupia. Dabar galime paleisti jį. Taigi, tiesiog, kad. Ji ketina išspausdinti mūsų programos pavadinimas, hello world. Tai ketinate spausdinti kiekvieną daiktą, kiekvienas pobūdis, atskiroje eilutėje. Gerai. Tad faktiškai pasinaudoti šia dar vieną žingsnį. Ir vietoj naudojant string.h, galime galvoti apie tai, kaip mes norime įgyvendinti mūsų pačių strlen funkcija. Taigi aš iš karto duoti funkcija parašas. Taigi leiskite paskambinti my_strlen, ir tai ketina imtis eilutę kaip argumentą, ir mes tikimės, kad grįžtumėte ilgis tos eilutės. Taigi, kur yra tas vaikinas? Taip. Gerai. Taigi nepamirškite nuo ankstesnės skaidrės, kad taip pat buvo iš praeitą savaitę, kad masyvas simbolių, gerai, virvutė, todėl galime pasakyti, kad tai mūsų styginių ai. Taigi, jei s eilutę, labas, tada, H-E L-L-O, atminties, kad ketina būti, ir tai backslash 0 simbolis. Taigi, kaip mes gauti s ilgis? Na, triukas ieško tai backlash 0 charakterį, šis null terminatorius. Taigi algoritmas Ar ketinate būti kažkas panašaus į keletą pakankamai ženklų, kad - galime turėti tai ranka sudaro apie skaitiklis, tegul vadina int ilgis. Taigi, nuo čia, mes ketina pakartoti per savo eilutę. Taigi pirmasis simbolis, tai yra H, ir tai ne atgal velniop 0, todėl ilgis yra 1. Kartoti iki kito simbolio, E, ir tai ne backslash 0. Ilgis yra 2. L, 3. L, 4. O 5. Ir pagaliau, mes pasiekiame Atgal nerijos velniop 0, ir kad priemonė, gerai, Ši eilutė yra daugiau. Taigi galime grįžti 5. Taigi iš tikrųjų įgyvendinti, kad, pirma, mano n ilgis lygus 0, mano dešinioji ranka. Ir mes ketiname pakartoti - GARSIAKALBIS 1 [nesigirdi] ROB Boden: Oi, šaudyti. Geras skambutis. Bumas. Taigi n ilgis lygus 0. Taigi, dabar, o s ilgis ne lygūs ir tada, Backslash 0. Taigi atminkite, tai Atgal nerijos velniop 0, tai tikrasis charakteris, o tai rodo, stringo pabaigos. Tiesiog patinka, taip pat Backslash n yra tikrasis simbolis. Backslash 0 ketina nurodyti Mūsų eilutės pabaigos. Aš nenoriu daryti, kad. Ir nors ai indeksuojami ilgis nėra lygi null terminatorius, tada mes tik ketina prieaugio ilgį. Taigi, ne mūsų programos pabaigoje ilgis galiausiai ketina būti 5 ir šiuo atveju. Ir mes tiesiog grįžti ilgio. Gerai. Taigi dabar žemyn čia, aš ne padaryti my_strlen. Tegul kaupia jį įsitikinkite, viskas veikia sklandžiai. Aš darau iš 2? Ar tai buvo 1? Tai turėtų daryti. Gerai. Taigi tai yra argv 2. Veikia kaip tikėtasi, nors buvo, kad aš vienas jį padarė? Taip. Gerai. Tai ko versija neturėjo printf nauja linija po to, bet ji nėra jokio skirtumo. Gerai. Taigi dirbo taip, kaip tikėtasi. Dabar mes galime sujungti vieną žingsnį Be to, kai pranešimas čia gerai, pirma, mes greiferiniai argv strlen aš, tada mes iteravimu per kiekvienas simbolis toje eilutėje. Taigi, užuot, kad kas būtų, jei mes tiesiog sujungti šį laukimo logika kol mes hit backslash 0 teisę į šią kilpą? Taigi pakartoti o argv i, j daro nėra lygūs Backslash 0. Taigi, galime paleisti ją pirma. Gerai. Taigi, čia ši sąlyga sako - tegul jau aišku, kad. Taigi, dabar, tegul tai bus mūsų argv. Taigi, kai aš tik bėgo tą programą anksčiau, argv yra eilučių masyvo. Ir taip, jei aš jį dot slash argv 2, hello world, tada argv pati ilgis 3, už argv nulis, labas, ir pasaulis. Ir viduje kiekvienoje iš šių rodiklių yra pati matrica, jei tai bus taškų, tai bus velniop, aš nežinau jei tai buvo teisinga kryptimi, aš nemanau, kad tai buvo. -R-V brūkšnys, reikia daugiau vietos. Leiskite supjaustyti šiame masyve. -R-V brūkšnys 0, tada Backslash 0. Ir tada netvarkingas bus labas. Tarkime, H-E Atgal nerijos velniop 0. Ir, pagaliau, W-O Backslash 0. Taigi, algoritmas, kad mes tiesiog parašė, įdėtos už kilpos, ką jie darote, yra, mes pirmiausia turi kovoti su i ir tada j. Tai būtų lengviau su kodo ekranas, grįžkime į tai. Gerai. Taigi pastebime, kad i iteratorius tai iteravimu per kiekvieną komandą linija argumentas. Ir j yra iteratorius Iteracja virš kiekvieno, kad charakterio komandinės eilutės argumentas. Taigi, kas tai slapčiausias printf daro yra, mes printf argv 0 0 printf argv 0 1 printf argv 0 2 0 3 0 4 0 5, 0 6, bet dabar, argv 0 7 vyksta lygūs Backslash 0. Taigi mes išeiti, kad kilpos, ir dabar aš kartoja, kad 1. Ir dabar mes ketiname spausdinti argv 1 0, argv 1 1 - gerai, dabar, nes aš iškirpti Apie Trumpai tariant, argv 1 2 vėl bus Backslash 0. Ir taip, prieaugio i ir toliau, o taip toliau, kol mes spausdinti visus pasaulyje, ir tie trys komandinės eilutės argumentai ir mes išeiti iš atokiausiuose kilpa, ir užbaigti mūsų programą. Gerai. Taigi galime grįžti čia. Taigi gausite tam tikrą pažinimas komandinės eilutės argumentai tai pirma problema nustatyti. Dabar, derinimo. Taigi, jūs tikriausiai jau teko daryti kai su savo ankstesnių klaidų taisymas problema nustatyti. Ir dar vienas labai paprastas būdas derinimo, pirmiausia, galime pažvelgti Buggy programą. Na, vaikščioti per šią programą, mes ketiname prašyti už vartotoją sveikasis skaičius, patraukti, kad sveikasis skaičius, o tada savavališkai, mes turime while cikle, kad yra tik ketina Mažėja aš kol jis lygus 10. Leiskite tiesiog manyti, aš patekti sveikasis skaičius didesnis nei 10. Taigi Mažėja aš kol jis lygus 10. Ir tada mes turime kitą, o kilpos kad, nors aš ne 0, mes ketina Mažėja i iki 3. Taigi, jei matote, kad klaidų tyčia čia tai, kad tai bus Mažėja I būti 10, o tada tai, o kilpa valia Mažėja i iš 10, 7, 4, iki 1, neigiamos 2, su neigiamais 5, ir tt, neigiamos begalybės, nes aš niekada iš tikrųjų yra lygūs 0. Ir tada šios programos pabaigoje mes turime foo funkciją, kuri būtų vyksta spausdinti, kad aš. Taigi tai yra trumpas ir nereikšmingas programa, ir klaida yra akivaizdi, ypač po to, kai aš tiesiog sakė, kas klaida buvo. Bet tikslas čia yra gerai, tai gali iš tikrųjų atrodo kaip kai kurie iš jūsų sprendimai iš gobšus nuo paskutinės problema nustatyti, o gal ir jūs turite kai begalinis ciklas jūsų programoje, ir jūs neturite idėjos kas jį sukelia. Taigi labai naudinga derinti technika yra tiesiog pridėti printfs visame kodą. Taigi čia aš noriu printf ne Pirmasis while cikle. Ir čia noriu printf, ir aš tiesiog atspausdinti i. Aš net padaryti pirmiausia, o kilpa, i. Už antrą, o kilpos. Dar kartą spausdinti viduje čia, vertė man. Ir tegul eina tai. Taigi taškas velniop derinti. Įveskite sveikąjį skaičių. Darom 13. Ir bumas. Mes matome, kad esame begalinė apsisukimo viduje antros while cikle. Taigi, dabar mes žinome, kas yra klaida. Bet printf derinimo puikiai puikiai, bet kai jūsų programos gauti ilgesnis ir sudėtingesnis, yra tobulesni sprendimai gauti viskas veikia. Taigi galime pašalinti visus šiuos printfs. Ir tegul įsitikinkite, aš ne pertrauka nieko. Gerai. Taigi, programa mes ketiname pristatyti vadinamas GDB, GNU Debugger. Na, iš tikrųjų, galime pašalinti debug už antra, ir padaryti perprogramuoti iš naujo. Na, iš tikrųjų, pirma, gera pamoka komandinės eilutės argumentai. Atkreipkite dėmesį, kad tai Zaszczękać komanda, kuri yra Sudarant viskas yra perduodama į komandų eilutę, tai komandų eilutės argumentai. Taigi, kaip tiksliai jūs ketinate naudoti komandinės eilutės argumentai, kaip mes ir anksčiau, ir kaip jums per PSET 2, tai kaip Zaszczękać naudoja juos. Taigi pastebime, kad ši pirmoji vėliava, brūkšnys ggdb3, kas tai sakoma, žvangėti, jums turėtų parengti šį failą tikslas, kad mes galų gale reikia derinti jį. Taigi, kaip ilgai, kaip jūs turite, kad vėliava, tada mes galime GDB perprogramuoti. Ir jis bus atverti GNU Debugger. Taigi yra komandų daug kad jums reikia priprasti. Pirmasis, kad jums tikriausiai nedelsiant reikia paleisti. Taigi, kas yra paleisti ketinate daryti? Jis ketina pradėti savo programą. Taigi paleisti, pradedant programą, programą prašo mus sveikasis skaičius, 13. Ir tada atėjo begalinė apsisukimo kaip Tikimasi, išskyrus aš pašalinti printfs, todėl nereikia net matyti. Paprastai išėjo. Oh. Gali būti, kad ji suvynioti visi atvirkščiai, atgal - ignoruoja tai. Tarkime, jis neturėjo išeiti normaliai. Yra sudėtinga atsakyti, kad. Taigi dabar, kad tai nėra labai naudinga. Taigi tiesiog veikia mūsų programą viduje tai Debugger nepadeda mums bet būdas, nes mes galėjome tiesiog padaryti dot slash debug iš išorės GDB. Taigi, viena komanda, jums tikriausiai - ir aš mesti tai. Kontrolė-d arba mesti rūkyti, tiek darbo. Taigi galime pradėti jį vėl. Kita komanda, kad jums tikriausiai iš karto nori priprasti yra pertrauka. Taigi mes pertraukos pagrindinis dabar, ir tada aš paaiškinti, kad. Na, čia mes matome, mes nustatyti atskaitos tašką Šiuo linija debug.c. Taigi, kas pertrauka reiškia, kad, kai aš įveskite paleisti, programa ketina toliau veikia tol, kol I hit atskaitos tašką. Taigi, kai aš paspauskite paleisti, programa prasideda, ir tada ji sugenda, kai ji patenka į pagrindinę funkciją. Break pagrindinis bus kažkas jūs gana paprastai padaryti. Ir dabar, kad jums pristatyti iki šiek tiek daugiau komandų. Atkreipkime dėmesį, kad jis sako, kad mums sumušė eilutėje 11, kuris yra printf, įveskite sveikasis skaičius. Taigi komanda Toliau bus, kaip mes einame į kitą eilutę kodo. Tai va, kad galėtume dėti per mūsų programos eilutė po eilutės. Taigi kitą. Dabar linija 12, mes ketiname gauti sveikąjį skaičių. Kitas. Ir jei jūs tiesiog paspauskite "Enter" dar kartą, jis bus perdaryti paskutinis dalykas, kurį padarė. Taigi man nereikia rašyti sekantis kiekvieną kartą. Taigi, įveskite sveikasis skaičius, 13. Taigi dabar, linija 14, o aš yra didesnis nei 10, ir aš daryti toliau. Ir mes matome, mes ketiname Mažėja i. Taigi, mes ketiname Mažėja i naujo. Taigi dabar, dar viena naudinga komanda Print. Taigi Spausdinti ketina spausdinti kintamojo vertė. Tegul atneš naudos kintamojo i. Leiskite spausdinti i. Jis sakys i 11. Dabar mes vėl kartu Kitas i yra didesnis nei 10. Taigi, aš vis dar didesnis nei 10, nes jis 11. i minus minus. Leiskite spausdinti i naujo. Kaip ir tikėtasi, jis 10. Taigi dabar, šalia. Jis grįžta su sąlyga, i didesnis nei 10, bet aš dabar 10, todėl tai ne didesnis nei 10, todėl mes tikimės, jis gali nukristi iš while cikle. Ir dabar mes žemiau eilutės kodo. Ir kita komanda, sąrašas, yra tik ketina rodyti Ankstesnių ir ateinančių pora eilučių kodo, visų atveju jūs praradote save. Taigi mes tiesiog išėjo šį while cikle, ir dabar mes turime įtraukti šį o linijos, linijos 18. Taigi, o aš ne 0. Ir šalia, aš Lygu i minus 3, o mes pastebėti, tai bus tiesiog nesustoti. Ir mes galime atspausdinti i. Kiekviena komanda tarsi turi nuorodas. Taigi p yra trumpas Spausdinti. Taigi, mes galime p i. Tiesiog išlaikyti ūkį n, arba nuolat daryti Pirmyn. Spausdinti aš vėl. Jūs matote dabar atėjo neigiamas 167. Taigi, tai bus amžinai, bet ne tikrai amžinai, nes jūs tik pamačiau, kad tikrai bus baigti tam tikru momentu. Taigi, kad pradeda GDB. Tačiau galime padaryti dar vieną dalyką GDB. Uh, derinti. Taigi, šiuo konkrečiu atveju, begalinis ciklas atsitiko viduje Pagrindinė funkcija. Ir dabar, tiesiog pripažinti, kad, kad aš ketina perkelti begalinį ciklą į foo funkcija. Tiesiog neužmirškite, kad prie šio tikslo programa, taip pat, tai buvo iš pradžių skambina foo, kuris buvo tiesiog ketinate spausdinti i. Bet dabar mes skambina foo, kuris yra ketina Mažėja i iki tai 0 ir tada spausdinti šį kintamąjį. Gerai. Išskyrus tai, kad. Padaryti perprogramuoti. Ir dabar, gdb derinti. Gerai. Taigi, jei aš tiesiog paleisti tada aš nesiruošia galėtų iš tikrųjų žingsnis per mano Programa linija po linijos. Taigi galime išeiti ne pagrindinis, ir tada įveskite paleisti. Taigi pereiti per tai, printf, įveskite sveikasis skaičius, gauti sveikąjį skaičių, 13. Taigi, mes ketiname išlaikyti decrementing kol i yra didesnis nei 10. Tada mes ketiname patenka per o linijos ir gauti linijos - tegul ją atidaryti atskirame lange. Taigi mes decremented kol aš nebe didesnis nei 10, ir tada mes vadinama funkcijos, rūšys. Taigi, kas atsitiko, kai aš paspauskite funkcija foo, gerai, aš pašaukiau foo ir tada aš nebeturėjo kontroliuoti GDB. Taigi, kai aš paspauskite Next šioje eilutėje, viskas tęsėsi iki tai atsitiko, kur programa išėjo, kai - manyti, jis neegzistavo ilgainiui. Tu matei tai pristabdyti šiek tiek nors. Tad kodėl aš prarasiu kontrolę tuo momentu programa? Na, kai aš tipo kitą, kad eina į pažodinis kitą eilutę kodo, kad bus įvykdyti. Taigi, po linija 21, kitą eilutę kodo kad bus įvykdyti yra linija, 22, kuris, išeinant iš pagrindinių. Taigi aš nenoriu tiesiog eiti į kitą eilutę kodo. Noriu eiti į funkciją, foo, ir tada taip pat žingsnis per tie kodo eilučių. Taigi, kad mes turime alternatyvą. Leiskite mesti, kad dar kartą. Break pagrindinis. Uh, 1, kitą, kitą, 13, kitą, kitą, kitą, atidžiai, Prieš mes hit linija foo. Gerai. Taigi dabar mes eilutėje 21, kur mes vadiname foo. Mes nenorime įvesti kitą, nes tai tiesiog paskambinti funkcija foo ir pereiti į kitą eilutę kodo. Ką mes norime naudoti, yra žingsnis. Taigi, čia yra tarp Step skirtumas ir to, kur žingsnis žingsnius į veikti, ir Kitas eina per funkcija. Jis tiesiog vykdo į visumą funkcija ir išlaiko vyksta. Taigi veiksmas vyksta atnešti mums į funkciją, rūšys. Čia mes matome dabar, mes atgal tai, o kilpa tai, teoriškai, ketina tęstis amžinai. Ir jei paspausite žingsnis, kai ji net funkcija skambinti, tada tai identiškas Next. Taigi, tai tik tada, kai esate ne linija, kuri skambina funkciją Tai žingsnis ketina skirtis nuo kitų. Taigi žingsnis atneš mums čia. Žingsnis, žingsnis, žingsnis, žingsnis, žingsnis, žingsnis, ir mes tiesiog begalinis ciklas amžinai. Taigi galite priprasti, kaip jūsų būdas nustatyti begalinis kilpos, yra tiesiog palaikius klavišą Enter pamatyti, kur jūs įstrigti. Yra geresnių būdų, kaip tai padaryti, bet dabar, kad yra visiškai pakankamas. Ir stilistiškai, kad atitiktų Stilius 50, aš tai padariau. Gerai. Taigi paskutinis komanda pristatyti. Na, tegul GDB debug in Taigi vietoj to, nesilaikantiems ne pagrindinė, jei aš žinoti foo funkcija taip pat problema, tada aš gali turėti tik sakė, pertrauka ne foo vietoj. Tarkime, aš pertraukos metu tiek pagrindinis ir rūšys. Taigi galite nustatyti kaip daug ribines vertes, kaip norite. Kai aš tipo paleisti, jis ketina sustoti - Ooh, tegul perkompiliuoti, nes Aš pasikeitė dalykų. Jūs pamatysite šią eilutę, įspėjimo šaltinį failas yra naujesnis negu vykdomąjį. Taigi, tai reiškia, kad aš tiesiog atėjo čia ir pakeisti juos atitinka Stilius 50, bet aš ne perkompiliuoti programa. Taigi GDB leidžia man žinoti. Aš mesti, kad perprogramuoti iš naujo, hit gdb perprogramuoti. Gerai. Taigi dabar, atgal į, ką aš darau. Break Main, pertrauka foo. Dabar, jei aš paleisti programą, todėl ketina tęsti iki hitai atskaitos tašką. Kad atskaitos tašką atsitinka būti pirmasis ne pagrindinis. Dabar, užuot toliau, toliau, toliau, kitą, kitą, kol aš paspauskite foo, aš galite įvesti ir toliau, o toliau kol paspausite kitą atskaitos tašką. Turiu įvesti sveikuosius pirmas. Toliau bus tęsiamas tol, kol aš paspauskite kitą atskaitos tašką, kuris yra tai, kad funkcija foo. Taigi Vykdyti veiks iki paspausite atskaitos tašką, bet jūs tik įvesti paleisti kai jums pradedant programą, o tada nuo tada, tai tęsti. Jei aš tiesiog padariau pertrauka pagrindinis ir tada vyko, tai bus pertrauka ne Pagrindinis ir tęskite. Kadangi aš neturiu pertraukos tašką foo, įveskite sveikasis skaičius, tai dabar aš nesiruošia išeiti į foo. Tai tiesiog vyksta begalinis kilpa, kol tas. Gerai. Štai Miesto GDB. Jūs turėtumėte pradėti jį naudoti Jūsų problemines rinkinių. Jis gali būti labai naudinga nustatyti klaidas. Jei jūs iš tikrųjų tiesiog eilutė po eilutės, eikite per savo kodą, ir palyginti tai, kas iš tikrųjų vyksta su tuo, ką jūs tikėtis taip atsitiktų, tai gana sunku praleisti savo klaidas. Gerai. Taigi, praėjusią savaitę Davidas išvedė tai paslaptis rakto kriptografija stuff Pirmą kartą, kai mes nenorime slaptažodžius tiesiog laikyti ant mūsų kompiuteris kai paprastojo teksto failą, kur kas nors gali atvažiuoti ir tiesiog atidarykite jį ir juos skaityti. Idealiu atveju, jie būtų šifruojamas tam tikru būdu. Ir problemą, 2, jums reikia spręsti su vienu metodu šifravimo, ar gerai, du metodai, tačiau jie yra ne toks didelis. Jei hacker leidimas, esate Taip pat bus sprendžiami su iškodavimo kai kuriuos dalykus. Taigi, klausimas dabar yra gerai, net jei mes turime stipriausią šifravimas algoritmas pasaulyje, jei pasirinksite ypač prastas slaptažodį, tada jis nebus jums padėti, labai daug, nes žmonės vis dar galės suprasti jį. Net jei matyti užšifruotą eilutę ir jis atrodo kaip šiukšlių netvarka tai reiškia, kad nieko jiems, jei jie vis tik reikia išbandyti keletą slaptažodžių figure it out, tada jūs nėra labai saugus. Taigi, žiūrėti vaizdo įrašą, daro tą tašką. [VIDEO PLAYBACK] -Šalmas, jūs fanatikas. Kas vyksta? Ką tu darai, kad mano dukra? -Leiskite man pristatyti lakuotais jauna plastikos chirurgas Dr Phillip Schlotkin, didžiausias nosis darbo žmogus visam visatos, ir Beverly Hills. -Jūsų Didenybe. -Nosis darbas? Nesuprantu. Ji jau turėjo nosies darbą. Tai buvo saldus šešiolika metu. -Ne. Tai ne tai, ką jūs manote. Tai daug, daug blogiau. Jei nenorite duoti man derinys oro skydas, Dr Schlotkin bus duoti savo dukterį atgal savo seną nosį. -Ne. Kur tu jį gavai? -Viskas gerai. Pasakysiu. Pasakysiu. Ne, tėtis. Ne, neturi. -Tu teisus, my dear. Aš praleisti savo naują nosį. Bet aš negali pasakyti jam derinys, nesvarbu koks. -Labai gerai. Dr Schlotkin, padaryti jūsų blogiausias. -Nėr už ką. [ĮRANKIAI JUOS Sharpened] -Ne. Palaukti. Palaukti. Pasakysiu. Pasakysiu. -Žinojau, kad dirbtų. Gerai. Duok jį man. -Derinys yra vienas. -Viena. -Viena. -Du. -Du. -Du. -Trys. -Trys. -Trys. Keturių. Keturių. Keturių. Penki. Penki. Penki. -Taigi, derinys yra vienas, du, trys, keturi, penki. Štai stupidest derinys Aš kada nors girdėjau savo gyvenime. Štai koks dalykas idiotas turės savo bagažo. -Ačiū, Jūsų Didenybe. -Ką tu padarei? I ¹ jungtas sienos. -Ne tu ne. Jūs išjungėte visą filmą. -Turiu paspaudėte klaidingą mygtuką. -Na, padėkite jį atgal. Įdėti filmą atgal. -Taip, pone. Taip, sere. -Eime, Arnoldas. Ateik, Gretchen. Žinoma, jūs žinote, aš vis dar galėsite turi sąskaitą jums už tai. [PABAIGA VIDEO PLAYBACK] ROB Boden: Gerai. Taigi dabar, kad mes jau kalbame apie saugumo tam tikrais būdais, gražus mažai filmo plakatas, todėl neseniai dienų, šie klausimai su NSI stebėti viską. Jis gali būti sunku jaustis kaip jūs turėti tam tikrą privatumo rūšiuoti Virtualiame pasaulyje, nors aš negalėjau pasakyti jūs dauguma PRISM detales. Taigi peržengiant PRISM, mes neketiname kalbėti apie, kad dabar galvoti apie savo kompiuterį. Taigi čia, aš noriu pereiti mano tikrojo sąskaitos mano mažai pingvinas. Taigi turiu slaptažodžių rinkinį, ir kad slaptažodis ką noriu, kad ji būtų. Bet atsiminkite, kad tai, ką aš prisijungti su, todėl tai prisijungti greitai, tai kai programa. Tai kai programa, kuri buvo parašė tikru asmeniu. Ir taip, kad asmuo, jei jie yra ypač kenksminga, jie galėtų jau sakiau, viskas gerai, todėl, jei slaptažodis kad turėčiau įvesti lygi mano Tikrasis slaptažodį, arba tai lygūs tam tikru specialiu slaptažodžiu - Dovydas yra nuostabus ar kažkas - tada tegul juos in Taigi kenksminga programuotojas galėtų turėti prieiga prie visų jūsų Mac arba Langai, arba nieko. Taigi tai nėra daug susirūpinimą, nes, Aš turiu galvoje, tai yra prisijungimo programa tai išsiunčiamas su OS X, šimtus ar tūkstančiai žmonių peržiūri šį kodą. Ir taip, jei jūsų kode kažkur, jūs pasakyti, ar šios eilutės lygu lygu Dovydas yra nuostabus, prisijungimo duomenys, tada kažkas yra bus, kaip, palauk. Tai nėra teisinga. Tai neturėtų būti čia. Štai vienas būdas, kuriuo mes gauti dalykų būti natūra saugus. Bet pagalvokite apie net programas kad rašote. Tarkime, jūs rašė prisijungimo programą. Taigi šis prisijungimas programa, kad jūs rašė, taigi akivaizdu, kad esate geras programuotojas. Jūs nesate ketinate daryti bet kenksminga jei x lygu lygu Dovydas yra nuostabus į savo kodą. Tačiau ši programa, ką jūs naudoti kaupti šią programą? Kažkas panašaus žvangėjimas. Taigi ką daryti, jei asmuo, kuris atsitiko rašyti Zaszczękać ypatinga Bruņās Zaszczękać kažkas panašaus, jei aš sudarant prisijungti programą, tada įveskite šį kodą į prisijungimo programa, kuri sako, jei X reiškia lygu Dovydas yra nuostabus? Taigi, dar visai, bet mes turime tą patį išleisti čia, kur žvangėjimas, gerai, tūkstančiai, jei ne dešimtys tūkstančių žmonės, pažvelgė Zaszczękać, turi pažvelgė į savo eilučių kodo ir sakė, viskas gerai, nieko bloga čia. Akivaizdu, kad ne vienas yra kas tai kenksminga. Bet kas yra Zaszczękać pati, kaip, ką daryti, jei aš surinkti Zaszczękać? Ką daryti, jei kai kompiliatorių, kad kaupia Zaszczękać įterpia į Zaszczękać ši speciali Hack, kad sako, viskas gerai, kai aš sudaryti žvangėjimas, tada vykdomąjį Man reikia specialiai ieškoti viduje prisijungimo programos ir įterpti šį slaptažodį lygu lygu Dave yra nuostabus? Taigi nepamirškite, kad pati savo kompiliatorius turi būti renkami tam tikru momentu. Taigi, jei kas norite sudaryti Zaszczękać su, pati yra kenksminga, tada jūs gali būti prisukamas visą kelią žemyn linija. Taigi čia mes turime Ken Thompson Dennis Ritchie. Taigi tai yra Portretų nuotrauka. Dennis Ritchie yra dešinėje. Jis yra svarbus - gana daug rašė C. Taigi, jūs galite padėkoti jam už šioje klasėje. Ken Thomson kairėje. Du iš jų iš esmės rašė UNIX. Na, jie buvo pagrindiniai veiksniai, UNIX. Buvo keletas kitų. Taigi, Ken Thompson, tam tikru momentu, jis laimi Turingo apdovanojimą. Ir Tiuringo apdovanojimas, Aš visada girdėjau tai nuorodos, tokiu būdu, tai Nobelio premijos kompiuterių mokslo. Taigi tuo Turingo apdovanojimą, jis turi duoti jo priėmimo kalboje. Jis suteikia šiam labai žymiojoje kalboje dabar vadinamas Apmąstymai apie Pasitikėjimas Pasitikėjimas, kurį mes sieja On kurso tinklalapyje. Ir šioje kalboje jis sako, viskas gerai, todėl parašiau UNIX, o dabar visi jūs žmonės naudoja UNIX. Dabar, šiandien prisimenu, kad Linux yra tiesioginis palikuonis UNIX. OS X "tiesiogiai naudoja UNIX. "Windows" nėra tiek daug, bet daug idėjų paimtos iš UNIX. Taigi jis pakyla į sceną ir sako: viskas gerai, aš parašiau UNIX. Ir tik todėl, vaikinai žinau, aš tikiu, gali prisijungti prie kiekvieno vieną kartą savo kompiuteriuose. Kadangi aš įdėti vieną iš šių specialių jei x Lygu lygu Ken Thomson yra nuostabus, tada man bus leista prisijungti. Taigi žmonės yra kaip gerai, kaip tu tapai tai padaryti? Mes pažvelgė prisijungimo programos ir nieko ten. Jis kaip gerai, aš kartą sudarytojas prisijungti prisijungimo programos kad prisijungimo programa dabar turės kad X reiškia Lygu Ken Thompson yra awesome. Ir jie sako, gerai, kad tai ne tiesa. Mes ieškome ne kompiliatorius, ir kompiliatorius neturi jokių linijų kodas panašaus. Jis kaip, gerai, bet tai, ką tu Sudarant kompiliatorių? Ir jie galvoja, ir jis, kaip gerai, Aš tas, kuris davė jums kompiliatorius jūs naudojate sudaryti sudarytojas, todėl jūs rinkti kompiliatorių, kad pati yra kenksminga, ir bus pertrauka prisijungimo programą. Taigi, iš esmės, tuo momentu, ten jokiu būdu jūs galite pažvelgti į šaltinio kodas prisijungimo programos pamatyti, kas yra negerai. Jūs negalėjo net pažvelgti į kodą iš kompiliatoriaus pamatyti, kas yra negerai. Jums reikės pažvelgti į mašiną kodas, faktinis dvejetainis parengė kompiliatorius pamatyti, palauk, tai eilučių kodo neturėtų būti čia. Bet Kenas Thompsonas paėmė dar vieną žingsnį toliau ir sako, gerai, kad yra šios specialios programos, kad iš tikrųjų padėti jums skaityti programų dvejetainis, todėl jei kas nors naudojo tą programą skaityti dvejetainiai, jie būtų matyti jų eilučių kodo. Jis pakeistas šias programas pasakyti, visi Gerai, jei jūs ieškote sudarytojas, nerodo tai ypač rinkinys binary. Taip, tada jums reikia imtis, kad žingsnis toliau ir, iš esmės, kad gali turėti kurių buvo imtasi daug lygių Netiesiogiai, ir tam tikru momentu, niekas iš tikrųjų bus patikrinti. Taigi istorijos moralas yra, jūs nesiruošia būti raštu Zaszczękać šioje klasėje. Jūs ketinate naudoti laipioti Zaszczękać daug šioje klasėje. Dėl visų žinote, Zaszczękać yra kenksminga programa, kuri yra sabotažas kas viena programa jūs kada nors surinkti. Ir palikti jus, kad labai blogas dėmesį, kad mato jus trečiadienis. [Plojimai] SPEAKER 2: Kitame CS50. SPEAKER 3: Ar ne jūs išdrįstų pasakyti, kad. Jūs galite tai padaryti. Jūs tai padarė anksčiau, jūs galite tai padaryti, šiandien, jūs galite tai padaryti rytoj. Jūs buvote daro tai už metus. Tiesiog eiti ten ir tai padaryti. Jūs galite tai padaryti. [Muzikavimo]