1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [Predvaja glasba] 3 00:00:11,210 --> 00:00:12,100 >> ROB BODEN: V redu. 4 00:00:12,100 --> 00:00:15,620 Torej, prva stvar, prvič, video od znanega obraza. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [Predvajanje videa] 7 00:00:22,560 --> 00:00:23,370 >> -V redu. 8 00:00:23,370 --> 00:00:27,150 To je CS50, in to začetek tritedenskega. 9 00:00:27,150 --> 00:00:29,980 Žal mi je, ne morem biti z vami danes, vendar mi dovolite, da se predstavim 10 00:00:29,980 --> 00:00:32,880 CS50 lastne Rob Boden. 11 00:00:32,880 --> 00:00:33,872 >> [END Predvajanje videa] 12 00:00:33,872 --> 00:00:39,340 >> [Aplauza in CHEERS] 13 00:00:39,340 --> 00:00:41,277 >> ROB BODEN: filmografija v da video je fantastičen. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Vse je v redu. 16 00:00:47,770 --> 00:00:50,960 Torej, najprej pa obstaja še en kosilo. 17 00:00:50,960 --> 00:00:52,330 To je jutri ob 1:15. 18 00:00:52,330 --> 00:00:54,480 Ni kosilo v petek. 19 00:00:54,480 --> 00:00:55,810 To je z Quora. 20 00:00:55,810 --> 00:01:00,190 Tommy ni tukaj še, ampak eden od ljudje tam je nekdanji CF glavo, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Torej je zabaven fant. 23 00:01:02,730 --> 00:01:04,819 Moral bi priti. 24 00:01:04,819 --> 00:01:05,900 >> Vse je v redu. 25 00:01:05,900 --> 00:01:11,360 Torej, prejšnji teden smo začeli razbiti kaj niz je res. 26 00:01:11,360 --> 00:01:14,830 Poznala sva se že od začetka, da je zaporedje znakov. 27 00:01:14,830 --> 00:01:18,130 Toda prejšnji teden smo posegel v resnici da je tisto, kar v resnici zaporedje 28 00:01:18,130 --> 00:01:22,110 znaki, no, sedaj imamo nizi znakov. 29 00:01:22,110 --> 00:01:26,450 In vemo, da je niz, je niz znakov, na samem koncu, 30 00:01:26,450 --> 00:01:30,920 imamo to posebno null bajt, to backslash 0, ki označuje konec 31 00:01:30,920 --> 00:01:32,230 niz. 32 00:01:32,230 --> 00:01:36,970 >> In tako niz je niz znaki, vendar smo lahko več kot 33 00:01:36,970 --> 00:01:39,530 le niz znakov, imamo lahko niz kateremkoli 34 00:01:39,530 --> 00:01:40,890 vrsta stvari želimo. 35 00:01:40,890 --> 00:01:51,570 Torej, če se spomnite iz prejšnjega tedna, Vek program, David uvedla 36 00:01:51,570 --> 00:01:53,560 res hitro. 37 00:01:53,560 --> 00:01:57,010 Torej prva stvar, ki jo boš naredil, je od uporabnika zahteva za celo število, 38 00:01:57,010 --> 00:01:58,800 število oseb v sobi. 39 00:01:58,800 --> 00:02:01,260 Ko smo to celo, smo razglasitvi niz. 40 00:02:01,260 --> 00:02:02,890 Opazili ta nosilec sintakso. 41 00:02:02,890 --> 00:02:04,540 Boš navaditi na to. 42 00:02:04,540 --> 00:02:09,430 >> Torej smo razglasitvi niz števil imenovano starosti, in tam so n 43 00:02:09,430 --> 00:02:12,080 cela števila v tej matriki. 44 00:02:12,080 --> 00:02:16,480 Torej ta vzorec tukaj, ta 4 int i je enak 0, I, nižje od n, i plus 45 00:02:16,480 --> 00:02:20,580 plus, da je tudi, da bo vzorec da boste dobili zelo navajeni. 46 00:02:20,580 --> 00:02:24,000 Ker to je precej, kako ste Vedno gre za ponovitev nad nizi. 47 00:02:24,000 --> 00:02:26,330 Torej, ne pozabite, da je n Dolžina naše matrike. 48 00:02:26,330 --> 00:02:32,120 In tako sem, smo se večkrat sprašuje, na starost človeka, ki ga v prostoru. 49 00:02:32,120 --> 00:02:36,640 >> Po tem, gremo dol, in ne glede na samovoljno razlog, potem smo 50 00:02:36,640 --> 00:02:40,220 izpisal koliko je star gredo da bo leto dni. 51 00:02:40,220 --> 00:02:49,980 In teče ta program, dajva da starost, dot Slash starosti. 52 00:02:49,980 --> 00:02:53,010 Tako število ljudi v prostoru, recimo, da obstajajo tri. 53 00:02:53,010 --> 00:02:59,880 In pravijo, prva oseba, ki je 13, Naslednja je 26, in nazadnje je 30. 54 00:02:59,880 --> 00:03:05,080 Torej bo to ponovitev čez tiste tri ljudje, natisnite 14, 27, in 31. 55 00:03:05,080 --> 00:03:16,060 >> Torej, ne pozabite, da ko izjavljamo matrika velikosti n, indeksi v navedenem 56 00:03:16,060 --> 00:03:19,950 matrika, matrika ima vrednote in indeksi 0, 1, 2, vse 57 00:03:19,950 --> 00:03:21,680 do n minus 1. 58 00:03:21,680 --> 00:03:26,255 Torej, ko smo rekli, da so bili trije ljudje v sobi, in mi dal notri 59 00:03:26,255 --> 00:03:29,850 Prva ponovitev skozi to zanke, i se bo 0. 60 00:03:29,850 --> 00:03:31,650 Torej, v indeksu 0.. 61 00:03:31,650 --> 00:03:34,540 Mi smo dodeljevanje prvi S staranjem uporabnik vnese. 62 00:03:34,540 --> 00:03:38,870 Nato pa v naslednjem, smo vstopajo Drugi n uporabnik vnese, in 63 00:03:38,870 --> 00:03:40,580 poleg dveh, zadnji n. 64 00:03:40,580 --> 00:03:44,200 >> Tako opazili, da matrika velikosti tri nima ničesar 65 00:03:44,200 --> 00:03:46,040 v indeksu tri. 66 00:03:46,040 --> 00:03:49,036 To ni veljavna. 67 00:03:49,036 --> 00:03:50,250 Vse je v redu. 68 00:03:50,250 --> 00:03:55,136 Torej, grem nazaj. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Torej sedaj, ko smo se ukvarjali z nizi, imamo nekaj poznam. 71 00:04:01,590 --> 00:04:03,780 Zdaj bomo prešli na ukaz Argumenti line, ki se bodo 72 00:04:03,780 --> 00:04:05,890 zelo pomembno, da ta problem nizu. 73 00:04:05,890 --> 00:04:09,670 >> Torej, do sedaj, kadar koli ste razglasila svojo glavno funkcijo, ki smo jih 74 00:04:09,670 --> 00:04:11,230 je dejal int main neveljavne. 75 00:04:11,230 --> 00:04:14,070 Zato nična samo pomeni, da ne bomo mimo koli 76 00:04:14,070 --> 00:04:16,440 Argumenti za to funkcijo. 77 00:04:16,440 --> 00:04:19,190 Zdaj bomo videli, da je glavna lahko traja nekaj argumentov. 78 00:04:19,190 --> 00:04:22,470 Tu jim pravimo int argc in niza argv nosilci. 79 00:04:22,470 --> 00:04:26,930 Polnila, še enkrat, kar pomeni, da imamo opravka z nizi. 80 00:04:26,930 --> 00:04:31,850 Torej, tukaj, niz argv nosilci, smo , ki se ukvarjajo z vrsto nizov. 81 00:04:31,850 --> 00:04:35,360 Torej argc, da se dogaja, da se navede koliko argumenti ki smo jih 82 00:04:35,360 --> 00:04:37,580 opravili s tem programom. 83 00:04:37,580 --> 00:04:46,050 In videti, kaj to pomeni, dajmo zapreti to. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Torej, do sedaj smo teči vsak Program kot pika poševnicama starosti. 86 00:04:50,790 --> 00:04:55,250 Mi lahko tudi v ukazni vrstici, mimo mimo argumente, torej izraz, ukaz 87 00:04:55,250 --> 00:04:56,550 Argumenti linijo. 88 00:04:56,550 --> 00:04:59,760 Torej prva trditev, zdravo svet. 89 00:04:59,760 --> 00:05:03,350 Torej, tukaj bi argc trije. 90 00:05:03,350 --> 00:05:07,720 To je število argumentov v ukazni vrstici. 91 00:05:07,720 --> 00:05:12,840 Argc je vedno vsaj 1, saj pika slash starosti, sama, šteje kot ena od 92 00:05:12,840 --> 00:05:14,490 argumenti v ukazni vrstici. 93 00:05:14,490 --> 00:05:17,010 >> Potem zdravo je prvi. 94 00:05:17,010 --> 00:05:20,460 Če dot poševnica starosti je Ničti, nato Zdravo je prvi, in svet je 95 00:05:20,460 --> 00:05:22,830 Drugi argument ukazne vrstice. 96 00:05:22,830 --> 00:05:29,490 Torej niz argv, smo videli, vsebuje nize, pika poševnica 97 00:05:29,490 --> 00:05:33,830 starosti, zdravo in svet. 98 00:05:33,830 --> 00:05:38,945 In z zahtevo Davida, greva predvajati video posnetek, ki uvaja. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [Predvajanje videa] 101 00:05:43,890 --> 00:05:46,240 >> -Do sedaj v programih, ki smo jih napisal, da smo razglasi 102 00:05:46,240 --> 00:05:48,500 Glavni kot int main neveljavne. 103 00:05:48,500 --> 00:05:51,170 In ves ta čas, da je nična enostavno se navede, da 104 00:05:51,170 --> 00:05:54,430 Program ne odgovarja za kakršnokoli Argumenti linija poveljevanja. 105 00:05:54,430 --> 00:05:57,750 Z drugimi besedami, ko uporabnik zažene Program, on ali ona lahko zagotovi ukaz 106 00:05:57,750 --> 00:06:01,710 Argumenti vrstice s pisanjem dodatna besede ali besedne zveze po programu je 107 00:06:01,710 --> 00:06:03,000 ime na poziv. 108 00:06:03,000 --> 00:06:06,550 >> No, če ne želite, da vaš program na sprejme argumente ukazni vrstici, eno ali 109 00:06:06,550 --> 00:06:10,540 več takih besed, smo morali zamenjati izničijo z nekaj argumentov. 110 00:06:10,540 --> 00:06:12,200 Torej, kaj je to. 111 00:06:12,200 --> 00:06:15,750 Vključi CS50.h. 112 00:06:15,750 --> 00:06:19,360 Vključujejo standardno io.h. 113 00:06:19,360 --> 00:06:20,760 Int main. 114 00:06:20,760 --> 00:06:26,330 In zdaj, namesto neveljavne, bom Določite int imenovano argc, in 115 00:06:26,330 --> 00:06:28,780 Array strun imenovanih argv. 116 00:06:28,780 --> 00:06:31,820 Zdaj, argc in argv so preprosto konvencij. 117 00:06:31,820 --> 00:06:34,000 >> Lahko bi poklical te trditve Najbolj karkoli hočemo. 118 00:06:34,000 --> 00:06:37,630 Toda, kaj je pomembno je, da je argc int saj po definiciji, je 119 00:06:37,630 --> 00:06:41,360 dogaja, da vsebuje štetje argument, število besed skupaj, da 120 00:06:41,360 --> 00:06:43,380 Uporabnik je tipkal na njegovo ali njeno poziv. 121 00:06:43,380 --> 00:06:47,910 argv, medtem, argument vektor, je bo dejansko niz shranjevanje 122 00:06:47,910 --> 00:06:52,020 vse besede, ki jih ima uporabnik tipkal na njegovo ali njeno poziv. 123 00:06:52,020 --> 00:06:54,500 >> Kaj je nadaljevati nekaj storiti zdaj z enim ali več izmed njih 124 00:06:54,500 --> 00:06:55,660 Argumenti linija poveljevanja. 125 00:06:55,660 --> 00:07:00,070 Še posebej, gremo naprej in print ne glede beseda uporabnik vnese 126 00:07:00,070 --> 00:07:03,960 po imenu programa Ob pozivu. 127 00:07:03,960 --> 00:07:04,730 Oklepaj. 128 00:07:04,730 --> 00:07:06,240 Zaklepaj. 129 00:07:06,240 --> 00:07:10,510 Printf odstotkov s backslash in vejico. 130 00:07:10,510 --> 00:07:14,550 In zdaj moram povedati printf kakšno vrednost priključite na to ogrado. 131 00:07:14,550 --> 00:07:18,600 Želim prvo besedo, ki je uporabnik tipkal po imenu programa, 132 00:07:18,600 --> 00:07:23,130 in tako bom, da določite argv nosilec 1, blizu 133 00:07:23,130 --> 00:07:24,830 oklepaj, podpičje. 134 00:07:24,830 --> 00:07:27,290 >> Zakaj nosilec 1 in ne nosilec 0? 135 00:07:27,290 --> 00:07:30,990 No, izkazalo se je, se samodejno shranijo v argv 0 se bo 136 00:07:30,990 --> 00:07:32,620 Dejansko ime programa. 137 00:07:32,620 --> 00:07:36,180 Torej, prva beseda, da uporabnik vnese ko ime programa, je po 138 00:07:36,180 --> 00:07:38,990 Konvencija, bo shranjeni v argv 1. 139 00:07:38,990 --> 00:07:42,380 Pojdimo zdaj zbira in zagon tega programa. 140 00:07:42,380 --> 00:07:47,780 >> Naredite argv 0, pika slash argv 0. 141 00:07:47,780 --> 00:07:50,520 In sedaj beseda kot zdravo. 142 00:07:50,520 --> 00:07:51,670 Enter. 143 00:07:51,670 --> 00:07:53,520 In tam jo imamo, pozdravljena. 144 00:07:53,520 --> 00:07:55,750 >> [END Predvajanje videa] 145 00:07:55,750 --> 00:07:57,000 >> ROB BODEN: V redu. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Zaprite to. 148 00:08:01,230 --> 00:08:16,730 Torej ob pogled na ta program, ki smo pravkar uvedla za nas, dobro, samo 149 00:08:16,730 --> 00:08:24,710 pokazati, če želimo natisniti argv 0, poskrbite, zdaj kaj je to, argv 0, pika slash argv 0. 150 00:08:24,710 --> 00:08:30,440 Tako, kot je bilo pričakovano, da se tiskanje ime programa, saj argv je 0 151 00:08:30,440 --> 00:08:32,970 vedno bo ime programa. 152 00:08:32,970 --> 00:08:35,640 Ampak kaj je naredil nekaj, kar bit bolj zanimivo. 153 00:08:35,640 --> 00:08:42,080 >> Torej, problem nizu, boste uveden s to funkcijo, atoi. 154 00:08:42,080 --> 00:08:44,440 Torej, kaj bomo uporabili za atoi? 155 00:08:44,440 --> 00:08:48,550 To bo za pretvorbo niz na celo število. 156 00:08:48,550 --> 00:08:53,280 Torej, če sem mimo niz, ena dva tri, za atoi, da boste spremeniti, da 157 00:08:53,280 --> 00:08:56,910 k celo število, ena, dva, tri. 158 00:08:56,910 --> 00:09:01,480 Torej bomo za pretvorbo prvi ukazni vrstici argument celo število, 159 00:09:01,480 --> 00:09:05,690 in potem samo natisnete to celo število. 160 00:09:05,690 --> 00:09:09,680 >> Torej v bistvu sva nekako reimplementing getint, samo 161 00:09:09,680 --> 00:09:12,350 število je vpisana na ukaz linija namesto v programu 162 00:09:12,350 --> 00:09:14,560 interaktivno. 163 00:09:14,560 --> 00:09:23,170 Torej, zaradi česar argv 0, naredimo je tukaj, in zapreti to. 164 00:09:23,170 --> 00:09:27,670 Torej teče argv 0, in naj začne celo, ena dva tri, štiri ena dva. 165 00:09:27,670 --> 00:09:30,840 Tako da bomo natisnili celo število, eno dva tri, štiri ena dva. 166 00:09:30,840 --> 00:09:35,500 Obstaja nekaj razlik, da atoi, da da bomo prenehali skrbeti o ničemer 167 00:09:35,500 --> 00:09:39,040 presegajo veljavne numeričnega znaka, ampak to ni važno. 168 00:09:39,040 --> 00:09:42,870 >> Torej, kaj misliš, da se zgodi če to storim? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Segmentacije krivda. 171 00:09:47,050 --> 00:09:50,410 Torej, zakaj je to? 172 00:09:50,410 --> 00:09:56,060 Če se ozremo na naš program, smo pretvorbo argv 1, prvi argument 173 00:09:56,060 --> 00:09:59,610 za imenom programa, na celo število. 174 00:09:59,610 --> 00:10:03,350 Ampak ni argument za imenom programa. 175 00:10:03,350 --> 00:10:08,060 Torej, tukaj vidimo, da je ta buggy Program, saj, če se trudimo, da bi sistem deloval 176 00:10:08,060 --> 00:10:10,530 brez kakršnih koli argumentov, to bo samo crash. 177 00:10:10,530 --> 00:10:16,950 >> Torej še en pogost vzorec boste videli je nekaj takega, kot če je argc manj 178 00:10:16,950 --> 00:10:21,100 razen dveh, kar kaže, da ni bilo vsaj ime programa in 179 00:10:21,100 --> 00:10:29,100 Prvi argument, potem bomo nekaj storiti kot printf, ni dovolj 180 00:10:29,100 --> 00:10:31,190 Argumenti linija poveljevanja. 181 00:10:31,190 --> 00:10:33,170 To verjetno ni dobra za tiskanje, to je verjetno nekaj, kot so 182 00:10:33,170 --> 00:10:35,440 morate vnesti celo v ukazni vrstici. 183 00:10:35,440 --> 00:10:37,450 Jaz bom samo to konča. 184 00:10:37,450 --> 00:10:39,600 In se nato vrne 1. 185 00:10:39,600 --> 00:10:44,740 Torej, ne pozabite, da je na koncu našega Program, če se vrnemo 0, da nekako 186 00:10:44,740 --> 00:10:47,060 označuje uspeh. 187 00:10:47,060 --> 00:10:50,940 In glavni samodejno vrne 0, če ne boš. 188 00:10:50,940 --> 00:10:55,800 >> Torej, tukaj, smo retuning 1, ki označuje da to ni uspeh. 189 00:10:55,800 --> 00:11:01,000 In da se lahko vrnete, kar hočeš, samo, 0 označuje uspeh, in 190 00:11:01,000 --> 00:11:03,390 kaj kaže na neuspeh. 191 00:11:03,390 --> 00:11:04,855 Torej, kaj je teči ta različica stvari. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Torej, zdaj, če ne bomo vnesite ukazno vrstico Trditev, da bomo pravilno povedal 194 00:11:16,600 --> 00:11:18,290 nas, ni dovolj v ukazni vrstici. 195 00:11:18,290 --> 00:11:20,610 Ni končal stavek. 196 00:11:20,610 --> 00:11:24,950 Else, če bi dejansko šlo skozi eno, je mogoče zaključiti program. 197 00:11:24,950 --> 00:11:27,920 Torej, to je, kako bi lahko uporabite v argc Za potrditev število 198 00:11:27,920 --> 00:11:30,630 argumenti v ukazni vrstici, da so dejansko opravili. 199 00:11:30,630 --> 00:11:39,360 >> Torej, kaj je, da ta program nekoliko bolj zapletena, in pogled na sekundo 200 00:11:39,360 --> 00:11:42,180 ponovitev stvari. 201 00:11:42,180 --> 00:11:46,310 Torej, zdaj, bomo ne le tiskanje Argument linija prva zapoved. 202 00:11:46,310 --> 00:11:51,210 Tukaj smo ponavljanjem iz int i je enak 0, i manj kot argc, i plus 203 00:11:51,210 --> 00:11:55,280 plus, in tiskanje argv, indeks i. 204 00:11:55,280 --> 00:11:59,300 Torej ta vzorec, spet, da je to isti vzorec kot prej, razen namesto 205 00:11:59,300 --> 00:12:02,600 kliče spremenljivko n, smo s pomočjo argc. 206 00:12:02,600 --> 00:12:09,520 >> Torej je ta ponavljanjem nad vsako indeksa v matriki in tiskanje vsakega 207 00:12:09,520 --> 00:12:11,910 element v tej matriki. 208 00:12:11,910 --> 00:12:20,300 In tako, ko smo zagon tega programa, dobro, Nisem vstopijo v vse ukazno vrstico 209 00:12:20,300 --> 00:12:22,540 argumenti, zato je le odtisi ime programa. 210 00:12:22,540 --> 00:12:26,053 Če vpišem kup stvari, da bomo natisniti eno, vsak na svoji vrstici. 211 00:12:26,053 --> 00:12:31,213 212 00:12:31,213 --> 00:12:32,210 >> OK. 213 00:12:32,210 --> 00:12:34,770 Torej, vzemimo to en korak naprej. 214 00:12:34,770 --> 00:12:38,890 In namesto tiskanje vsako trditev v svoji vrstici, dajmo natisnite vsako 215 00:12:38,890 --> 00:12:42,590 značaj vsakega argumenta na svojo linijo. 216 00:12:42,590 --> 00:12:46,700 Torej, ne pozabite, da je argv matrika nizov. 217 00:12:46,700 --> 00:12:50,960 Torej, kaj je niz, vendar nabor znakov? 218 00:12:50,960 --> 00:12:57,140 To pomeni, da je res argv array array znakov. 219 00:12:57,140 --> 00:13:04,920 Tako izkoriščajo, da dajmo prezreti to za zdaj. 220 00:13:04,920 --> 00:13:08,190 Reciva, menijo niz argv 0. 221 00:13:08,190 --> 00:13:14,170 >> Torej, če želimo, da bi vsak značaj argv 0 v svoji vrstici, nato pa hočem 222 00:13:14,170 --> 00:13:19,500 narediti vzorec smo uporabili za, i manjša od dolžine matrike, 223 00:13:19,500 --> 00:13:23,990 ki je tu, je strlen v, to je ni tisto, kar želim storiti, niz 224 00:13:23,990 --> 00:13:26,450 i enaka 0 argv. 225 00:13:26,450 --> 00:13:30,390 Torej i je manjša od dolžine naših matrika, ki je v tem primeru je matrika 226 00:13:30,390 --> 00:13:34,410 znakov, i plus plus. 227 00:13:34,410 --> 00:13:41,040 In tako, kot smo videli prejšnji teden, je to idealen če gremo, da strlen zunaj 228 00:13:41,040 --> 00:13:45,210 stanja, saj n bo dodajanje strlen of s vsakič, ko gremo 229 00:13:45,210 --> 00:13:47,720 skozi zanko, in to je ne bomo spreminjali. 230 00:13:47,720 --> 00:13:50,230 Torej ga bomo enak N nad tu nastavite. 231 00:13:50,230 --> 00:13:54,260 232 00:13:54,260 --> 00:13:55,170 >> OK. 233 00:13:55,170 --> 00:14:01,320 Torej, zdaj, smo ponavljanjem preko vsak indeks v matriki. 234 00:14:01,320 --> 00:14:05,630 In tako, če želimo natisniti vsak lik v tej matriki, odstotnim c je 235 00:14:05,630 --> 00:14:06,880 zastava želimo uporabiti Za znakov. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 In sedaj nosilec i se bo Niz, indeks lik i, tako da, če 238 00:14:19,770 --> 00:14:20,970 Niz je bilo zdravo. 239 00:14:20,970 --> 00:14:27,530 nato s 0 se bo h, S podstavki 1 bo e, in tako naprej. 240 00:14:27,530 --> 00:14:30,800 >> Torej, zdaj smo želeli združiti ti dve stvari. 241 00:14:30,800 --> 00:14:35,440 Želimo natisniti vsak znak vsakega argumenta ukazne vrstice. 242 00:14:35,440 --> 00:14:38,950 Torej bomo imeli ugnezdene zanke for. 243 00:14:38,950 --> 00:14:47,480 In običajno, prvi števec je i, dostavo se bo j, n 244 00:14:47,480 --> 00:14:54,450 bo strlen argv i, i manjša od n, i plus plus. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 In zdaj namesto tiskanja argv i, zato argv nosilec i se bo indeks - 247 00:15:06,870 --> 00:15:14,280 , ki bo v ukazni vrstici i- Trditev, argv i, j se bo 248 00:15:14,280 --> 00:15:16,925 je j-narava argument i-th. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Znebil se bom tega tukaj zdaj saj smo ga v tem krogu. 251 00:15:24,810 --> 00:15:33,900 Torej je enakovredna String s enakopravnimi argv i, nato pa je nosilec j. 252 00:15:33,900 --> 00:15:36,980 >> No, ne rabimo, naj ugotovi ta spremenljivka s. 253 00:15:36,980 --> 00:15:44,530 Namesto tega bomo samo združiti ti dva v tisto, kar smo imeli, argv i, j. 254 00:15:44,530 --> 00:15:45,780 >> SPEAKER 1: [neslišno]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB BODEN: Dobro klic. 257 00:15:49,680 --> 00:15:52,936 Torej je ta pokvarjen. 258 00:15:52,936 --> 00:15:55,510 Če bi dejansko drži, bomo so to spoznal. 259 00:15:55,510 --> 00:16:01,210 Torej števec mi je mar pri tem predvsem za 260 00:16:01,210 --> 00:16:05,410 Zanka je j, iterator. 261 00:16:05,410 --> 00:16:08,560 Torej bi naletite na vprašanja, Verjetno neskončno zanko, če bomo 262 00:16:08,560 --> 00:16:09,540 ni določen, da. 263 00:16:09,540 --> 00:16:12,220 Zato smo tudi govorili O debugging danes. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Torej, kaj je zagon tega programa. 266 00:16:15,240 --> 00:16:21,200 In kaj je dejansko dodali ločeno printf Tukaj je, da bo samo tiskanje 267 00:16:21,200 --> 00:16:27,480 drugo linijo, ker to pomeni, ko smo zagnati program, bo prišlo prazno 268 00:16:27,480 --> 00:16:31,830 linija med vsako značaja vsak argument ukazne vrstice. 269 00:16:31,830 --> 00:16:33,448 No, bomo videli, kaj to pomeni. 270 00:16:33,448 --> 00:16:37,310 271 00:16:37,310 --> 00:16:37,790 Oop. 272 00:16:37,790 --> 00:16:39,870 Imam neko napako. 273 00:16:39,870 --> 00:16:42,860 Napaka implicitno razglasi Funkcija knjižnica strlen. 274 00:16:42,860 --> 00:16:51,630 >> Torej grem nazaj v naš program, sem Pozabil hash vključujejo string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Torej string.h se bo header datoteka, ki izjavlja 277 00:16:57,730 --> 00:16:58,980 funkcija strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, to pripravlja. 280 00:17:06,060 --> 00:17:09,109 Zdaj pa jo vodijo. 281 00:17:09,109 --> 00:17:10,930 Torej samo to. 282 00:17:10,930 --> 00:17:17,790 To se dogaja, da natisnete naše ime programa, zdravo svet. 283 00:17:17,790 --> 00:17:23,510 To se dogaja, natisnite vsako stvar, vsak značaj, v svoji vrstici. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Torej, kaj je dejansko si to en korak naprej. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 In namesto da bi uporabili string.h, dajmo razmišljati o tem, kako bi morali izvajati lastne 288 00:17:39,700 --> 00:17:41,420 strlen funkcijo. 289 00:17:41,420 --> 00:17:45,600 Torej bom takoj dal Funkcija podpis. 290 00:17:45,600 --> 00:17:52,900 Torej, recimo v my_strlen, in to je bo trajalo niz kot argument, 291 00:17:52,900 --> 00:17:57,220 in pričakujemo, da se vrnete Dolžina tega niza. 292 00:17:57,220 --> 00:18:03,430 Torej, kje je ta tip? 293 00:18:03,430 --> 00:18:04,990 Da. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Torej, se spomnite iz prejšnje prosojnice, ki je bil tudi od prejšnjega tedna, da 296 00:18:12,900 --> 00:18:18,890 Niz znakov, no, niz, Torej, recimo, da je to naš niz s. 297 00:18:18,890 --> 00:18:29,870 Torej, če je s niz, hello, potem, H-E-L-L-O, v pomnilniku, ki se bo 298 00:18:29,870 --> 00:18:35,610 biti, in potem je to Nagibnica 0 značaj. 299 00:18:35,610 --> 00:18:39,170 >> Torej, kako bomo dobili dolžino s? 300 00:18:39,170 --> 00:18:43,190 No, trik je videti za to zračnost 0 značaj, to null 301 00:18:43,190 --> 00:18:44,380 terminator. 302 00:18:44,380 --> 00:18:50,270 Torej, algoritem se dogaja bi bilo kaj takega malo 303 00:18:50,270 --> 00:18:51,510 dovolj znakov, da - 304 00:18:51,510 --> 00:18:56,180 imejmo to roko predstavljajo nekateri števec, recimo to int dolžino. 305 00:18:56,180 --> 00:19:00,060 Torej, od tukaj, mi smo gre za ponovitev čez našo nizu. 306 00:19:00,060 --> 00:19:04,100 >> Torej prvi znak, da je H, in to ni vrnil poševnica 0, tako da 307 00:19:04,100 --> 00:19:05,170 dolžina je 1. 308 00:19:05,170 --> 00:19:08,050 Ponovil na naslednji znak, E, in to ne Nagibnica 0. 309 00:19:08,050 --> 00:19:09,630 Dolžina je 2. 310 00:19:09,630 --> 00:19:10,960 L, 3. 311 00:19:10,960 --> 00:19:11,850 L, 4. 312 00:19:11,850 --> 00:19:13,050 O, 5. 313 00:19:13,050 --> 00:19:16,690 In na koncu smo dosegli backslash 0, in tako to pomeni, no, 314 00:19:16,690 --> 00:19:17,780 Ta niz je konec. 315 00:19:17,780 --> 00:19:20,130 Torej vrnimo 5. 316 00:19:20,130 --> 00:19:33,630 >> Tako dejansko izvajanje, da, prvič, moja n dolžina je enaka 0, moja desna roka. 317 00:19:33,630 --> 00:19:36,088 In bomo Ponovil - 318 00:19:36,088 --> 00:19:38,000 >> SPEAKER 1: [neslišno] 319 00:19:38,000 --> 00:19:38,640 >> ROB BODEN: Oh, sranje. 320 00:19:38,640 --> 00:19:39,870 Dobra odločitev. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 Torej dolžina je n enak 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Torej, zdaj, ko s Dolžina ne enako in potem backslash 0. 325 00:19:58,310 --> 00:20:04,660 Torej, ne pozabite, to poševnico 0, je dejanski značaj, in to pomeni, 326 00:20:04,660 --> 00:20:05,820 koncu niza. 327 00:20:05,820 --> 00:20:09,850 Tako kot tudi, poševnica nazaj n je dejanska karakter. 328 00:20:09,850 --> 00:20:14,040 Backslash 0 se dogaja, da navede Konec našega niza. 329 00:20:14,040 --> 00:20:15,414 Ne želim dati, da obstaja. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 In medtem ko govorite, ki jih indeksira dolžine ni enak nulte terminator, potem 332 00:20:25,620 --> 00:20:27,130 smo le, da bo prirastek dolžine. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Torej, na koncu našega programa dolžina je na koncu bo 335 00:20:34,880 --> 00:20:37,610 je 5 v tem primeru. 336 00:20:37,610 --> 00:20:39,210 In bova vrnila dolžino. 337 00:20:39,210 --> 00:20:42,570 338 00:20:42,570 --> 00:20:43,530 >> OK. 339 00:20:43,530 --> 00:20:48,290 Torej, zdaj sem dol, jaz ne narediti my_strlen. 340 00:20:48,290 --> 00:20:50,700 Naredimo to prevesti, da poskrbite, da vse teče gladko. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Sem počel v 2? 343 00:20:58,210 --> 00:21:00,565 Ali je bilo to 1? 344 00:21:00,565 --> 00:21:01,940 To bi morali storiti. 345 00:21:01,940 --> 00:21:02,690 Vse je v redu. 346 00:21:02,690 --> 00:21:08,490 Torej je to argv 2. 347 00:21:08,490 --> 00:21:11,585 Deluje kot pričakovano, čeprav je bil, da tisti, ki sem jo naredil v? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Da. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Ta različica stvari, ki niso imeli printf nova linija po tem, vendar pa 352 00:21:21,820 --> 00:21:22,910 ne bo nobene razlike. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Tako delal kot je bilo pričakovano. 355 00:21:25,780 --> 00:21:34,750 >> Zdaj bomo lahko celo združiti ta korak nadalje, če je obvestilo tukaj, no, 356 00:21:34,750 --> 00:21:38,920 Najprej smo oprijemalne strlen argv i, nato pa smo ponavljanjem preko 357 00:21:38,920 --> 00:21:41,450 vsak znak v tem nizu. 358 00:21:41,450 --> 00:21:47,480 Torej, namesto da delaš to, kaj pa če smo samo združiti ta logika čakanja 359 00:21:47,480 --> 00:21:50,740 dokler ne bomo zadeli Nagibnica 0 pravico v to zanko? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Torej Ponovil medtem argv i, j ne ni enak 0 backslash. 362 00:22:07,490 --> 00:22:10,680 Torej, kaj je to prvi zagon. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Vse je v redu. 365 00:22:21,180 --> 00:22:27,655 Torej, tukaj, ta pogoj je rekel - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 kaj je jasno, da. 368 00:22:40,060 --> 00:22:49,140 Torej, zdaj, naj bo to naš argv. 369 00:22:49,140 --> 00:22:55,290 Torej, ko sem tekel, da program pred, argv je množica nizov. 370 00:22:55,290 --> 00:23:03,100 In tako, če sem ga teči z dot poševnica argv 2, zdravo svet, potem argv 371 00:23:03,100 --> 00:23:07,650 sama dolžina 3, za argv nič, zdravo in svet. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> In znotraj vsakega od teh indeksov je, sam niz, kjer je to bo 374 00:23:19,660 --> 00:23:23,780 pika, bo to slash, ne vem če bi bila prava smer, sem 375 00:23:23,780 --> 00:23:25,680 Ne verjamem, da je. 376 00:23:25,680 --> 00:23:30,110 -R-V dash, potrebujejo več prostora. 377 00:23:30,110 --> 00:23:32,570 Pojdimo v tem polju. 378 00:23:32,570 --> 00:23:38,230 -R-V črtica 0, nato pa nagibnica 0. 379 00:23:38,230 --> 00:23:43,160 In nato v neredu bo zdravo. 380 00:23:43,160 --> 00:23:45,910 Reciva, H-E poševnico 0. 381 00:23:45,910 --> 00:23:51,130 In končno, W-O Nagibnica 0. 382 00:23:51,130 --> 00:23:59,730 >> Torej algoritem, ki smo pravkar napisal, ugnezdena za zank, kaj oni 383 00:23:59,730 --> 00:24:07,321 početje je, moramo najprej boj i in nato j. 384 00:24:07,321 --> 00:24:15,206 To bi bilo lažje z oznako na zaslon, Vrniva se k temu. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Tako opazili, da je i iterator, da je ponavljanjem nad vsakim ukazom 387 00:24:24,600 --> 00:24:25,610 argument linijo. 388 00:24:25,610 --> 00:24:28,870 In j je iterator ponavljanjem čez vsak znak v tem, da 389 00:24:28,870 --> 00:24:30,410 argument ukazne vrstice. 390 00:24:30,410 --> 00:24:46,755 Torej, kaj je to notranja printf počne je, da smo printf argv 0 0, printf 391 00:24:46,755 --> 00:24:58,680 argv 0 1 printf argv 0 2 0 3 0 4 0 5 0 6, zdaj pa, argv 0 7 se dogaja, da 392 00:24:58,680 --> 00:25:00,670 enako backslash 0. 393 00:25:00,670 --> 00:25:05,730 >> Torej imamo izhod, da za zanke, in zdaj sem se ponovi za 1. 394 00:25:05,730 --> 00:25:10,910 In zdaj bomo tisk argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 No, saj sem cut zdravo kratko, argv 1 2 spet bo 396 00:25:17,040 --> 00:25:18,170 backslash 0. 397 00:25:18,170 --> 00:25:25,050 In tako, prirastek i in nadaljuje, in tako naprej, dokler se ne izpiše vse 398 00:25:25,050 --> 00:25:28,580 svet, in to so trije ukazni vrstici argumenti, in bomo izhod iz 399 00:25:28,580 --> 00:25:31,670 najbolj oddaljenih zanke in dokončati naš program. 400 00:25:31,670 --> 00:25:38,390 401 00:25:38,390 --> 00:25:39,640 OK. 402 00:25:39,640 --> 00:25:43,903 403 00:25:43,903 --> 00:25:46,795 >> Torej, kaj je prišel nazaj. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Tako boste pridobili nekaj poznavanja argumenti v ukazni vrstici o tem 406 00:25:52,370 --> 00:25:54,460 Poseben problem nastaviti. 407 00:25:54,460 --> 00:25:56,630 >> Zdaj, odpravljanje napak. 408 00:25:56,630 --> 00:26:01,680 Torej, ste verjetno že moral storiti nekateri debugging z dosedanjim 409 00:26:01,680 --> 00:26:03,120 Problem nastavite. 410 00:26:03,120 --> 00:26:08,420 In še ena zelo enostaven način za odpravljanje napak, Najprej si oglejmo program Otroški voziček. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 No, sprehod skozi ta program, bomo od uporabnika zahteva za 413 00:26:23,830 --> 00:26:29,350 celo število, zgrabita celo število, in nato, samovoljno, imamo while zanko, ki 414 00:26:29,350 --> 00:26:32,280 je le, da bo pojemanje i, dokler ne bo enaka 10. 415 00:26:32,280 --> 00:26:35,820 Reciva prevzeti jaz vstopu celo število, večje od 10. 416 00:26:35,820 --> 00:26:38,700 Torej pojemanje i, dokler ne bo enaka 10. 417 00:26:38,700 --> 00:26:42,630 >> In potem imamo še eno while zanko da, medtem ko ni enak 0, smo 418 00:26:42,630 --> 00:26:44,540 bo pojemanje i s 3. 419 00:26:44,540 --> 00:26:49,790 Torej, če ste videli namena bug tukaj, je, da bomo to pojemanje i 420 00:26:49,790 --> 00:26:57,010 je 10, in potem je to zanko, medtem ko bo vzroka i od 10, do 7, na 4, 1, 421 00:26:57,010 --> 00:27:02,880 negativnega 2, v negativno 5, in tako naprej, negativne neskončnosti, saj bom 422 00:27:02,880 --> 00:27:05,920 nikoli dejansko enaka 0. 423 00:27:05,920 --> 00:27:08,610 In nato ob koncu tega programa, imamo funkcijo foo ki 424 00:27:08,610 --> 00:27:12,130 dogaja tisku, da i. 425 00:27:12,130 --> 00:27:16,520 >> Torej je to kratko in trivialno program in bug je očitno, 426 00:27:16,520 --> 00:27:18,790 še posebej po tem, ko sem je povedal, kaj je bug. 427 00:27:18,790 --> 00:27:24,840 Ampak namen tukaj je, no, to bi lahko dejansko videti kot nekateri vaši 428 00:27:24,840 --> 00:27:30,040 Rešitve iz požrešen od zadnje problem določiti, in morda imate, 429 00:27:30,040 --> 00:27:32,800 nekateri neskončne zanke v vašem programu, in nimate pojma 430 00:27:32,800 --> 00:27:34,100 kaj ga povzroča. 431 00:27:34,100 --> 00:27:38,690 Torej zelo uporabna debugging tehnika je, da samo dodati printfs 432 00:27:38,690 --> 00:27:40,180 vsem kodi. 433 00:27:40,180 --> 00:27:49,200 >> Torej, tukaj hočem printf zunaj Prva while zanko. 434 00:27:49,200 --> 00:27:53,155 In tukaj želim printf, in bom samo tiskanje i. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Bom še storiti najprej, medtem ko zanke, i. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Zunaj, drugi while zanko. 439 00:28:09,040 --> 00:28:12,170 Še enkrat, tiskati v notranjosti od tu, vrednost i. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 In kaj je zagon tega. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Torej dot slash razhroščevanje. 444 00:28:24,800 --> 00:28:25,610 Vnesite celo število. 445 00:28:25,610 --> 00:28:28,150 Naredimo 13. 446 00:28:28,150 --> 00:28:28,760 In boom. 447 00:28:28,760 --> 00:28:33,300 Vidimo, da smo neskončna zanka notranjostjo druge, medtem ko zanke. 448 00:28:33,300 --> 00:28:36,305 Torej, zdaj vemo, kaj je bug. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Vendar printf debugging je popolnoma super, ampak ko vaši programi dobili 451 00:28:45,610 --> 00:28:50,560 več in bolj zapletena, obstajajo bolj sofisticirane rešitve 452 00:28:50,560 --> 00:28:51,705 pridobivanje stvari delajo. 453 00:28:51,705 --> 00:28:52,955 Torej, kaj je odstraniti vse te printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 In da poskrbite nisem prekinil ničesar. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Torej program, greva uvede se imenuje 458 00:29:14,180 --> 00:29:16,715 GDB, za GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 No, pravzaprav, kaj je odstraniti razhroščevanje za drugič, in da razhroščevanje znova. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 No, pravzaprav prvi, dobra lekcija v argumentih ukazni vrstici. 463 00:29:34,440 --> 00:29:37,780 Vedite, da je ta Jek ukaz, da je sestavljanje vse, ki se prenaša 464 00:29:37,780 --> 00:29:41,300 v ukazni vrstici, ti Argumenti linija poveljevanja. 465 00:29:41,300 --> 00:29:46,250 Torej, točno, kako se bodo s pomočjo argumenti v ukazni vrstici, kot smo 466 00:29:46,250 --> 00:29:51,500 storila prej, in kot boste v PSET 2, to je, kako Jek je njihovo uporabo. 467 00:29:51,500 --> 00:30:00,070 >> Tako opazili, da je to prva zastava, dash ggdb3, kaj želi povedati, Jek, 468 00:30:00,070 --> 00:30:03,790 morate zbrati te datoteke z nameri, da bomo sčasoma 469 00:30:03,790 --> 00:30:05,380 morate debug. 470 00:30:05,380 --> 00:30:13,840 Tako dolgo, kot ste to zastavo, potem bomo lahko GDB razhroščevanje. 471 00:30:13,840 --> 00:30:17,380 In bomo odprli GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> Torej obstaja veliko ukazov da boste morali navaditi. 473 00:30:22,920 --> 00:30:27,100 Prvi je, da boste verjetno Takoj potrebujemo, Run. 474 00:30:27,100 --> 00:30:28,200 Torej, kaj je Run boš naredil? 475 00:30:28,200 --> 00:30:30,910 To se dogaja, da začnemo program. 476 00:30:30,910 --> 00:30:36,180 Torej teči, začetni program, program nas prosi za celo število, 13. 477 00:30:36,180 --> 00:30:39,170 In potem je neskončna zanka kot Pričakuje se, razen da odstranimo 478 00:30:39,170 --> 00:30:40,500 printfs, tako da sploh ne vidim. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Običajno izstopilo. 481 00:30:44,600 --> 00:30:45,850 Oh. 482 00:30:45,850 --> 00:30:48,570 483 00:30:48,570 --> 00:30:53,640 Možno je, da je zavit vse obratno, nazaj - ignorirajo to. 484 00:30:53,640 --> 00:30:55,170 Predvidevam, da ni izhod normalno. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Tam je zapleten odgovor na to. 487 00:31:03,370 --> 00:31:07,890 >> Torej sedaj, da to ni zelo koristno. 488 00:31:07,890 --> 00:31:11,480 Tako da samo teče naš program znotraj ta razhroščevalnik nam ne pomaga v katerikoli 489 00:31:11,480 --> 00:31:15,610 način, saj smo lahko le narediti dot poševnica razhroščevanje od zunaj GDB. 490 00:31:15,610 --> 00:31:21,250 Torej en ukaz, da Verjetno boste - 491 00:31:21,250 --> 00:31:22,970 in to bom nehal. 492 00:31:22,970 --> 00:31:25,850 Control-d ali zaprete, tako delo. 493 00:31:25,850 --> 00:31:29,550 Torej, kaj je to ponovno odprla. 494 00:31:29,550 --> 00:31:31,130 >> Še en ukaz, ki ga boste verjetno takoj želeli 495 00:31:31,130 --> 00:31:33,600 navaditi, da je Break. 496 00:31:33,600 --> 00:31:37,120 Torej bomo odmor na glavni za zdaj, in potem vam bom razložil, da je. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 No, tukaj vidimo smo nastaviti odmerka V tej vrstici v debug.c. 499 00:31:46,370 --> 00:31:50,160 Torej, kaj odmor pomeni, da ko sem tip tek, program bo 500 00:31:50,160 --> 00:31:53,560 tekli naprej, dokler Sem udaril prekinitveno točko. 501 00:31:53,560 --> 00:31:59,390 Torej, ko sem udaril teči, se program zažene, in potem se pokvari takoj, ko je to 502 00:31:59,390 --> 00:32:01,940 vstopi v glavni funkcijo. 503 00:32:01,940 --> 00:32:06,930 Glavni odmor se bo nekaj ste precej pogosto storiti. 504 00:32:06,930 --> 00:32:11,340 >> In zdaj, da vam predstavim za nekaj več ukazov. 505 00:32:11,340 --> 00:32:14,330 Opazil sem, da je rekel, da zlomil na liniji 11, ki je 506 00:32:14,330 --> 00:32:16,230 printf, vnesite celo število. 507 00:32:16,230 --> 00:32:21,260 Torej ukaz Naprej se bo, kako gremo na naslednjo vrstico kode. 508 00:32:21,260 --> 00:32:24,810 To se dogaja, da nam omogočajo, da okrepijo s pomočjo naše programske vrsticah. 509 00:32:24,810 --> 00:32:26,260 Torej, naslednjič. 510 00:32:26,260 --> 00:32:29,820 >> Zdaj linija 12, greva da bi dobili celo število. 511 00:32:29,820 --> 00:32:30,450 Naprej. 512 00:32:30,450 --> 00:32:34,290 In če si zadeti nastopiti še enkrat, bo to redo je zadnja stvar si naredil. 513 00:32:34,290 --> 00:32:36,480 Tako da mi ni treba vnesti Naslednja vsakič. 514 00:32:36,480 --> 00:32:40,100 Torej, vnesite celo število, 13. 515 00:32:40,100 --> 00:32:46,940 Torej, zdaj, linija 14, medtem ko i je večja od 10, in jaz bom zraven. 516 00:32:46,940 --> 00:32:48,685 In vidimo, da bomo pojemanje i. 517 00:32:48,685 --> 00:32:50,210 Torej bomo pojemanje spet. 518 00:32:50,210 --> 00:32:53,620 >> Torej, zdaj, drugo koristno ukaz Print. 519 00:32:53,620 --> 00:32:55,750 Torej Print se bo izpisal vrednost spremenljivke. 520 00:32:55,750 --> 00:32:57,825 Pripeljimo vrednost spremenljivke i. 521 00:32:57,825 --> 00:32:58,705 Oglejmo tiskanje i. 522 00:32:58,705 --> 00:33:00,910 To se dogaja, da sem se 11. 523 00:33:00,910 --> 00:33:03,330 Zdaj smo spet Naslednja medtem I je večji od 10. 524 00:33:03,330 --> 00:33:05,590 Torej, jaz še vedno večji od 10, saj je 11. 525 00:33:05,590 --> 00:33:06,920 i minus minus. 526 00:33:06,920 --> 00:33:08,250 Oglejmo natisnete spet. 527 00:33:08,250 --> 00:33:10,950 Kot je bilo pričakovati, je 10. 528 00:33:10,950 --> 00:33:12,510 >> Torej, zdaj, naslednji. 529 00:33:12,510 --> 00:33:16,250 To se bo vrnil v stanju, i večje od 10, vendar sem zdaj 10, tako 530 00:33:16,250 --> 00:33:20,040 ni večja od 10, tako da pričakujemo, da bo da pade ven iz while zanko. 531 00:33:20,040 --> 00:33:22,220 In zdaj smo pod to vrstico kode. 532 00:33:22,220 --> 00:33:28,750 In še en ukaz, Seznam, je le, da bo Za prikaz prejšnjo in naslednjo 533 00:33:28,750 --> 00:33:31,240 Nekaj ​​vrstic kode, v primeru, da ste se izgubili. 534 00:33:31,240 --> 00:33:35,420 Torej smo pravkar zapustil ta while zanko, in zdaj smo tako začel 535 00:33:35,420 --> 00:33:37,080 while zanko, vrstica 18. 536 00:33:37,080 --> 00:33:39,860 Torej, medtem ko i ni enak 0. 537 00:33:39,860 --> 00:33:46,570 , In nato i je enak i minus 3, mi pa bomo obvestilo, bo to samo nadaljuj. 538 00:33:46,570 --> 00:33:48,270 In lahko natisnete i. 539 00:33:48,270 --> 00:33:49,990 >> Vsak ukaz je neke vrste bližnjice. 540 00:33:49,990 --> 00:33:51,720 Zato p je okrajšava za tiskanje. 541 00:33:51,720 --> 00:33:53,400 Tako da bomo lahko p i. 542 00:33:53,400 --> 00:33:57,550 Samo ne drži n, ali vztrajati početje Naprej. 543 00:33:57,550 --> 00:33:58,340 Natisni spet. 544 00:33:58,340 --> 00:34:00,380 Vidiš, zdaj je negativen 167. 545 00:34:00,380 --> 00:34:06,030 Torej, to bo šlo v nedogled, vendar ne res večno, saj si videl, da 546 00:34:06,030 --> 00:34:09,330 bo dejansko na koncu na neki točki. 547 00:34:09,330 --> 00:34:15,699 >> Tako da se Začetek GDB. 548 00:34:15,699 --> 00:34:19,504 Ampak kaj je naredil eno stvar v GDB. 549 00:34:19,504 --> 00:34:20,754 Uh, razhroščevanje. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Torej, v tem posebnem primeru neskončna zanka se je zgodilo, da je znotraj 552 00:34:28,534 --> 00:34:30,050 Glavna funkcija. 553 00:34:30,050 --> 00:34:35,779 In za zdaj, samo sprejemajo, da sem gre za premik neskončno zanko v 554 00:34:35,779 --> 00:34:37,029 Funkcija foo. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Samo pozabiti, da ob koncu tega Program, no, to je bilo prvotno 557 00:34:43,730 --> 00:34:46,210 kliče foo, ki je bil pravkar tiskovine i. 558 00:34:46,210 --> 00:34:51,880 Zdaj pa kličeš foo, ki je bo pojemanje i, dokler ne bo 0, in 559 00:34:51,880 --> 00:34:54,548 nato natisnete to spremenljivko. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Le da. 562 00:34:57,970 --> 00:35:00,175 Naredite razhroščevanje. 563 00:35:00,175 --> 00:35:03,310 In zdaj, gdb razhroščevanje. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Torej, če sem teči, potem jaz ne bom lahko dejansko korak po mojih 566 00:35:10,580 --> 00:35:11,730 Program linija-by-line. 567 00:35:11,730 --> 00:35:19,820 Torej, kaj je odmor na glavni, in vnesite tek. 568 00:35:19,820 --> 00:35:28,160 Torej iti skozi to, printf, vnesite število, dobili celo število, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Torej bomo, da decrementing dokler I je večji od 10. 571 00:35:37,490 --> 00:35:42,840 Potem bomo padli skozi while zanko, in priti do črte - 572 00:35:42,840 --> 00:35:44,364 dajmo jo odprli v ločenem oknu. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Tako smo decremented dokler sem bil več večji od 10, in nato smo 575 00:35:53,300 --> 00:35:55,700 imenovano funkcijo, foo. 576 00:35:55,700 --> 00:36:01,340 >> Torej, kaj se je zgodilo takoj, ko sem udaril Funkcija foo, dobro, sem poklical foo, in 577 00:36:01,340 --> 00:36:04,030 potem nisem več imel nadzora nad GDB. 578 00:36:04,030 --> 00:36:10,230 Torej, takoj, ko sem udaril Naprej na tej liniji, Stvari nadaljevati, dokler se je to zgodilo, 579 00:36:10,230 --> 00:36:12,400 kjer program izstopilo ko - 580 00:36:12,400 --> 00:36:14,450 Predvidevam, da ni obstajala na koncu. 581 00:36:14,450 --> 00:36:16,390 Videli ste, da ustavite za nekaj, čeprav. 582 00:36:16,390 --> 00:36:22,040 Torej, zakaj sem izgubil nadzor nad Program na tej točki? 583 00:36:22,040 --> 00:36:27,540 No, ko sem tipa zraven, da gre za literal naslednjo vrstico kode, ki 584 00:36:27,540 --> 00:36:28,850 bodo izvajale. 585 00:36:28,850 --> 00:36:35,950 Torej po vrstici 21, naslednjo vrstico kode ki bo izvajal je linija 22, 586 00:36:35,950 --> 00:36:38,520 ki je izhod iz glavnega. 587 00:36:38,520 --> 00:36:43,810 Torej, ne želim, da pojdi na naslednjo vrstico kode. 588 00:36:43,810 --> 00:36:48,170 Rad bi šel v funkcijo, foo, in nato korak tudi skozi 589 00:36:48,170 --> 00:36:49,830 teh vrstic kode. 590 00:36:49,830 --> 00:36:53,726 >> Torej za to, da imamo alternativo. 591 00:36:53,726 --> 00:36:56,770 Oglejmo nehal, da še enkrat. 592 00:36:56,770 --> 00:36:58,020 Glavni odmor. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, next, next, 13, naslednji, next, next, previdno, 595 00:37:06,370 --> 00:37:09,820 preden smo zadeli postavo foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Torej sedaj, smo na liniji 21, kjer pravimo foo. 598 00:37:13,700 --> 00:37:17,100 Nočemo, da bi naslednji tip, saj to bo le poklicati funkcijo foo, in 599 00:37:17,100 --> 00:37:18,710 pojdite na naslednjo vrstico kode. 600 00:37:18,710 --> 00:37:20,840 Kaj želimo uporabiti, je korak. 601 00:37:20,840 --> 00:37:25,690 Torej je razlika med korakom in Next, kjer korak korake v 602 00:37:25,690 --> 00:37:28,190 deluje, in Next gre v funkciji. 603 00:37:28,190 --> 00:37:32,830 To samo izvaja celoto funkcijo in gre naprej. 604 00:37:32,830 --> 00:37:37,210 >> Torej korak nam bo prinesla v funkciji, foo. 605 00:37:37,210 --> 00:37:41,160 In vidimo tukaj, zdaj smo nazaj na to zanko, medtem ko je to v teoriji, 606 00:37:41,160 --> 00:37:44,190 bo nadaljevala večno. 607 00:37:44,190 --> 00:37:50,420 In če ste zadeli korak, kadar to ni niti Funkcija za klic, potem je to 608 00:37:50,420 --> 00:37:51,720 identična Naprej. 609 00:37:51,720 --> 00:37:55,320 Torej je le takrat, ko ste na vrsti, da kliče funkcijo, ki Step 610 00:37:55,320 --> 00:37:56,970 se dogaja, da se razlikujejo od Naprej. 611 00:37:56,970 --> 00:37:57,930 Torej nam bo korak pripeljal sem. 612 00:37:57,930 --> 00:38:02,100 Korak, korak, korak, korak, korak, korak, in Enostavno bomo neskončno zanko za vedno. 613 00:38:02,100 --> 00:38:06,810 >> Tako da boste morda navaditi, da je kot vaš način ugotavljanja neskončne zanke, je 614 00:38:06,810 --> 00:38:08,960 Samo držite to tipko ENTER za videli, če se vam zatakne. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Obstajajo boljši načini za to, vendar za zdaj, to je povsem zadostuje. 617 00:38:14,780 --> 00:38:17,967 In slogovno, da so skladni s stilom 50, naj bi to naredil. 618 00:38:17,967 --> 00:38:21,550 619 00:38:21,550 --> 00:38:24,030 OK. 620 00:38:24,030 --> 00:38:28,400 >> Tako je eden zadnji ukaz, da uvedejo. 621 00:38:28,400 --> 00:38:30,810 No, pa GDB razhroščevanje prijavite 622 00:38:30,810 --> 00:38:35,580 Torej, namesto da bi poškodovali pri glavni, če sem poznati funkcije foo je tudi 623 00:38:35,580 --> 00:38:39,230 problem, potem pa sem lahko samo še omenjeno, break na foo, namesto tega. 624 00:38:39,230 --> 00:38:42,310 Recimo, da sem prekinil na oba glavna in foo. 625 00:38:42,310 --> 00:38:45,390 Tako da lahko nastavite toliko prelomnih točk kakor hočeš. 626 00:38:45,390 --> 00:38:49,230 Ko sem tipa teči, da se dogaja ustaviti na - 627 00:38:49,230 --> 00:38:52,180 Oh, kaj je prevedem, saj Spremenil sem stvari. 628 00:38:52,180 --> 00:38:55,950 Videli boste to vrstico, opozorila vir datoteka je novejša kot izvršljiv. 629 00:38:55,950 --> 00:38:59,680 To pomeni, da sem šel v tu in spremenili ti skladni s stilom 630 00:38:59,680 --> 00:39:03,100 50, vendar nisem prevedem Program. 631 00:39:03,100 --> 00:39:04,870 Torej GDB me zavedati. 632 00:39:04,870 --> 00:39:10,130 Jaz bom nehal, da razhroščevanje spet, hit gdb razhroščevanje. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Torej sedaj, nazaj, kaj sem počel. 635 00:39:12,800 --> 00:39:15,720 Break glavni odmor, foo. 636 00:39:15,720 --> 00:39:20,680 Zdaj, če sem teči program, tako da je bo nadaljevala, dokler ne zadene 637 00:39:20,680 --> 00:39:21,320 Prelomne točke. 638 00:39:21,320 --> 00:39:24,680 Ta prekinitvena točka se zgodi, da bo prvič na glavni. 639 00:39:24,680 --> 00:39:28,630 Zdaj, namesto da delaš zraven, next, next, next, next, dokler nisem udaril foo, I 640 00:39:28,630 --> 00:39:35,230 lahko vnesete še naprej, kar se bo nadaljevalo dokler ne zadeti naslednje prelomne točke. 641 00:39:35,230 --> 00:39:37,200 Moram najprej vnesti celo število. 642 00:39:37,200 --> 00:39:40,570 Še naprej se bo nadaljevalo, dokler nisem zadel Naslednje mejne vrednosti so, to je, da 643 00:39:40,570 --> 00:39:43,320 funkcija foo. 644 00:39:43,320 --> 00:39:50,130 >> Tako bodo Run teči, dokler ne zadeti prekinitvena točka, ampak samo pri vožnji, ko 645 00:39:50,130 --> 00:39:54,060 ste začeli program, in nato, od takrat naprej, je nadaljeval. 646 00:39:54,060 --> 00:40:01,950 Če Pravkar sem prekinil glavni in potem tekel, se bo zlomil na 647 00:40:01,950 --> 00:40:03,670 Glavni in nato nadaljujte. 648 00:40:03,670 --> 00:40:10,050 Ker nimam break točko, na foo, vnesite celo število, potem pa sem zdaj 649 00:40:10,050 --> 00:40:11,380 ne bo prekinil na foo. 650 00:40:11,380 --> 00:40:16,318 To je le, da bo neskončno zanka do tega. 651 00:40:16,318 --> 00:40:17,568 OK. 652 00:40:17,568 --> 00:40:19,500 653 00:40:19,500 --> 00:40:24,420 >> Tako da je Uvod v GDB. 654 00:40:24,420 --> 00:40:27,790 Moral bi začeli uporabljati v svojih problematičnih sklopov. 655 00:40:27,790 --> 00:40:30,550 To je lahko zelo koristno prepoznati napake. 656 00:40:30,550 --> 00:40:35,280 Če ste dejansko le, linija-by-line, pojdite skozi svojo kodo, in primerjati, kaj je 657 00:40:35,280 --> 00:40:39,740 dejansko dogaja s tem, kar ste pričakovali zgodilo, potem je to precej 658 00:40:39,740 --> 00:40:41,060 težko zgrešiti svoje napake. 659 00:40:41,060 --> 00:40:45,280 660 00:40:45,280 --> 00:40:46,530 OK. 661 00:40:46,530 --> 00:40:48,310 662 00:40:48,310 --> 00:40:54,040 >> Torej, prejšnji teden je David pripeljal do tega skrivni ključ kriptografija stvari za 663 00:40:54,040 --> 00:40:59,350 Prvič, kjer ne želimo Gesla se samo shranjeni na našem 664 00:40:59,350 --> 00:41:03,210 Računalnik v nekaterih golo besedilno datoteko, kjer lahko nekdo prišel mimo in pravkar 665 00:41:03,210 --> 00:41:04,660 jo odprli in jih preberete. 666 00:41:04,660 --> 00:41:07,530 V idealnem primeru bi bili šifrirani na nek način. 667 00:41:07,530 --> 00:41:13,340 In Problem Set 2, boste morali ukvarjati z eno metodo šifriranja, 668 00:41:13,340 --> 00:41:16,520 ali, no, dva načina, vendar niso tako velika. 669 00:41:16,520 --> 00:41:20,050 Če boste to storili izdajo hacker, si tudi dogaja, da se ukvarjajo z 670 00:41:20,050 --> 00:41:22,150 dešifriranje nekaj stvari. 671 00:41:22,150 --> 00:41:29,770 >> Torej, vprašanje je zdaj, dobro, čeprav imamo najmočnejšo šifriranje 672 00:41:29,770 --> 00:41:34,830 algoritem na svetu, če se odločite zlasti slabi geslo, potem 673 00:41:34,830 --> 00:41:37,720 vam ne bo pomagalo zelo veliko, saj ljudje bodo še vedno lahko pogruntal. 674 00:41:37,720 --> 00:41:41,530 Tudi če vidim šifrirani niz in je videti kot zmešnjava smeti 675 00:41:41,530 --> 00:41:44,760 da ne pomeni nič z njimi, če se še vedno potrebujejo samo poskusiti nekaj gesel 676 00:41:44,760 --> 00:41:50,560 pogruntati, potem niso zelo varna. 677 00:41:50,560 --> 00:41:55,890 Tako gledanje video, ki naredi to točko. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [Predvajanje videa] 680 00:42:00,970 --> 00:42:02,100 >> -Helmet, ti fanatik. 681 00:42:02,100 --> 00:42:03,370 Kaj se dogaja? 682 00:42:03,370 --> 00:42:05,170 Kaj počneš z mojo hčerko? 683 00:42:05,170 --> 00:42:09,910 >> -Dovolite mi, da predstavim briljantno Mlada plastični kirurg, dr Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, največji nos posel človek v celotnem 685 00:42:13,730 --> 00:42:16,080 vesolje in Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -Vaše veličanstvo. 687 00:42:17,210 --> 00:42:18,070 >> -Nos? 688 00:42:18,070 --> 00:42:18,670 Ne razumem. 689 00:42:18,670 --> 00:42:20,090 Ona je že imela operacijo nosu. 690 00:42:20,090 --> 00:42:21,910 To je bil Sweet Sixteen prisotna. 691 00:42:21,910 --> 00:42:22,140 >> -Ne. 692 00:42:22,140 --> 00:42:23,690 To ni tisto, kar misliš. 693 00:42:23,690 --> 00:42:25,420 To je veliko, veliko slabše. 694 00:42:25,420 --> 00:42:30,300 Če mi ne dajo kombinacijo za zračni ščit, dr Schlotkin bo 695 00:42:30,300 --> 00:42:34,226 dal svojo hčer nazaj svoj stari nos. 696 00:42:34,226 --> 00:42:35,476 >> -Ne. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 Kje si dobil to? 699 00:42:40,516 --> 00:42:41,440 >> -V redu. 700 00:42:41,440 --> 00:42:42,180 Jaz bom povedal. 701 00:42:42,180 --> 00:42:43,381 Jaz bom povedal. 702 00:42:43,381 --> 00:42:44,263 Ne, očka. 703 00:42:44,263 --> 00:42:45,590 Ne, ne smeš. 704 00:42:45,590 --> 00:42:46,860 >> -Prav imaš, draga moja. 705 00:42:46,860 --> 00:42:48,450 Pogrešal bom svoj novi nos. 706 00:42:48,450 --> 00:42:52,090 Ampak jaz mu ne bom povedala kombinacijo, ni važno kaj. 707 00:42:52,090 --> 00:42:53,680 >> -Zelo dobro. 708 00:42:53,680 --> 00:42:55,685 Dr Schlotkin, da svoje najhujše. 709 00:42:55,685 --> 00:42:56,914 >> -V veselje mi je. 710 00:42:56,914 --> 00:43:00,690 >> [ORODJA SE izostril] 711 00:43:00,690 --> 00:43:01,910 >> -Ne. 712 00:43:01,910 --> 00:43:02,520 Čakati. 713 00:43:02,520 --> 00:43:03,836 Čakati. 714 00:43:03,836 --> 00:43:05,300 Jaz bom povedal. 715 00:43:05,300 --> 00:43:06,880 Jaz bom povedal. 716 00:43:06,880 --> 00:43:09,130 >> -Vedel sem, da bo delovalo. 717 00:43:09,130 --> 00:43:09,900 Vse je v redu. 718 00:43:09,900 --> 00:43:12,850 Daj mi ga. 719 00:43:12,850 --> 00:43:16,918 >> -Kombinacija je ena. 720 00:43:16,918 --> 00:43:17,406 >> -One. 721 00:43:17,406 --> 00:43:18,382 >> -One. 722 00:43:18,382 --> 00:43:19,358 >> Dva. 723 00:43:19,358 --> 00:43:19,846 >> Dva. 724 00:43:19,846 --> 00:43:20,822 >> Dva. 725 00:43:20,822 --> 00:43:21,310 >> -Tri. 726 00:43:21,310 --> 00:43:21,798 >> -Tri. 727 00:43:21,798 --> 00:43:22,774 >> -Tri. 728 00:43:22,774 --> 00:43:23,262 >> -Four. 729 00:43:23,262 --> 00:43:23,750 >> -Four. 730 00:43:23,750 --> 00:43:26,150 >> -Four. 731 00:43:26,150 --> 00:43:27,010 >> -Five. 732 00:43:27,010 --> 00:43:27,670 >> -Five. 733 00:43:27,670 --> 00:43:29,010 >> -Five. 734 00:43:29,010 --> 00:43:34,770 >> Torej kombinacija je ena, dva, tri, štiri, pet. 735 00:43:34,770 --> 00:43:37,460 To je najbolj neumna kombinacija Kar sem jih kdaj slišal v svojem življenju. 736 00:43:37,460 --> 00:43:39,710 To je nekaj takega idiot bi imel na svoji prtljagi. 737 00:43:39,710 --> 00:43:42,000 >> Hvala, vaša visokost. 738 00:43:42,000 --> 00:43:43,530 >> -Kaj si naredil? 739 00:43:43,530 --> 00:43:44,490 >> -I izklopljen steno. 740 00:43:44,490 --> 00:43:45,420 >> -Ne nisi. 741 00:43:45,420 --> 00:43:45,840 Ste izklopili celoten film. 742 00:43:45,840 --> 00:43:46,930 >> -Verjetno sem pritisnil napačen gumb. 743 00:43:46,930 --> 00:43:48,265 >> No, daj nazaj. 744 00:43:48,265 --> 00:43:49,110 Dal film nazaj. 745 00:43:49,110 --> 00:43:49,510 >> -Da, gospod. 746 00:43:49,510 --> 00:43:49,917 Da, gospod. 747 00:43:49,917 --> 00:43:50,324 >> Pojdimo, Arnold. 748 00:43:50,324 --> 00:43:51,140 Pridi, Gretchen. 749 00:43:51,140 --> 00:43:53,060 Seveda, veste, jaz bom še moral zaračunavati za to. 750 00:43:53,060 --> 00:43:53,440 >> [END Predvajanje videa] 751 00:43:53,440 --> 00:43:54,690 >> ROB BODEN: V redu. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Torej sedaj, da smo že govorili o Varnost v nekaterih pogledih, lepo 754 00:44:08,430 --> 00:44:16,050 Malo movie poster, tako da v zadnjih letih dni, ta vprašanja z NSA 755 00:44:16,050 --> 00:44:17,300 spremljanje vsega. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 To je lahko težko, da se počutijo, kot si ti neke vrste zasebnosti 758 00:44:26,930 --> 00:44:34,540 Svetovni splet, čeprav nisem mogel povedati, si večina podrobnosti prizmo. 759 00:44:34,540 --> 00:44:42,130 Torej sprave prizmo, ne bomo da bi govoril o tem, zdaj 760 00:44:42,130 --> 00:44:44,030 pomisli vaš prenosnik. 761 00:44:44,030 --> 00:44:48,360 Torej tukaj, želim, da preklopite na moj dejanski račun, 762 00:44:48,360 --> 00:44:50,370 z mojo malo pingvina. 763 00:44:50,370 --> 00:44:57,310 Torej imam nastaviti geslo, in da geslo, kar hočem biti. 764 00:44:57,310 --> 00:45:02,430 >> Ampak ne pozabite, da tisto, kar sem se prijavite se z, tako da je ta prijava 765 00:45:02,430 --> 00:45:04,850 poziv, je nekaj programa. 766 00:45:04,850 --> 00:45:07,910 To je nekaj program, ki je bil napisal neki osebi. 767 00:45:07,910 --> 00:45:13,250 In tako, da oseba, če so še posebej škodljivo, bi lahko 768 00:45:13,250 --> 00:45:17,780 so rekli, v redu, tako da, če geslo da vnesem enak my 769 00:45:17,780 --> 00:45:22,800 Dejanska geslo, ali pa je enaka do neke posebno geslo - 770 00:45:22,800 --> 00:45:25,550 David je super, ali kaj podobnega - 771 00:45:25,550 --> 00:45:27,190 nato pa jih je spustil noter 772 00:45:27,190 --> 00:45:33,760 Torej bi lahko zlonamerno programer imajo Dostop do vseh vaših Mac, ali 773 00:45:33,760 --> 00:45:36,150 Okna, ali kaj podobnega. 774 00:45:36,150 --> 00:45:41,980 >> Tako da ni veliko skrb, saj Mislim, da je to program, prijava 775 00:45:41,980 --> 00:45:48,720 , ki je priložena OS X, na stotine ali tisoče ljudi ima 776 00:45:48,720 --> 00:45:50,020 pregledal to kodo. 777 00:45:50,020 --> 00:45:55,330 In tako, če je v kodi nekje, si reči, če je ta niz enak enak 778 00:45:55,330 --> 00:45:58,860 David je super, prijavo, nato pa je nekdo bo, kot, počakaj. 779 00:45:58,860 --> 00:45:59,800 To ni prav. 780 00:45:59,800 --> 00:46:01,790 To ne bi smelo biti tukaj. 781 00:46:01,790 --> 00:46:06,650 Torej, to je eden od načinov, smo dobili stvari da bi nekako varen. 782 00:46:06,650 --> 00:46:10,300 >> Ampak pomisli celo programov da ste napisali. 783 00:46:10,300 --> 00:46:13,000 Recimo, da ste napisal program za prijavo. 784 00:46:13,000 --> 00:46:20,440 Torej, to prijavo program, ki ga je napisal, torej je očitno, da ste dober 785 00:46:20,440 --> 00:46:21,210 programer. 786 00:46:21,210 --> 00:46:25,610 Saj ne bo dal zlonamerne če je x enak enaka David je super 787 00:46:25,610 --> 00:46:27,860 v kodi. 788 00:46:27,860 --> 00:46:31,930 Vendar ta program, kaj storiti, uporabite za pripravo tega programa? 789 00:46:31,930 --> 00:46:34,180 Nekaj ​​podobnega Jek. 790 00:46:34,180 --> 00:46:38,460 Pa kaj, če oseba, ki se je zgodilo napišite Jek special obloženega v Jek 791 00:46:38,460 --> 00:46:44,310 nekaj podobnega, če sem zbiranju prijavi se program, potem to kodo 792 00:46:44,310 --> 00:46:49,720 v program vpisu, ki pravi, če x je enaka enaka David je super? 793 00:46:49,720 --> 00:46:59,890 Torej, še ne čisto, ampak imamo isto izda tu, kjer Jek, dobro, 794 00:46:59,890 --> 00:47:03,790 tisoče, če ne na tisoče Ljudje, ki so pogledal Jek, imajo 795 00:47:03,790 --> 00:47:07,160 Pogledal svojih vrstic kode in dejal, Vse je v redu, nič ni slabo. 796 00:47:07,160 --> 00:47:10,680 Očitno je, da nihče ne počne kaj to zlonamerno. 797 00:47:10,680 --> 00:47:15,780 >> Toda kaj se sama Jek, kot so, Kaj pa, če prevedem Jek? 798 00:47:15,780 --> 00:47:20,900 Kaj, če imam nekaj prevajalnik, ki pripravlja Jek da vstavi v Jek 799 00:47:20,900 --> 00:47:25,610 to posebno kramp, ki pravi, vse v redu, ko sem zbrati Jek, nato 800 00:47:25,610 --> 00:47:31,290 izvršljiv sem se morala posebej pogledati znotraj programa vpisu in vložek 801 00:47:31,290 --> 00:47:34,230 To geslo je enaka enaka Dave je super? 802 00:47:34,230 --> 00:47:37,990 Torej, ne pozabite, da je vaš sam prevajalnik Treba je sestaviti na neki točki. 803 00:47:37,990 --> 00:47:42,810 Torej, če kaj se odločite, da pripravijo Jek s, sam je zlonamerno, potem 804 00:47:42,810 --> 00:47:45,580 mogoče priviti celotno Tako po vrsti. 805 00:47:45,580 --> 00:47:49,630 >> Torej, tukaj imamo Ken Thompson Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Torej je to ikonično fotografijo. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie je na desni strani. 808 00:47:55,470 --> 00:47:58,740 Bil je velik - 809 00:47:58,740 --> 00:48:03,640 precej napisal C. Torej si lahko mu zahvaljujem za ta razred. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson je na levi strani. 811 00:48:04,840 --> 00:48:07,780 Dva izmed njih v bistvu pisal UNIX. 812 00:48:07,780 --> 00:48:10,140 No, oni so najbolj prispevale v UNIX. 813 00:48:10,140 --> 00:48:11,310 Tam so bili nekateri drugi. 814 00:48:11,310 --> 00:48:16,240 Torej, Ken Thompson, na neki točki, osvoji Turing Award. 815 00:48:16,240 --> 00:48:20,860 In Turing nagrado, vedno sem slišal se sklicuje na ta način, da je 816 00:48:20,860 --> 00:48:23,100 Nobelova nagrada računalništva. 817 00:48:23,100 --> 00:48:27,500 >> Torej na Turing Award, mora dati zahvalnem govoru. 818 00:48:27,500 --> 00:48:31,790 In mu daje to zelo znanem govoru Zdaj, imenovano Razmišljanja o zaupljivi 819 00:48:31,790 --> 00:48:35,620 Zaupanje, ki smo povezani da se na spletni strani predmeta. 820 00:48:35,620 --> 00:48:41,670 In v tem govoru, pravi, vse v redu, zato sem napisal UNIX, in zdaj vsi 821 00:48:41,670 --> 00:48:43,320 ti ljudje uporabljajo UNIX. 822 00:48:43,320 --> 00:48:46,960 Zdaj, ne pozabite, danes, da je Linux neposredni potomec UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X neposredno uporablja UNIX. 824 00:48:50,140 --> 00:48:53,810 Windows ne tako veliko, vendar veliko idej so bili odvzeti iz Unixa. 825 00:48:53,810 --> 00:48:59,220 >> Torej, ko gre gor na oder in reče: V redu je, sem napisal UNIX. 826 00:48:59,220 --> 00:49:03,940 In samo zato, da veste, da sem možnost, da se prijavite na vsak 827 00:49:03,940 --> 00:49:05,590 niti eden od vaših računalnikov. 828 00:49:05,590 --> 00:49:14,280 Ker sem eden od teh posebnega, če x enaka enaka Ken Thomson je super, 829 00:49:14,280 --> 00:49:16,350 Nato mi je dovoljeno, da se prijavite. 830 00:49:16,350 --> 00:49:18,370 Torej, ljudje so kot dobro, Kako si to naredil? 831 00:49:18,370 --> 00:49:21,090 Pogledali smo na programu vpisu in nič ni tam. 832 00:49:21,090 --> 00:49:24,700 On je kot, no, sem spremenil prevajalnik za prijavo v program vpisu 833 00:49:24,700 --> 00:49:30,490 tako da bo program za prijavo zdaj da je x enak enaka Ken Thompson 834 00:49:30,490 --> 00:49:31,700 je super. 835 00:49:31,700 --> 00:49:33,120 >> In pravijo, no, da to ni res. 836 00:49:33,120 --> 00:49:35,740 Smo iskali na prevajalnik, in prevajalnik nima linije 837 00:49:35,740 --> 00:49:36,400 Šifra tako. 838 00:49:36,400 --> 00:49:40,540 On je tako, OK, ampak kaj ste sestavljanje prevajalnik z? 839 00:49:40,540 --> 00:49:44,810 In mislijo, in on je, kot, no, Jaz sem tisti, ki ti je dal prevajalnik 840 00:49:44,810 --> 00:49:50,580 boste uporabljali za izdelavo prevajalnik, tako ste sestavljanje prevajalnik, ki 841 00:49:50,580 --> 00:49:56,390 sam je zlonamerna, in bo prekinil program prijavo. 842 00:49:56,390 --> 00:49:59,360 Torej v bistvu, na tej točki, da je noben način si lahko ogledate na viru 843 00:49:59,360 --> 00:50:02,450 Koda programa vpisu da vidim, kaj je narobe. 844 00:50:02,450 --> 00:50:04,220 Nisi mogel niti pogledati v izvorno kodo prevajalnika 845 00:50:04,220 --> 00:50:06,790 da vidim, kaj je narobe. 846 00:50:06,790 --> 00:50:11,940 >> Ti bi morali gledati na stroju Koda, dejanski binarni od 847 00:50:11,940 --> 00:50:16,760 zbrati prevajalnik videti, čakaj, ti vrstic kode ne bi smel biti tukaj. 848 00:50:16,760 --> 00:50:22,130 Ampak Ken Thompson je to en korak še dlje in rekel, dobro, obstajajo 849 00:50:22,130 --> 00:50:25,980 ti posebni programi, ki dejansko vam brati binarno programov, 850 00:50:25,980 --> 00:50:29,340 in tako, če nekdo uporablja, da je program za preberite binarno, bi videli te 851 00:50:29,340 --> 00:50:30,490 vrstic kode. 852 00:50:30,490 --> 00:50:34,020 On je spremenjen teh programov za povedati, vsi V redu, če ste iskali na 853 00:50:34,020 --> 00:50:38,460 prevajalnik, ne kažejo, da to zlasti Niz binarno. 854 00:50:38,460 --> 00:50:42,830 >> Torej boste morali sprejeti, da korak naprej in v bistvu, bi lahko, da imajo 855 00:50:42,830 --> 00:50:46,210 sprejetih več ravni indirection, in na neki točki, nihče pravzaprav 856 00:50:46,210 --> 00:50:47,990 bodo preverjanje. 857 00:50:47,990 --> 00:50:52,590 Torej Nauk zgodbe je, da si ne bo treba pisati 858 00:50:52,590 --> 00:50:54,340 Zvoka v tem razredu. 859 00:50:54,340 --> 00:50:57,020 Boste uporabljali plezanje Jek veliko v tem razredu. 860 00:50:57,020 --> 00:51:00,490 Za vse, kar morate vedeti, Jek je zlonamerna Program, ki se sabotira vsak 861 00:51:00,490 --> 00:51:03,520 sam program ste kdaj zbrati. 862 00:51:03,520 --> 00:51:08,206 In da greš o tem zelo zlovešč Upoštevajte, vidimo v sredo. 863 00:51:08,206 --> 00:51:10,030 >> [APPLAUSE] 864 00:51:10,030 --> 00:51:12,935 >> SPEAKER 2: Na naslednjem CS50. 865 00:51:12,935 --> 00:51:14,580 >> ZVOČNIK 3: Ne drzni si reči, da. 866 00:51:14,580 --> 00:51:15,930 To lahko storite. 867 00:51:15,930 --> 00:51:19,440 Vi ste to storila prej, lahko to storite Danes, lahko to storite jutri. 868 00:51:19,440 --> 00:51:20,930 Ste to počne že vrsto let. 869 00:51:20,930 --> 00:51:22,790 Samo pojdi tja in to. 870 00:51:22,790 --> 00:51:24,310 To lahko storite. 871 00:51:24,310 --> 00:51:26,102 >> [Predvaja glasba]