1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [MUSIC Playing] 3 00:00:11,210 --> 00:00:12,100 >> ROB Boden: Rendben. 4 00:00:12,100 --> 00:00:15,620 Tehát, az első dolog az első, videó egy ismerős arc. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [VIDEÓ LEJÁTSZÁS] 7 00:00:22,560 --> 00:00:23,370 >> -Rendben. 8 00:00:23,370 --> 00:00:27,150 Ez CS50, és ez a kezdete három hét. 9 00:00:27,150 --> 00:00:29,980 Sajnálom, nem tudtam ott lenni veletek ma, de engedje meg, hogy bemutassam 10 00:00:29,980 --> 00:00:32,880 CS50 saját Rob Boden. 11 00:00:32,880 --> 00:00:33,872 >> [END VIDEÓ LEJÁTSZÁS] 12 00:00:33,872 --> 00:00:39,340 >> [Taps és éljenzés] 13 00:00:39,340 --> 00:00:41,277 >> ROB Boden: A filmográfia ben , hogy a videó fantasztikus. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Rendben van. 16 00:00:47,770 --> 00:00:50,960 Tehát először is, van még egy ebédet. 17 00:00:50,960 --> 00:00:52,330 Ez holnap 01:15. 18 00:00:52,330 --> 00:00:54,480 Nincs ebéd pénteken. 19 00:00:54,480 --> 00:00:55,810 Ez a Quora. 20 00:00:55,810 --> 00:01:00,190 És Tommy még nincs itt, de az egyik az emberek ott egykori vezetője CF, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Tehát ő egy jó ember. 23 00:01:02,730 --> 00:01:04,819 El kellene jönnöd. 24 00:01:04,819 --> 00:01:05,900 >> Rendben van. 25 00:01:05,900 --> 00:01:11,360 Így a múlt héten kezdtük törés egymástól arról, hogy mi a szöveg valójában. 26 00:01:11,360 --> 00:01:14,830 Már ismert, hiszen az elején, hogy ez egy karaktersor. 27 00:01:14,830 --> 00:01:18,130 De a múlt héten sokat foglalkoztunk az a tény, hogy ami valóban sorozata 28 00:01:18,130 --> 00:01:22,110 karakter, nos, most már tömbök karaktereket. 29 00:01:22,110 --> 00:01:26,450 És tudjuk, hogy a szöveg, ez egy sor A karakter, a legvégén, 30 00:01:26,450 --> 00:01:30,920 itt van ez a speciális NULL byte, ez visszaper 0, amely azt jelzi, a végén a 31 00:01:30,920 --> 00:01:32,230 a húr. 32 00:01:32,230 --> 00:01:36,970 >> És így a string tömb karakter, de lehet több, mint 33 00:01:36,970 --> 00:01:39,530 csak egy sor karakter, mi lehet egy sor olyan 34 00:01:39,530 --> 00:01:40,890 a fajta dolog, amit szeretnénk. 35 00:01:40,890 --> 00:01:51,570 Tehát, ha felidézni a múlt héten, a Ages program, David bevezette 36 00:01:51,570 --> 00:01:53,560 nagyon gyorsan. 37 00:01:53,560 --> 00:01:57,010 Tehát az első dolog, amit meg fogunk tenni a kéri a felhasználót egy egész szám, az 38 00:01:57,010 --> 00:01:58,800 több ember a szobában. 39 00:01:58,800 --> 00:02:01,260 Ha megvan, hogy egész, mi van érvényben, amely tömb. 40 00:02:01,260 --> 00:02:02,890 Figyeljük meg ezt a zárójeles formával. 41 00:02:02,890 --> 00:02:04,540 Meg fogod szokni ezt. 42 00:02:04,540 --> 00:02:09,430 >> Szóval nyilvánította egy sor egész nevezett korosztály, és van n 43 00:02:09,430 --> 00:02:12,080 egész számok ebben a tömbben. 44 00:02:12,080 --> 00:02:16,480 Szóval, ez a minta itt, ez a 4-int i értéke 0, i kisebb, mint n, i és 45 00:02:16,480 --> 00:02:20,580 Plusz, hogy szintén lesz egy mintát hogy Önnek nagyon régen. 46 00:02:20,580 --> 00:02:24,000 Mert elég sok, hogy te mindig lesz iterációkhoz tömbök. 47 00:02:24,000 --> 00:02:26,330 Úgy emlékszem, hogy n hossza a tömb. 48 00:02:26,330 --> 00:02:32,120 És itt vagyunk, többször kérte a kor a személy, a szobában. 49 00:02:32,120 --> 00:02:36,640 >> Ezután megyünk le, és bármilyen önkényes ok, akkor majd 50 00:02:36,640 --> 00:02:40,220 nyomtassa ki, mennyi idős mennek , hogy egy év múlva. 51 00:02:40,220 --> 00:02:49,980 És fut a program, most hogy a kor, pont perjel korosztály számára. 52 00:02:49,980 --> 00:02:53,010 Így több ember a szobában, mondjuk három. 53 00:02:53,010 --> 00:02:59,880 És azt mondják, az első, aki 13, a következő 26, és az utolsó 30 perc. 54 00:02:59,880 --> 00:03:05,080 Tehát akkor majd végighaladni a három emberek, nyomtassa ki a 14., 27., és 31.. 55 00:03:05,080 --> 00:03:16,060 >> Úgy emlékszem, hogy amikor kijelentjük egy tömb mérete n, az indexek, hogy az 56 00:03:16,060 --> 00:03:19,950 tömb, a tömb értékeit és indexek 0, 1, 2, egészen 57 00:03:19,950 --> 00:03:21,680 n-ig mínusz 1. 58 00:03:21,680 --> 00:03:26,255 Tehát, amikor azt mondta, hogy három ember a szobában, és tesszük itt 59 00:03:26,255 --> 00:03:29,850 Az első iteráció ezen keresztül hurok, én lesz 0-ra. 60 00:03:29,850 --> 00:03:31,650 Így a mutató 0-ra. 61 00:03:31,650 --> 00:03:34,540 Mi hozzárendelése az első kor a felhasználó belép. 62 00:03:34,540 --> 00:03:38,870 Aztán a következő, mi belépő második n a felhasználó belép, és 63 00:03:38,870 --> 00:03:40,580 mellett két, az utolsó n. 64 00:03:40,580 --> 00:03:44,200 >> Tehát észre, hogy egy sor méretű három, nem kell semmit 65 00:03:44,200 --> 00:03:46,040 Az index három. 66 00:03:46,040 --> 00:03:49,036 Ez nem érvényes. 67 00:03:49,036 --> 00:03:50,250 Rendben van. 68 00:03:50,250 --> 00:03:55,136 Szóval, megy vissza. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Most, hogy már foglalkozott tömbök, van néhány ismerős. 71 00:04:01,590 --> 00:04:03,780 Most fogunk lépni a parancs paramétereket, melyek lesznek 72 00:04:03,780 --> 00:04:05,890 elég releváns erre a problémára készlet. 73 00:04:05,890 --> 00:04:09,670 >> Tehát eddig, amikor már kijelentette, a fő funkciója, most már 74 00:04:09,670 --> 00:04:11,230 mondta int main semmis. 75 00:04:11,230 --> 00:04:14,070 Így érvénytelen csak azt jelenti, hogy az mi nem halad olyan 76 00:04:14,070 --> 00:04:16,440 érvek ezt a funkciót. 77 00:04:16,440 --> 00:04:19,190 Most fogjuk látni, hogy a fő eltarthat egy érvet. 78 00:04:19,190 --> 00:04:22,470 Itt hívjuk őket int argc és karakterlánc argv zárójelben. 79 00:04:22,470 --> 00:04:26,930 A konzolok, ismét, jelezve hogy van dolgunk tömbök. 80 00:04:26,930 --> 00:04:31,850 Tehát itt, karakterlánc argv konzolok, vagyunk foglalkozó egy sor húrok. 81 00:04:31,850 --> 00:04:35,360 Tehát argc, hogy fog, jelezve, Hány érv voltunk 82 00:04:35,360 --> 00:04:37,580 át ezt a programot. 83 00:04:37,580 --> 00:04:46,050 És látni, hogy ez mit jelent, Zárjuk ezt. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Tehát eddig, most már fut minden programot, mint a dot perjel korosztály számára. 86 00:04:50,790 --> 00:04:55,250 Azt is, meg a parancssorban, múlt át érveket, így a kifejezés, parancs 87 00:04:55,250 --> 00:04:56,550 paramétereket. 88 00:04:56,550 --> 00:04:59,760 Így az első érv, hello world. 89 00:04:59,760 --> 00:05:03,350 Tehát itt, argc lenne három. 90 00:05:03,350 --> 00:05:07,720 Ez a gróf érvek a parancssorban. 91 00:05:07,720 --> 00:05:12,840 Argc mindig legalább 1, mivel dot perjel korok, maga számít, mint az egyik 92 00:05:12,840 --> 00:05:14,490 a parancssori paramétereket. 93 00:05:14,490 --> 00:05:17,010 >> Ezután az első szia. 94 00:05:17,010 --> 00:05:20,460 Ha dot slash korosztály a nulladik, majd helló az első, és a világ a 95 00:05:20,460 --> 00:05:22,830 második parancssori argumentum. 96 00:05:22,830 --> 00:05:29,490 Így a húr argv fogunk látni, tartalmazza a húrok, pont perjel 97 00:05:29,490 --> 00:05:33,830 korosztály, hello, és a világ. 98 00:05:33,830 --> 00:05:38,945 És David kérésére megyünk lejátszani a videót bevezetésével ezt. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [VIDEÓ LEJÁTSZÁS] 101 00:05:43,890 --> 00:05:46,240 >> -Eddig a programokban voltunk írt, most már kijelentjük 102 00:05:46,240 --> 00:05:48,500 a fő, int main semmis. 103 00:05:48,500 --> 00:05:51,170 És ebben az időben, hogy semmis van egyszerűen csak meghatározza, hogy a 104 00:05:51,170 --> 00:05:54,430 program nem vállal semmilyen parancssori paramétereket. 105 00:05:54,430 --> 00:05:57,750 Más szóval, ha egy felhasználó egy fut programot, ő adhat parancsot 106 00:05:57,750 --> 00:06:01,710 argumentumok írásban további szavak vagy kifejezések után a program 107 00:06:01,710 --> 00:06:03,000 nevét a prompt. 108 00:06:03,000 --> 00:06:06,550 >> Nos, ha azt szeretné, hogy a program, hogy hogy parancssori paramétereket, egy vagy 109 00:06:06,550 --> 00:06:10,540 több ilyen szó, akkor ki kell cserélni elvesztésével egy pár érv. 110 00:06:10,540 --> 00:06:12,200 Így csináljuk. 111 00:06:12,200 --> 00:06:15,750 Tartalmazza CS50.h. 112 00:06:15,750 --> 00:06:19,360 Tartalmazza szabványos io.h. 113 00:06:19,360 --> 00:06:20,760 Int main. 114 00:06:20,760 --> 00:06:26,330 És most, ahelyett, hogy üres, fogok adjon meg egy int nevű argc, és 115 00:06:26,330 --> 00:06:28,780 tömb húrok nevű argv. 116 00:06:28,780 --> 00:06:31,820 Most, argc és argv egyszerűen egyezmények. 117 00:06:31,820 --> 00:06:34,000 >> Mi volna az úgynevezett ezeket az érveket a legtöbb, amit akarunk. 118 00:06:34,000 --> 00:06:37,630 De mi az a fontos, hogy a argc van int, mivel a meghatározás szerint ez 119 00:06:37,630 --> 00:06:41,360 majd, hogy tartalmazza az érv gróf, a szavak száma összesen, hogy a 120 00:06:41,360 --> 00:06:43,380 felhasználó beírt a saját prompt. 121 00:06:43,380 --> 00:06:47,910 argv eközben érv vektor, az lesz, hogy valóban egy tömb tároló 122 00:06:47,910 --> 00:06:52,020 az összes szó, hogy a felhasználó gépelt a saját prompt. 123 00:06:52,020 --> 00:06:54,500 >> Nézzük folytassa tenni valamit most egy vagy több ilyen 124 00:06:54,500 --> 00:06:55,660 parancssori paramétereket. 125 00:06:55,660 --> 00:07:00,070 Különösen, menjünk előre, és a nyomtatási bármilyen szót a felhasználó beír 126 00:07:00,070 --> 00:07:03,960 után a program nevét A prompt. 127 00:07:03,960 --> 00:07:04,730 Nyitó zárójel. 128 00:07:04,730 --> 00:07:06,240 Záró zárójel. 129 00:07:06,240 --> 00:07:10,510 Printf százalék s karakterláncot és vessző. 130 00:07:10,510 --> 00:07:14,550 És most el kell mondanom printf milyen értéket dugót, hogy helyőrző. 131 00:07:14,550 --> 00:07:18,600 Azt szeretné, hogy az első szó, a felhasználó gépelt után a program nevét, 132 00:07:18,600 --> 00:07:23,130 és így fogom megadni argv konzol 1, közel 133 00:07:23,130 --> 00:07:24,830 zárójel, pontosvessző. 134 00:07:24,830 --> 00:07:27,290 >> Nos, miért konzol 1 nem tartó 0-ra? 135 00:07:27,290 --> 00:07:30,990 Nos, kiderült, automatikusan tárolja A argv 0 lesz a 136 00:07:30,990 --> 00:07:32,620 program tényleges neve. 137 00:07:32,620 --> 00:07:36,180 Tehát az első szó, a felhasználó beír után, a program neve, a 138 00:07:36,180 --> 00:07:38,990 egyezmény lesz tárolt argv 1. 139 00:07:38,990 --> 00:07:42,380 Nézzük most összeállítja és a program futtatásához. 140 00:07:42,380 --> 00:07:47,780 >> Legyen argv 0 pont slash argv 0-ra. 141 00:07:47,780 --> 00:07:50,520 És most egy szó, mint a Hello. 142 00:07:50,520 --> 00:07:51,670 Adja meg a. 143 00:07:51,670 --> 00:07:53,520 És ott van ez, helló. 144 00:07:53,520 --> 00:07:55,750 >> [END VIDEÓ LEJÁTSZÁS] 145 00:07:55,750 --> 00:07:57,000 >> ROB Boden: Rendben. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Zárja be ezt. 148 00:08:01,230 --> 00:08:16,730 Tehát egy pillantást vetni, hogy a program, hogy Csak be nekünk, nos, csak 149 00:08:16,730 --> 00:08:24,710 mutatni, ha nyomtatni argv 0, hogy most mi az, argv 0 pont slash argv 0-ra. 150 00:08:24,710 --> 00:08:30,440 Szóval, ahogy várható volt, ez kinyomtatja az a program neve, hiszen argv a 0 151 00:08:30,440 --> 00:08:32,970 mindig lesz a A program megnevezése. 152 00:08:32,970 --> 00:08:35,640 De nézzük tenni valamit egy kicsit érdekes. 153 00:08:35,640 --> 00:08:42,080 >> Így a probléma meg, akkor be, hogy ezt a funkciót, atoi. 154 00:08:42,080 --> 00:08:44,440 Akkor mi használjuk atoi az? 155 00:08:44,440 --> 00:08:48,550 Ez lesz átalakítani a karakterlánc egy egész. 156 00:08:48,550 --> 00:08:53,280 Tehát, ha elmegyek a húr, egy, kettő, három, a atoi, hogy majd átalakítani, hogy 157 00:08:53,280 --> 00:08:56,910 Az egész, egy-kettő. 158 00:08:56,910 --> 00:09:01,480 Így megyünk konvertálni első parancssori argumentum egy egész szám, 159 00:09:01,480 --> 00:09:05,690 és aztán csak nyomtatni, hogy egész. 160 00:09:05,690 --> 00:09:09,680 >> Tehát alapvetően, vagyunk olyan reimplementing getInt, csak a 161 00:09:09,680 --> 00:09:12,350 egész szám megadása a parancssorban vonal helyett a programban 162 00:09:12,350 --> 00:09:14,560 interaktív. 163 00:09:14,560 --> 00:09:23,170 Tehát, hogy argv 0, csináljuk ez itt, és zárja be ezt. 164 00:09:23,170 --> 00:09:27,670 Így működik az argv 0, és nézzük meg a egész, egy kettő három négy egy kettő. 165 00:09:27,670 --> 00:09:30,840 Így fog nyomtatni az egész, egy két, három, négy, egy, kettő. 166 00:09:30,840 --> 00:09:35,500 Vannak olyan finomságok, hogy atoi hogy meg fog állni törődve semmit 167 00:09:35,500 --> 00:09:39,040 túl érvényes numerikus karakter, de ez nem számít. 168 00:09:39,040 --> 00:09:42,870 >> Nos, mit gondol, mi történik ha én ezt? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Segmentation hiba. 171 00:09:47,050 --> 00:09:50,410 Miért van ez? 172 00:09:50,410 --> 00:09:56,060 Ha visszatekintünk a programban vagyunk konvertáló argv 1, az első érv 173 00:09:56,060 --> 00:09:59,610 a program neve után, hogy egy egész szám. 174 00:09:59,610 --> 00:10:03,350 De nincs érv telt a program neve után. 175 00:10:03,350 --> 00:10:08,060 Tehát itt azt látjuk, hogy ez egy hibás programot, mert, ha megpróbáljuk futtatni 176 00:10:08,060 --> 00:10:10,530 nélkül érvek akkor csak összeomlik. 177 00:10:10,530 --> 00:10:16,950 >> Így egy másik közös vonása látni fogod olyasmi, mint, ha argc kevésbé 178 00:10:16,950 --> 00:10:21,100 mint két, jelezve, hogy nem volt legalább a program nevét, és a 179 00:10:21,100 --> 00:10:29,100 az első érv, aztán valami mint a printf, nem elég 180 00:10:29,100 --> 00:10:31,190 parancssori paramétereket. 181 00:10:31,190 --> 00:10:33,170 Ez valószínűleg nem egy jó nyomtatni, ez talán valami, mint a 182 00:10:33,170 --> 00:10:35,440 meg kell adnunk egy egész számot a parancssorban. 183 00:10:35,440 --> 00:10:37,450 Én csak a végén ott. 184 00:10:37,450 --> 00:10:39,600 És akkor vissza 1. 185 00:10:39,600 --> 00:10:44,740 Úgy emlékszem, hogy a végén a mi programot, ha vissza 0, ez a fajta 186 00:10:44,740 --> 00:10:47,060 jelzi sikerét. 187 00:10:47,060 --> 00:10:50,940 És a fő automatikusan értéke 0, ha nem. 188 00:10:50,940 --> 00:10:55,800 >> Tehát itt, mi retuning 1 jelzi , hogy ez nem a siker. 189 00:10:55,800 --> 00:11:01,000 És akkor vissza, amit akarsz, csak, 0 jelzi siker, és 190 00:11:01,000 --> 00:11:03,390 mást jelez. 191 00:11:03,390 --> 00:11:04,855 Szóval futni ezt a verziót a dolgok. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Tehát most, ha nem adja meg a parancssort érv, akkor az pontosan mondani 194 00:11:16,600 --> 00:11:18,290 Számunkra nem elég parancssorban. 195 00:11:18,290 --> 00:11:20,610 Nem fejezte be a mondatot. 196 00:11:20,610 --> 00:11:24,950 Máskülönben, ha valóban át ez az egyik, akkor a program elvégzéséhez. 197 00:11:24,950 --> 00:11:27,920 Tehát ez hogyan fogja használni argc a annak érdekében, hogy érvényesítse a számát 198 00:11:27,920 --> 00:11:30,630 parancssori argumentumokat valóban át. 199 00:11:30,630 --> 00:11:39,360 >> Szóval, hogy ez a program egy kicsit bonyolult, és nézd meg a második 200 00:11:39,360 --> 00:11:42,180 iteráció a dolgok. 201 00:11:42,180 --> 00:11:46,310 Tehát most, mi nem csak a nyomtatás a első parancssori argumentum. 202 00:11:46,310 --> 00:11:51,210 Itt vagyunk iterációjával az int i értéke 0, i kevesebb, mint argc, I Plus 203 00:11:51,210 --> 00:11:55,280 plusz, és a nyomtatás argv, i index. 204 00:11:55,280 --> 00:11:59,300 Tehát ezt a mintát, megint ez ugyanaz minta, mint korábban, kivéve, hogy 205 00:11:59,300 --> 00:12:02,600 hívja a változó n, mi használ argc. 206 00:12:02,600 --> 00:12:09,520 >> Tehát ez az iterációt minden index a tömb, és a nyomtatás minden 207 00:12:09,520 --> 00:12:11,910 eleme, hogy a tömbben. 208 00:12:11,910 --> 00:12:20,300 És így, amikor fut a program, nos, Én nem lépett be semmilyen parancsot 209 00:12:20,300 --> 00:12:22,540 érvek, így csak nyomtat a program nevét. 210 00:12:22,540 --> 00:12:26,053 Ha én meg egy csomó dolgot, akkor az kinyomtathat egy, mindegyik külön sorban. 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 Szóval vessünk egy lépéssel tovább. 214 00:12:34,770 --> 00:12:38,890 És ahelyett, hogy a nyomtatás minden érvelés külön sorban, hadd nyomtassa minden 215 00:12:38,890 --> 00:12:42,590 karakter minden egyes érvelés külön sorban. 216 00:12:42,590 --> 00:12:46,700 Úgy emlékszem, hogy argv az egy sor húrok. 217 00:12:46,700 --> 00:12:50,960 Tehát mi az a szöveg, de a egy sor karaktereket? 218 00:12:50,960 --> 00:12:57,140 Tehát ez azt jelenti, hogy argv valójában egy tömb egy sor karakter. 219 00:12:57,140 --> 00:13:04,920 Szóval, kihasználva, hogy a nézzük figyelmen kívül hagyja ezt most. 220 00:13:04,920 --> 00:13:08,190 Nézzük csak úgy a karakterlánc argv 0-ra. 221 00:13:08,190 --> 00:13:14,170 >> Tehát, ha azt akarjuk, hogy minden egyes karakter argv 0 külön sorba, akkor azt akarom, 222 00:13:14,170 --> 00:13:19,500 hogy ezt a mintát vagyunk szokva, i kevesebb, mint a hossza a tömb, 223 00:13:19,500 --> 00:13:23,990 ami itt, az strlen az, ami nem az, amit akarok, string 224 00:13:23,990 --> 00:13:26,450 s egyenlő argv 0-ra. 225 00:13:26,450 --> 00:13:30,390 Tehát i kisebb, mint a hossza a mi tömb, amely ebben az esetben egy tömb 226 00:13:30,390 --> 00:13:34,410 karakterekből i plus plus. 227 00:13:34,410 --> 00:13:41,040 És így, ahogy azt a múlt héten, ez ideális ha megyünk, hogy strlen kívül 228 00:13:41,040 --> 00:13:45,210 Az a feltétel, hiszen n lesz hozzá a strlen s minden alkalommal megyünk 229 00:13:45,210 --> 00:13:47,720 a hurok, és ez nem fog változni. 230 00:13:47,720 --> 00:13:50,230 Így fogjuk állítani egyenlő n ide. 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 Tehát most, mi az iterációt minden index a tömbben. 234 00:14:01,320 --> 00:14:05,630 És így, ha azt akarjuk, hogy nyomtassa ki az összes karakter ebben a tömbben, százalék c 235 00:14:05,630 --> 00:14:06,880 A zászlót szeretnénk használni karakterek. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 És most egy konzol i lesz a string index i karaktert, így ha a 238 00:14:19,770 --> 00:14:20,970 karakterlánc voltak helló. 239 00:14:20,970 --> 00:14:27,530 akkor s 0 lesz h, s konzol 1 e lesz, és így tovább. 240 00:14:27,530 --> 00:14:30,800 >> Tehát most szeretnénk kombinálni ez a két dolog. 241 00:14:30,800 --> 00:14:35,440 Szeretnénk nyomtatni minden egyes karakter Az egyes parancssori argumentum. 242 00:14:35,440 --> 00:14:38,950 Szóval megy, hogy a beágyazott a hurok. 243 00:14:38,950 --> 00:14:47,480 És hagyományosan, az első számláló Én vagyok az, a következő lesz j, n 244 00:14:47,480 --> 00:14:54,450 lesz a strlen az argv én, én kisebb, mint az n-, i plusz plusz. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 És most, ahelyett, hogy a nyomtatás argv i, így argv konzol i fog index - 247 00:15:06,870 --> 00:15:14,280 ez lesz az i-edik parancssori érv, argv i, j fog 248 00:15:14,280 --> 00:15:16,925 a j-edik karaktere Az i-edik érv. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Én megszabadulni ez itt most már mivel tedd abba a hurok. 251 00:15:24,810 --> 00:15:33,900 Tehát egyenértékű string s egyenlő argv i, majd s konzol j. 252 00:15:33,900 --> 00:15:36,980 >> Nos, nem kell bejelenteni ezt a változót s. 253 00:15:36,980 --> 00:15:44,530 Ehelyett, akkor csak össze ezeket Két abba, hogy mi volt, argv i, j. 254 00:15:44,530 --> 00:15:45,780 >> SPEAKER 1: [hallható]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB Boden: Jó döntés. 257 00:15:49,680 --> 00:15:52,936 Szóval ez van törve. 258 00:15:52,936 --> 00:15:55,510 Ha valóban futott, mi lenne felismerték ezt. 259 00:15:55,510 --> 00:16:01,210 Tehát a számláló törődöm ebben különösen 260 00:16:01,210 --> 00:16:05,410 hurok j, a bejáró. 261 00:16:05,410 --> 00:16:08,560 Szóval volna befut kérdések, valószínűleg egy végtelen ciklusba, ha 262 00:16:08,560 --> 00:16:09,540 nem rögzítette ezt. 263 00:16:09,540 --> 00:16:12,220 Ezért mi is beszélünk a hibakeresés ma. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Szóval a program futtatásához. 266 00:16:15,240 --> 00:16:21,200 És nézzük valóban hozzá egy külön printf itt, hogy csak nyomtatni 267 00:16:21,200 --> 00:16:27,480 másik vonalon, hiszen ez azt jelenti, ha a program futtatásához, lesz egy üres 268 00:16:27,480 --> 00:16:31,830 vonal egymástól jellege Minden parancssori argumentum. 269 00:16:31,830 --> 00:16:33,448 Nos, majd meglátjuk, hogy ez mit jelent. 270 00:16:33,448 --> 00:16:37,310 271 00:16:37,310 --> 00:16:37,790 Hopp. 272 00:16:37,790 --> 00:16:39,870 Van egy kis hiba. 273 00:16:39,870 --> 00:16:42,860 Hiba burkoltan kijelentette könyvtári funkció strlen. 274 00:16:42,860 --> 00:16:51,630 >> Szóval, megy vissza a programot, azt Elfelejtettem hash tartalmazza string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Tehát string.h lesz a header fájlt, amely kijelenti, 277 00:16:57,730 --> 00:16:58,980 A funkció strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, azt állítja össze. 280 00:17:06,060 --> 00:17:09,109 Na, fussunk neki. 281 00:17:09,109 --> 00:17:10,930 Szóval, csak ezt. 282 00:17:10,930 --> 00:17:17,790 Ez lesz, hogy nyomtassa ki a program nevét, hello world. 283 00:17:17,790 --> 00:17:23,510 Ez a nyomdába minden dolog, minden karakter, külön sorban. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Szóval tulajdonképpen ezt egy lépéssel tovább. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 És ahelyett, hogy a string.h, nézzük gondolni, hogy mi lenne végre a saját 288 00:17:39,700 --> 00:17:41,420 strlen funkciót. 289 00:17:41,420 --> 00:17:45,600 Szóval akkor azonnal adni funkció aláírást. 290 00:17:45,600 --> 00:17:52,900 Szóval hívja my_strlen, és ez megy, hogy egy sor, mint egy érv, 291 00:17:52,900 --> 00:17:57,220 és azt várjuk, hogy visszatérjen a hosszát, hogy a húr. 292 00:17:57,220 --> 00:18:03,430 Szóval, hol van az a srác? 293 00:18:03,430 --> 00:18:04,990 Igen. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Úgy emlékszem a korábbi diát, volt a múlt héten, hogy az 296 00:18:12,900 --> 00:18:18,890 tömb karakter, nos, egy string, Mondjuk, ez a string s. 297 00:18:18,890 --> 00:18:29,870 Tehát, ha s az a karakterlánc, hello, akkor, H-E-L-L-O, a memóriában, hogy fog 298 00:18:29,870 --> 00:18:35,610 lenni, és akkor ez a backslash 0. karakter. 299 00:18:35,610 --> 00:18:39,170 >> Szóval hogyan jutunk hosszát s? 300 00:18:39,170 --> 00:18:43,190 Nos, a trükk keresi ezt holtjáték 0 karakter, ez a null 301 00:18:43,190 --> 00:18:44,380 terminátor. 302 00:18:44,380 --> 00:18:50,270 Tehát az algoritmus lesz hogy valami hasonló pár 303 00:18:50,270 --> 00:18:51,510 Elég karakterek - 304 00:18:51,510 --> 00:18:56,180 vessünk ennek a keze képviselik számláló, nevezzük ezt int hossza. 305 00:18:56,180 --> 00:19:00,060 Tehát, kezdve itt vagyunk fog iterációkhoz a string. 306 00:19:00,060 --> 00:19:04,100 >> Tehát az első karakter, ez a H, és ez nem jött vissza perjel 0, így 307 00:19:04,100 --> 00:19:05,170 hossza 1 lehet. 308 00:19:05,170 --> 00:19:08,050 Hajtogat, hogy a következő karakter, E, és ez nem backslash 0-ra. 309 00:19:08,050 --> 00:19:09,630 Hossza 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 És végül, elérjük backslash 0, és így ez azt jelenti, nos, 314 00:19:16,690 --> 00:19:17,780 ez a szöveg vége. 315 00:19:17,780 --> 00:19:20,130 Tehát térjünk vissza 5. 316 00:19:20,130 --> 00:19:33,630 >> Tehát tulajdonképpen végrehajtó, az első, az n hosszúságú értéke 0, a jobb kezem. 317 00:19:33,630 --> 00:19:36,088 És fogunk iterációkhoz - 318 00:19:36,088 --> 00:19:38,000 >> SPEAKER 1: [Nem hallható] 319 00:19:38,000 --> 00:19:38,640 >> ROB Boden: Ó, lő. 320 00:19:38,640 --> 00:19:39,870 Jó ötlet. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 Tehát n hosszúságú értéke 0-ra. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Tehát most, míg s hossza nem azonos majd backslash 0-ra. 325 00:19:58,310 --> 00:20:04,660 Úgy emlékszem, ez a backslash 0, ez egy tényleges karakter, és ez azt jelzi, 326 00:20:04,660 --> 00:20:05,820 a végén a húr. 327 00:20:05,820 --> 00:20:09,850 Csakúgy, mint a szintén, backslash n tényleges karakter. 328 00:20:09,850 --> 00:20:14,040 Backslash 0 lesz, jelezve, végén a húr. 329 00:20:14,040 --> 00:20:15,414 Nem akarom, hogy, hogy van. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 És míg s indexelve hossza nem egyenlő a null terminátor, majd 332 00:20:25,620 --> 00:20:27,130 mi csak úgy növelni hosszát. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Tehát, a végén a program hossza végül fog 335 00:20:34,880 --> 00:20:37,610 5 legyen ebben az esetben. 336 00:20:37,610 --> 00:20:39,210 És akkor csak vissza hossza. 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 Tehát most itt, én nem do my_strlen. 340 00:20:48,290 --> 00:20:50,700 Nézzük össze, hogy megbizonyosodjon arról, minden zökkenőmentesen menjen végbe. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Csináltam 2? 343 00:20:58,210 --> 00:21:00,565 Vagy, hogy az 1? 344 00:21:00,565 --> 00:21:01,940 Hogy kell csinálni. 345 00:21:01,940 --> 00:21:02,690 Rendben van. 346 00:21:02,690 --> 00:21:08,490 Tehát ez argv 2. 347 00:21:08,490 --> 00:21:11,585 Működik, mint várható, annak ellenére, az volt, hogy az egyik én azt? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Igen. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Ez a verzió a dolgok nem voltak Az printf új vonal után, de a 352 00:21:21,820 --> 00:21:22,910 nem tesz különbséget. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Így dolgozott, mint várták. 355 00:21:25,780 --> 00:21:34,750 >> Most már mi is össze egy lépéssel tovább, ahol az értesítést itt is, 356 00:21:34,750 --> 00:21:38,920 először, mi megragadta a strlen az argv i, és mi az iterációt 357 00:21:38,920 --> 00:21:41,450 minden karakter, hogy a húr. 358 00:21:41,450 --> 00:21:47,480 Tehát ahelyett, hogy mi lenne, ha csak össze ezt a logikát a várakozás 359 00:21:47,480 --> 00:21:50,740 amíg elérünk backslash 0 jobb ebbe a hurok? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Így ismételget míg argv i, j nem nem egyenlő backslash 0-ra. 362 00:22:07,490 --> 00:22:10,680 Tehát fussunk neki először. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Rendben van. 365 00:22:21,180 --> 00:22:27,655 Tehát itt, ez a feltétel azt mondja - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 tisztázzuk ezt. 368 00:22:40,060 --> 00:22:49,140 Tehát most, legyen ez a mi argv. 369 00:22:49,140 --> 00:22:55,290 Tehát amikor én csak futott, hogy a program előtt, argv tömb a szálakat. 370 00:22:55,290 --> 00:23:03,100 És így, ha elindul a dot slash argv 2, hello world, akkor a argv 371 00:23:03,100 --> 00:23:07,650 maga hossza 3, az argv nulla, hello, és a világ. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> És belsejében minden egyes ilyen indexek, maga is egy tömb, amelyben ez lesz 374 00:23:19,660 --> 00:23:23,780 dot, ez lesz slash, nem tudom, ha ez volt a helyes irányba, azt 375 00:23:23,780 --> 00:23:25,680 Nem hiszem, hogy az volt. 376 00:23:25,680 --> 00:23:30,110 A-R-V kötőjel, több helyre van szüksége. 377 00:23:30,110 --> 00:23:32,570 Vágjuk ebbe a tömbbe. 378 00:23:32,570 --> 00:23:38,230 A-R-V kötőjel 0, majd backslash 0-ra. 379 00:23:38,230 --> 00:23:43,160 És akkor rendetlenség lesz helló. 380 00:23:43,160 --> 00:23:45,910 Mondjuk, H-E backslash 0-ra. 381 00:23:45,910 --> 00:23:51,130 És végül, W-O backslash 0-ra. 382 00:23:51,130 --> 00:23:59,730 >> Tehát az algoritmus, amit csak írt, A beágyazott a hurok, amit ők 383 00:23:59,730 --> 00:24:07,321 ennek az, hogy először a számláló i, majd a j. 384 00:24:07,321 --> 00:24:15,206 Ez lenne könnyebb kódot a képernyőn Menjünk vissza ehhez. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Tehát észre, hogy én az a bejáró, ami iterációt minden parancs 387 00:24:24,600 --> 00:24:25,610 argumentum. 388 00:24:25,610 --> 00:24:28,870 És j az iterátor iterációjával az egyes karaktert, hogy 389 00:24:28,870 --> 00:24:30,410 parancssori argumentum. 390 00:24:30,410 --> 00:24:46,755 Szóval mi ez a legbelső printf csinál van, mi 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, de most, argv 0 7 fog 392 00:24:58,680 --> 00:25:00,670 egyenlő backslash 0-ra. 393 00:25:00,670 --> 00:25:05,730 >> Szóval, akkor lépjen ki, hogy hurok, és most én Végig 1-re. 394 00:25:05,730 --> 00:25:10,910 És most mi lesz a nyomtatási argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 Nos, mivel én vágott helló rövid, argv 1 2 ismét lesz 396 00:25:17,040 --> 00:25:18,170 backslash 0-ra. 397 00:25:18,170 --> 00:25:25,050 És így, megnöveljük i és továbbra is, és így tovább, amíg ki kell nyomtatni az összes 398 00:25:25,050 --> 00:25:28,580 a világ, és a három parancssor érveket, és mi lépjen ki a 399 00:25:28,580 --> 00:25:31,670 A legkülső hurok, és befejezni a programot. 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 >> Úgyhogy gyere vissza. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Tehát akkor szert jártasságot parancssori argumentumok ezen 406 00:25:52,370 --> 00:25:54,460 adott probléma beállítva. 407 00:25:54,460 --> 00:25:56,630 >> Most, hibakeresés. 408 00:25:56,630 --> 00:26:01,680 Így talán már kellett tennie Néhány hibakeresés a korábbi 409 00:26:01,680 --> 00:26:03,120 probléma meg. 410 00:26:03,120 --> 00:26:08,420 És egy nagyon egyszerű módja a hibakeresés, Először is, nézzük meg a hibás programot. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 Nos, séta a program, fogunk kérni a felhasználót egy 413 00:26:23,830 --> 00:26:29,350 egész, megragad, hogy egész, majd önkényesen, van egy while ciklus, amely 414 00:26:29,350 --> 00:26:32,280 csak megy, hogy csökkentse Én, amíg ez egyenlő 10-ig. 415 00:26:32,280 --> 00:26:35,820 Nézzük csak fel, én belépő egy 10-nél nagyobb egész szám. 416 00:26:35,820 --> 00:26:38,700 Így csökkentse azt, amíg ez egyenlő 10-ig. 417 00:26:38,700 --> 00:26:42,630 >> És akkor még egy while ciklus , hogy bár én nem egyenlő 0, vagyunk 418 00:26:42,630 --> 00:26:44,540 majd csökkentse i 3. 419 00:26:44,540 --> 00:26:49,790 Tehát, ha úgy látja, a szándék a hiba itt, az az, hogy ez majd csökkentse i 420 00:26:49,790 --> 00:26:57,010 10, és akkor ez a while ciklus lesz dekrementálás i 10, 7, 4, 1, 421 00:26:57,010 --> 00:27:02,880 a negatív 2, 5 a negatív, és így tovább, a negatív végtelen, mert én is 422 00:27:02,880 --> 00:27:05,920 soha nem egyenlő 0-ra. 423 00:27:05,920 --> 00:27:08,610 És akkor a végén ezt a programot, mi van a foo függvény, amely 424 00:27:08,610 --> 00:27:12,130 folyik a nyomtatás, hogy én. 425 00:27:12,130 --> 00:27:16,520 >> Tehát ez egy rövid és triviális program és a hiba nyilvánvaló, 426 00:27:16,520 --> 00:27:18,790 különösen azután, hogy én csak azt mondta, amit a hiba volt. 427 00:27:18,790 --> 00:27:24,840 De a szándék itt is, nos, ez talán valóban úgy néz ki, mint néhány 428 00:27:24,840 --> 00:27:30,040 megoldások kapzsi az utolsó probléma meg, és talán te is, 429 00:27:30,040 --> 00:27:32,800 Néhány végtelen ciklusba a programban, , és fogalmad sincs, 430 00:27:32,800 --> 00:27:34,100 mi okozza. 431 00:27:34,100 --> 00:27:38,690 Tehát egy nagyon hasznos hibakereső módszer az, hogy csak add printf 432 00:27:38,690 --> 00:27:40,180 az egész a kódot. 433 00:27:40,180 --> 00:27:49,200 >> Tehát itt akarok printf kívül első while ciklus. 434 00:27:49,200 --> 00:27:53,155 És itt szeretnék egy printf, és én csak nyomtatni i. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Én még nem első while ciklus, i. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Kívül, a második while ciklus. 439 00:28:09,040 --> 00:28:12,170 Még egyszer, nyomtassa belül innen, az érték azt. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 És nézzük futtatásához. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Tehát pont perjel debug. 444 00:28:24,800 --> 00:28:25,610 Adjon meg egy egész számot. 445 00:28:25,610 --> 00:28:28,150 Csináljuk 13. 446 00:28:28,150 --> 00:28:28,760 És bumm. 447 00:28:28,760 --> 00:28:33,300 Látjuk, hogy mi vagyunk a végtelen hurok belül a második while ciklus. 448 00:28:33,300 --> 00:28:36,305 Most már tudjuk, hogy mi a hiba. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 De printf hibakeresés tökéletesen jó, de ha egyszer a programokat, hogy 451 00:28:45,610 --> 00:28:50,560 hosszabb és bonyolultabb, vannak kifinomultabb megoldások 452 00:28:50,560 --> 00:28:51,705 szerzés dolog működik. 453 00:28:51,705 --> 00:28:52,955 Szóval távolítsa el ezeket a printf. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 És nézzük, hogy biztos, hogy nem törj össze semmit. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Így a program megyünk bevezetni az úgynevezett 458 00:29:14,180 --> 00:29:16,715 GDB, GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 Nos, valóban, hadd vegye hibakeresés a a második, és a debug újra. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 Nos, tulajdonképpen az első, egy jó lecke a parancssori paramétereket. 463 00:29:34,440 --> 00:29:37,780 Figyeljük meg, hogy ez a csenget a parancs, hogy összeállítása minden továbbadása 464 00:29:37,780 --> 00:29:41,300 a parancssorban, ezek parancssori paramétereket. 465 00:29:41,300 --> 00:29:46,250 Tehát pontosan hogyan fog használni parancssori paramétereket, mint mi 466 00:29:46,250 --> 00:29:51,500 korábban, és mint akkor a Pset 2, ez hogyan csenget is használja őket. 467 00:29:51,500 --> 00:30:00,070 >> Tehát észre, hogy ez az első zászlót, kötőjel ggdb3, mi ez mondani, csenget, 468 00:30:00,070 --> 00:30:03,790 meg kell fordítani ezt a fájlt a szándékkal, hogy előbb-utóbb 469 00:30:03,790 --> 00:30:05,380 kell debug meg. 470 00:30:05,380 --> 00:30:13,840 Tehát, amíg van, hogy a zászló, akkor mi is GDB hibakereső. 471 00:30:13,840 --> 00:30:17,380 És akkor nyissa meg a GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> Tehát van egy csomó parancsok , hogy meg kell szokni. 473 00:30:22,920 --> 00:30:27,100 Először az egyik, hogy akkor valószínűleg azonnal szüksége van Run. 474 00:30:27,100 --> 00:30:28,200 Tehát mi a Run fog csinálni? 475 00:30:28,200 --> 00:30:30,910 Meg fog kezdeni a programot. 476 00:30:30,910 --> 00:30:36,180 Úgy fussatok, kezdve, a program kéri tőlünk, egy egész, 13. 477 00:30:36,180 --> 00:30:39,170 És akkor ez a végtelen hurok, mint várható, kivéve, eltávolították a 478 00:30:39,170 --> 00:30:40,500 printf, ezért nem is látni. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Kilépett rendesen. 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 Lehetséges, hogy csomagolva a fordítva, vissza - figyelmen kívül hagyva, hogy az. 484 00:30:53,640 --> 00:30:55,170 Tegyük fel, hogy nem léphet ki rendesen. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Van egy bonyolult választ. 487 00:31:03,370 --> 00:31:07,890 >> Tehát most, ez nem túl hasznos. 488 00:31:07,890 --> 00:31:11,480 Tehát csak futó programunk belsejében ez a debugger nem segít minket minden 489 00:31:11,480 --> 00:31:15,610 módon, hiszen lehetett volna most tett dot slash hibakeresési kívülről GDB. 490 00:31:15,610 --> 00:31:21,250 Tehát az egy parancsot, hogy akkor talán - 491 00:31:21,250 --> 00:31:22,970 és én kilép ezt. 492 00:31:22,970 --> 00:31:25,850 Control-d, vagy kilép, mind a munka. 493 00:31:25,850 --> 00:31:29,550 Szóval nyisd ki újra. 494 00:31:29,550 --> 00:31:31,130 >> Egy másik parancs, hogy akkor valószínűleg azonnal szeretné 495 00:31:31,130 --> 00:31:33,600 szokni a szünet. 496 00:31:33,600 --> 00:31:37,120 Így fogunk törni a legfontosabb most, majd leírom ezt. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 Nos, itt azt látjuk, mi meg a töréspontot ebben a sorban debug.c. 499 00:31:46,370 --> 00:31:50,160 Tehát mi szünet azt jelenti, hogy amikor én írja távon a program fog 500 00:31:50,160 --> 00:31:53,560 tovább fut, amíg Elütöttem egy töréspont. 501 00:31:53,560 --> 00:31:59,390 Tehát amikor elütöttem távon a program elindul, majd eltörik, amint 502 00:31:59,390 --> 00:32:01,940 belép a fő funkciója. 503 00:32:01,940 --> 00:32:06,930 Szünet fő lesz valami akkor elég gyakran csinálni. 504 00:32:06,930 --> 00:32:11,340 >> És most, hogy mutassam be néhány több parancsot. 505 00:32:11,340 --> 00:32:14,330 Figyeljük meg itt, hogy mondja meg tört at line 11, amely a 506 00:32:14,330 --> 00:32:16,230 printf, meg egy egész szám. 507 00:32:16,230 --> 00:32:21,260 Tehát a parancs következő lesz, hogy megyünk a következő kódsort. 508 00:32:21,260 --> 00:32:24,810 Ez most lehetővé teszi számunkra, hogy lépést keresztül a program sorról sorra. 509 00:32:24,810 --> 00:32:26,260 Így a következő. 510 00:32:26,260 --> 00:32:29,820 >> Most 12. sorban, megyünk hogy az egész. 511 00:32:29,820 --> 00:32:30,450 Tovább. 512 00:32:30,450 --> 00:32:34,290 És ha csak nyomd meg az Enter gombot, akkor az A legutolsó dolog, amit tett. 513 00:32:34,290 --> 00:32:36,480 Szóval nem kell beírni következő minden egyes alkalommal. 514 00:32:36,480 --> 00:32:40,100 Tehát meg egy egész szám, 13.. 515 00:32:40,100 --> 00:32:46,940 Tehát most, 14. sor, miközben a nagyobb mint 10, és én csinálni. 516 00:32:46,940 --> 00:32:48,685 És azt látjuk, megyünk csökkentse i. 517 00:32:48,685 --> 00:32:50,210 Így fogunk csökkentse i újra. 518 00:32:50,210 --> 00:32:53,620 >> Tehát most, egy másik hasznos parancs Print. 519 00:32:53,620 --> 00:32:55,750 Tehát Print fog kinyomtatni a változó értéke. 520 00:32:55,750 --> 00:32:57,825 Hozzuk ki az értéket Az i változó. 521 00:32:57,825 --> 00:32:58,705 Nézzük nyomtatni i. 522 00:32:58,705 --> 00:33:00,910 Azt fogja mondani i 11. 523 00:33:00,910 --> 00:33:03,330 Most ismét a Tovább gombra, amíg i értéke nagyobb, mint 10. 524 00:33:03,330 --> 00:33:05,590 Tehát én még mindig nagyobb, mint 10., mivel ez a 11.. 525 00:33:05,590 --> 00:33:06,920 i mínusz mínusz. 526 00:33:06,920 --> 00:33:08,250 Nézzük nyomtassa i újra. 527 00:33:08,250 --> 00:33:10,950 Ahogy az várható volt, ez 10. 528 00:33:10,950 --> 00:33:12,510 >> Tehát most, a következő. 529 00:33:12,510 --> 00:33:16,250 Ez megy vissza az a feltétele, i nagyobb, mint 10, de én most 10, így 530 00:33:16,250 --> 00:33:20,040 ez nem nagyobb, mint 10, így azt várjuk hogy kiesik a while ciklus. 531 00:33:20,040 --> 00:33:22,220 És most mi vagyunk az alábbiakban, hogy sor kódot. 532 00:33:22,220 --> 00:33:28,750 És egy másik parancs, lista, csak megy gombot az előző és a következő 533 00:33:28,750 --> 00:33:31,240 pár sornyi kódot, a esetben, ha elvesztette magát. 534 00:33:31,240 --> 00:33:35,420 Szóval csak elhagyta ezt a while ciklus, és most már be ezt a 535 00:33:35,420 --> 00:33:37,080 while ciklus, 18. sor. 536 00:33:37,080 --> 00:33:39,860 Tehát amíg én nem egyenlő 0-ra. 537 00:33:39,860 --> 00:33:46,570 És a következő, az i értéke i mínusz 3, és mi észre, ez akkor csak menj tovább. 538 00:33:46,570 --> 00:33:48,270 És mi lehet nyomtatni i. 539 00:33:48,270 --> 00:33:49,990 >> Minden parancs fajta van hivatkozások. 540 00:33:49,990 --> 00:33:51,720 Tehát p rövid a Print. 541 00:33:51,720 --> 00:33:53,400 Így lehet p i. 542 00:33:53,400 --> 00:33:57,550 Csak ne holding n, vagy csinálom a Tovább gombra. 543 00:33:57,550 --> 00:33:58,340 Print megint. 544 00:33:58,340 --> 00:34:00,380 Látod, most már a negatív 167. 545 00:34:00,380 --> 00:34:06,030 Tehát ez megy a végtelenségig, de nem tényleg örökre, mert most láttam, hogy 546 00:34:06,030 --> 00:34:09,330 valóban véget egy bizonyos ponton. 547 00:34:09,330 --> 00:34:15,699 >> Annak érdekében, hogy kezd GDB. 548 00:34:15,699 --> 00:34:19,504 De tegyük még egy dolog a GDB. 549 00:34:19,504 --> 00:34:20,754 Uh, debug. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Tehát, ebben a konkrét esetben a végtelen ciklusba történetesen belsejében 552 00:34:28,534 --> 00:34:30,050 a fő funkciója. 553 00:34:30,050 --> 00:34:35,779 És most, csak fogadd el, hogy én vagyok költözik a végtelen hurkot 554 00:34:35,779 --> 00:34:37,029 A foo függvény. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Ne feledd, hogy a végén ez programot, nos, ez eredetileg 557 00:34:43,730 --> 00:34:46,210 hívás foo, ami csak nyomdába i. 558 00:34:46,210 --> 00:34:51,880 De most mi hívás ize, ami majd csökkentse azt, amíg ez 0, és 559 00:34:51,880 --> 00:34:54,548 majd nyomtassa ki a változó. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Kivéve, hogy. 562 00:34:57,970 --> 00:35:00,175 Legyen debug. 563 00:35:00,175 --> 00:35:03,310 És most, gdb debug. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Tehát, ha én csak futni, akkor én nem fogok tudja, hogy ténylegesen lépni az én 566 00:35:10,580 --> 00:35:11,730 programot line-by-line. 567 00:35:11,730 --> 00:35:19,820 Tehát Nézzük a legfontosabb, majd írja futni. 568 00:35:19,820 --> 00:35:28,160 Így végig ezt, printf adja egy egész, hogy a egész, 13.. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Így fogjuk tartani csökkentő amíg az i nagyobb, mint 10 um. 571 00:35:37,490 --> 00:35:42,840 Majd megyünk esik át a while ciklus, és kap a vonal - 572 00:35:42,840 --> 00:35:44,364 nyissuk fel egy külön ablakban. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Így csökkenhet, míg én már nem volt nagyobb, mint 10, és aztán 575 00:35:53,300 --> 00:35:55,700 úgynevezett funkció ize. 576 00:35:55,700 --> 00:36:01,340 >> Szóval, mi történt, amint azt hit function ize, nos, az úgynevezett ize, és 577 00:36:01,340 --> 00:36:04,030 akkor már nem volt felett GDB. 578 00:36:04,030 --> 00:36:10,230 Tehát, amint hit Next ezt a sort, a dolgok egészen ez történt, 579 00:36:10,230 --> 00:36:12,400 ahol a program kilépett, amikor - 580 00:36:12,400 --> 00:36:14,450 Feltételezem, hogy nem létezik végül. 581 00:36:14,450 --> 00:36:16,390 Láttad szünet egy kicsit mégis. 582 00:36:16,390 --> 00:36:22,040 Akkor miért nem vesztek felett a program ezen a ponton? 583 00:36:22,040 --> 00:36:27,540 Nos, amikor azt írja továbbá, hogy megy A szó szerinti következő kódsort, hogy 584 00:36:27,540 --> 00:36:28,850 végrehajtja. 585 00:36:28,850 --> 00:36:35,950 Szóval miután line 21, a következő kódsor , amely végrehajtja a 22. sor, 586 00:36:35,950 --> 00:36:38,520 mely, kilépéskor fő. 587 00:36:38,520 --> 00:36:43,810 Szóval nem akarom, hogy csak menni a következő kódsort. 588 00:36:43,810 --> 00:36:48,170 Azt akarom, hogy menjen be a funkciót, ize, és akkor is át lehet lépni 589 00:36:48,170 --> 00:36:49,830 azok sornyi kódot. 590 00:36:49,830 --> 00:36:53,726 >> Tehát az, hogy van egy másik. 591 00:36:53,726 --> 00:36:56,770 Nézzük kilép újra. 592 00:36:56,770 --> 00:36:58,020 Szünet fő. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, a következő, a következő, a 13., a következő, a következő, a következő, óvatosan, 595 00:37:06,370 --> 00:37:09,820 mielőtt elérünk vonal foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Most vagyunk a sorban a 21., ahol meghívhatjuk az ize. 598 00:37:13,700 --> 00:37:17,100 Nem akarjuk, hogy írja be a következő, mivel ez majd csak hívja a function ize, és 599 00:37:17,100 --> 00:37:18,710 megy a következő kódsort. 600 00:37:18,710 --> 00:37:20,840 Mi azt akarjuk, hogy a lépés. 601 00:37:20,840 --> 00:37:25,690 Szóval van egy különbség a Step és a következő, ahol a lépés belép a 602 00:37:25,690 --> 00:37:28,190 működik, és a következő megy át a funkciót. 603 00:37:28,190 --> 00:37:32,830 Ez csak végrehajtja a teljes egészében a funkció és folyamatosan megy. 604 00:37:32,830 --> 00:37:37,210 >> Tehát Step fog hozni minket a funkciót, ize. 605 00:37:37,210 --> 00:37:41,160 És azt látjuk, itt, most, mi vissza ez a while ciklus, ami elméletileg, 606 00:37:41,160 --> 00:37:44,190 folytatódni fog örökké. 607 00:37:44,190 --> 00:37:50,420 És ha bejön lépésben, ha még csak nem is egy függvényt hívni, akkor ez 608 00:37:50,420 --> 00:37:51,720 megegyezik a Tovább gombra. 609 00:37:51,720 --> 00:37:55,320 Tehát ez csak, ha éppen egy sort, hogy hív egy függvényt, Step 610 00:37:55,320 --> 00:37:56,970 fog eltér a Tovább gombra. 611 00:37:56,970 --> 00:37:57,930 Így Step fog minket. 612 00:37:57,930 --> 00:38:02,100 Lépés, lépés, lépés, lépés, lépés, lépés, és mi csak végtelen ciklusba örökre. 613 00:38:02,100 --> 00:38:06,810 >> Szóval lehet szokni, hogy az Ön azonosításának módját végtelen hurkok, az 614 00:38:06,810 --> 00:38:08,960 csak tartja ezt az Enter billentyűt hol elakad. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Vannak jobb módja van, de most, hogy tökéletesen elegendő. 617 00:38:14,780 --> 00:38:17,967 És stílusa, hogy megfeleljenek a stílus 50, azt kellett volna ezt. 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 >> Tehát az egyik utolsó parancs bevezetni. 621 00:38:28,400 --> 00:38:30,810 Nos, a gdb hibakereső be 622 00:38:30,810 --> 00:38:35,580 Tehát ahelyett, hogy a törés a fő, ha ismeri a foo funkció is a 623 00:38:35,580 --> 00:38:39,230 probléma, akkor tudtam volna, csak mondta, break at ize helyett. 624 00:38:39,230 --> 00:38:42,310 Tegyük fel, hogy eltörnek mind a fő-és ize. 625 00:38:42,310 --> 00:38:45,390 Így be annyi töréspont amennyit csak akar. 626 00:38:45,390 --> 00:38:49,230 Amikor azt írja futni, ez lesz megállítani a - 627 00:38:49,230 --> 00:38:52,180 ó, hadd újrafordítani, hiszen Megváltoztattam a dolgokat. 628 00:38:52,180 --> 00:38:55,950 Majd meglátod ezt a sort, figyelmeztetés, forrás fájl újabb, mint futtatható. 629 00:38:55,950 --> 00:38:59,680 Tehát ez azt jelenti, hogy most ment itt és megváltoztatta ezek megfelelnek a stílus 630 00:38:59,680 --> 00:39:03,100 50, de nem újrafordítani a programot. 631 00:39:03,100 --> 00:39:04,870 Tehát GDB tesz engem vele. 632 00:39:04,870 --> 00:39:10,130 Majd kilép, hogy hibakeresés ismét hit gdb debug. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Tehát most, vissza, mit csinálok. 635 00:39:12,800 --> 00:39:15,720 Szünet fő, szünet ize. 636 00:39:15,720 --> 00:39:20,680 Most, ha a program futtatásához, így folytatjuk, amíg eléri a 637 00:39:20,680 --> 00:39:21,320 töréspont. 638 00:39:21,320 --> 00:39:24,680 Ez a töréspont történik az első, aki a legfontosabb. 639 00:39:24,680 --> 00:39:28,630 Most, ahelyett, hogy a következő, a következő, a következő, next, next, amíg elütöttem ize, azt 640 00:39:28,630 --> 00:39:35,230 írja is, amely továbbra is amíg el nem éred a következő töréspont. 641 00:39:35,230 --> 00:39:37,200 Azt meg kell adnia az egész első. 642 00:39:37,200 --> 00:39:40,570 Folytassa addig folytatódik, amíg elütöttem a következő töréspont, ami az, hogy 643 00:39:40,570 --> 00:39:43,320 funkciója ize. 644 00:39:43,320 --> 00:39:50,130 >> Így Run-ig tart bejön a töréspont, de csak akkor írja be a Futtatás 645 00:39:50,130 --> 00:39:54,060 kezded a programot, majd attól kezdve, hogy folytassa. 646 00:39:54,060 --> 00:40:01,950 Ha csak nem törik a fő-és akkor futott, akkor eltöröm a 647 00:40:01,950 --> 00:40:03,670 fő-, majd folytassa. 648 00:40:03,670 --> 00:40:10,050 Mivel én nem egy töréspontot a foo, adja meg az egész, akkor most én vagyok 649 00:40:10,050 --> 00:40:11,380 nem fog megtörni az ize. 650 00:40:11,380 --> 00:40:16,318 Ez csak megy, hogy végtelen loop addig. 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 >> Szóval ez Intro a GDB. 654 00:40:24,420 --> 00:40:27,790 Meg kell kezdeni a meg a probléma készletek. 655 00:40:27,790 --> 00:40:30,550 Ez nagyon hasznos lehet azonosítani a hibákat. 656 00:40:30,550 --> 00:40:35,280 Ha valóban csak, line-by-line, go át a kódot, és hasonlítsa össze mi 657 00:40:35,280 --> 00:40:39,740 valójában történik, mit vársz történik, akkor ez elég 658 00:40:39,740 --> 00:40:41,060 Nehéz nem észrevenni a hibákat. 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 >> Így a múlt héten Dávid hozta fel ezt a titkos kulcsú dolgot a 663 00:40:54,040 --> 00:40:59,350 első alkalommal, amikor nem akarjuk jelszavakat csak kell tárolni a 664 00:40:59,350 --> 00:41:03,210 számítógép néhány egyszerű szöveges fájl, ahol a valaki tud jönni, és csak 665 00:41:03,210 --> 00:41:04,660 nyissa fel, és olvassa el. 666 00:41:04,660 --> 00:41:07,530 Ideális esetben lennének titkosítva valamilyen módon. 667 00:41:07,530 --> 00:41:13,340 És a probléma Set 2, akkor lehet szó az egyik módszer a titkosítás, 668 00:41:13,340 --> 00:41:16,520 vagy, nos, a két módszer, de ezek nem olyan nagy. 669 00:41:16,520 --> 00:41:20,050 Ha a hacker kiadás, akkor is lesz szó 670 00:41:20,050 --> 00:41:22,150 dekódolás néhány dolgot. 671 00:41:22,150 --> 00:41:29,770 >> Tehát a kérdés most az, nos, akkor is, ha mi van a legerősebb titkosítási 672 00:41:29,770 --> 00:41:34,830 algoritmus a világon, ha úgy dönt a különösen rossz jelszót, akkor 673 00:41:34,830 --> 00:41:37,720 nem segít túl sokat, mivel az emberek továbbra is képes kitalálni. 674 00:41:37,720 --> 00:41:41,530 Ha látta a titkosított karaktersorozatot és úgy néz ki, mint a rendetlenség szemetet 675 00:41:41,530 --> 00:41:44,760 ez semmit sem jelent számukra, ha még csak meg kell próbálni néhány jelszó 676 00:41:44,760 --> 00:41:50,560 kitalálni, akkor nem túl biztonságos. 677 00:41:50,560 --> 00:41:55,890 Így néz egy video, hogy teszi, hogy a pont. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [VIDEÓ LEJÁTSZÁS] 680 00:42:00,970 --> 00:42:02,100 >> -Helmet, te gazember. 681 00:42:02,100 --> 00:42:03,370 Mi folyik itt? 682 00:42:03,370 --> 00:42:05,170 Mit csinálsz a lányommal? 683 00:42:05,170 --> 00:42:09,910 >> -Engedje meg, hogy bemutassam a ragyogó fiatal plasztikai sebész, Dr. Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, a legnagyobb orr munkahely férfi az egész 685 00:42:13,730 --> 00:42:16,080 világegyetem, Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -Felség. 687 00:42:17,210 --> 00:42:18,070 >> -Orr munkát? 688 00:42:18,070 --> 00:42:18,670 Nem értem. 689 00:42:18,670 --> 00:42:20,090 Ő már volt egy orr munkát. 690 00:42:20,090 --> 00:42:21,910 Ez egy édes tizenhat jelen van. 691 00:42:21,910 --> 00:42:22,140 >> -No. 692 00:42:22,140 --> 00:42:23,690 Ez nem az, amire gondolsz. 693 00:42:23,690 --> 00:42:25,420 Sokkal, sokkal rosszabb. 694 00:42:25,420 --> 00:42:30,300 Ha nem adja meg a kombináció a levegő pajzs, Dr. Schlotkin fog 695 00:42:30,300 --> 00:42:34,226 adja a lányát vissza a régi orrát. 696 00:42:34,226 --> 00:42:35,476 >> -No. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 Hol szerezted ezt? 699 00:42:40,516 --> 00:42:41,440 >> -Rendben. 700 00:42:41,440 --> 00:42:42,180 Megmondom. 701 00:42:42,180 --> 00:42:43,381 Megmondom. 702 00:42:43,381 --> 00:42:44,263 Nem, apu. 703 00:42:44,263 --> 00:42:45,590 Nem, nem szabad. 704 00:42:45,590 --> 00:42:46,860 >> -Igazad van, kedvesem. 705 00:42:46,860 --> 00:42:48,450 Hiányozni fog az új orrát. 706 00:42:48,450 --> 00:42:52,090 De nem fogom elmondani neki a kombináció, nem számít, mit. 707 00:42:52,090 --> 00:42:53,680 >> -Nagyon jól. 708 00:42:53,680 --> 00:42:55,685 Dr. Schlotkin, nem a legrosszabb. 709 00:42:55,685 --> 00:42:56,914 >> -Szívesen. 710 00:42:56,914 --> 00:43:00,690 >> [Munkagépek kihegyezett] 711 00:43:00,690 --> 00:43:01,910 >> -No. 712 00:43:01,910 --> 00:43:02,520 Várjon. 713 00:43:02,520 --> 00:43:03,836 Várjon. 714 00:43:03,836 --> 00:43:05,300 Megmondom. 715 00:43:05,300 --> 00:43:06,880 Megmondom. 716 00:43:06,880 --> 00:43:09,130 >> -Tudtam, hogy ez működni fog. 717 00:43:09,130 --> 00:43:09,900 Rendben van. 718 00:43:09,900 --> 00:43:12,850 Add ide nekem. 719 00:43:12,850 --> 00:43:16,918 >> -A kombináció egy. 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 >> -Kettő. 723 00:43:19,358 --> 00:43:19,846 >> -Kettő. 724 00:43:19,846 --> 00:43:20,822 >> -Kettő. 725 00:43:20,822 --> 00:43:21,310 >> -Három. 726 00:43:21,310 --> 00:43:21,798 >> -Három. 727 00:43:21,798 --> 00:43:22,774 >> -Három. 728 00:43:22,774 --> 00:43:23,262 >> Hatvankilenc. 729 00:43:23,262 --> 00:43:23,750 >> Hatvankilenc. 730 00:43:23,750 --> 00:43:26,150 >> Hatvankilenc. 731 00:43:26,150 --> 00:43:27,010 >> -Öt. 732 00:43:27,010 --> 00:43:27,670 >> -Öt. 733 00:43:27,670 --> 00:43:29,010 >> -Öt. 734 00:43:29,010 --> 00:43:34,770 >> -Tehát a kombináció egy, kettő, három, négy, öt. 735 00:43:34,770 --> 00:43:37,460 Ez a leghülyébb kombináció , Amit valaha hallottam életemben. 736 00:43:37,460 --> 00:43:39,710 Ez az a fajta dolog, amit egy idióta volna az ő poggyász. 737 00:43:39,710 --> 00:43:42,000 >> Köszönöm, Felség. 738 00:43:42,000 --> 00:43:43,530 >> -Mit csináltál? 739 00:43:43,530 --> 00:43:44,490 >> -Kikapcsoltam a falat. 740 00:43:44,490 --> 00:43:45,420 >> -Nem, nem. 741 00:43:45,420 --> 00:43:45,840 Ha ki van kapcsolva az egész filmet. 742 00:43:45,840 --> 00:43:46,930 >> -Azt kell nyomni a megfelelő gombot. 743 00:43:46,930 --> 00:43:48,265 >> Nos, tedd vissza. 744 00:43:48,265 --> 00:43:49,110 Tedd a filmet vissza. 745 00:43:49,110 --> 00:43:49,510 >> -Igen, uram. 746 00:43:49,510 --> 00:43:49,917 Igen, uram. 747 00:43:49,917 --> 00:43:50,324 >> -Menjünk, Arnold. 748 00:43:50,324 --> 00:43:51,140 Gyere, Gretchen. 749 00:43:51,140 --> 00:43:53,060 Persze, tudom, hogy akkor is kell a számla kiállításához ezt. 750 00:43:53,060 --> 00:43:53,440 >> [END VIDEÓ LEJÁTSZÁS] 751 00:43:53,440 --> 00:43:54,690 >> ROB Boden: Rendben. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Most, hogy mi már beszélünk biztonság bizonyos szempontból, szép 754 00:44:08,430 --> 00:44:16,050 kis film plakát, így az elmúlt nap, ezek a kérdések az NSA 755 00:44:16,050 --> 00:44:17,300 nyomon mindent. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 Nehéz lehet, hogy úgy érzi, mint te valamiféle magánélet 758 00:44:26,930 --> 00:44:34,540 online világban, bár azt nem tudta megmondani leginkább a részleteket PRISM. 759 00:44:34,540 --> 00:44:42,130 Tehát túllépve PRISM, nem megyünk meg kell beszélni, hogy most 760 00:44:42,130 --> 00:44:44,030 gondolj a laptop. 761 00:44:44,030 --> 00:44:48,360 Tehát itt, szeretnék váltani hogy a tényleges számla, 762 00:44:48,360 --> 00:44:50,370 az én kis pingvin. 763 00:44:50,370 --> 00:44:57,310 Szóval van egy jelszó beállítva, és hogy jelszó, amit akarok, hogy legyen. 764 00:44:57,310 --> 00:45:02,430 >> De ne feledjük, hogy amit én fakitermelés be, így ez a login 765 00:45:02,430 --> 00:45:04,850 prompt, néhány programot. 766 00:45:04,850 --> 00:45:07,910 Ez valami program volt írta néhány személy. 767 00:45:07,910 --> 00:45:13,250 És így, hogy az a személy, amennyiben különösen a rosszindulatú, tudtak 768 00:45:13,250 --> 00:45:17,780 azt mondta, rendben, így ha a jelszó hogy meg egyenlő a 769 00:45:17,780 --> 00:45:22,800 aktuális jelszót, vagy ez egyenlő Egyes speciális jelszót - 770 00:45:22,800 --> 00:45:25,550 David félelmetes, vagy valami - 771 00:45:25,550 --> 00:45:27,190 majd hagyd, hogy be 772 00:45:27,190 --> 00:45:33,760 Így egy rosszindulatú programozó volna hozzáférést biztosít az összes Mac, vagy a 773 00:45:33,760 --> 00:45:36,150 A Windows, vagy bármi. 774 00:45:36,150 --> 00:45:41,980 >> Szóval ez nem nagy aggodalomra ad okot, hiszen Úgy értem, ez a login program 775 00:45:41,980 --> 00:45:48,720 ami szállított OS X, több száz vagy több ezer ember 776 00:45:48,720 --> 00:45:50,020 felül ezt a kódot. 777 00:45:50,020 --> 00:45:55,330 És így, ha a kódot valahol, akkor azt mondják, ha ez a karakterlánc egyenlő az egyenlők 778 00:45:55,330 --> 00:45:58,860 David félelmetes, login, akkor valaki lesz, mint, várj. 779 00:45:58,860 --> 00:45:59,800 Ez nem helyes. 780 00:45:59,800 --> 00:46:01,790 Ez nem lehet itt. 781 00:46:01,790 --> 00:46:06,650 Tehát ez az egyik módja annak, hogy a dolgokat hogy milyen biztonságos. 782 00:46:06,650 --> 00:46:10,300 >> De gondolj még programok hogy írsz. 783 00:46:10,300 --> 00:46:13,000 Tegyük fel, hogy azt írta a login programot. 784 00:46:13,000 --> 00:46:20,440 Szóval ez a login programot, amit írt, Tehát nyilvánvaló, hogy van egy jó 785 00:46:20,440 --> 00:46:21,210 programozó. 786 00:46:21,210 --> 00:46:25,610 Ugye nem megy, hogy a rosszindulatú ha x értéke egyenlő David félelmetes 787 00:46:25,610 --> 00:46:27,860 be a kódot. 788 00:46:27,860 --> 00:46:31,930 De ez a program, mit használni fordítani ezt a programot? 789 00:46:31,930 --> 00:46:34,180 Valami ilyesmi csenget. 790 00:46:34,180 --> 00:46:38,460 Mi van, ha az a személy, aki történetesen levelet csenget speciális tokozású csenget 791 00:46:38,460 --> 00:46:44,310 valami ilyesmit, ha én vagyok összeállítása be a program, majd adja meg a kódot 792 00:46:44,310 --> 00:46:49,720 a login programot, amely azt mondja, ha a x értéke egyenlő David félelmetes? 793 00:46:49,720 --> 00:46:59,890 Tehát még nem teljesen, de ugyanaz a kérdés itt, ahol csenget, nos, 794 00:46:59,890 --> 00:47:03,790 ezer, ha nem több tízezer ember nézett csenget, van 795 00:47:03,790 --> 00:47:07,160 nézett a sornyi kódot, és azt mondta, minden rendben, nincs semmi rossz itt. 796 00:47:07,160 --> 00:47:10,680 Nyilvánvaló, hogy senki nem csinál semmit a rosszindulatú. 797 00:47:10,680 --> 00:47:15,780 >> De mi van csattanással is, mint mi van, ha össze csenget? 798 00:47:15,780 --> 00:47:20,900 Mit tegyek, ha van néhány fordítónak, hogy lefordul csenget, hogy szúr a csenget 799 00:47:20,900 --> 00:47:25,610 ezt a különleges hack, amely azt mondja, minden rendben, amikor össze csenget, majd a 800 00:47:25,610 --> 00:47:31,290 futtatható kapok meg kell külön keresni belül a login programot és betét 801 00:47:31,290 --> 00:47:34,230 ezt a jelszót, egyenlő az egyenlők Dave félelmetes? 802 00:47:34,230 --> 00:47:37,990 Úgy emlékszem, hogy a fordító maga kell összeállítani egy bizonyos ponton. 803 00:47:37,990 --> 00:47:42,810 Tehát, ha az, amit úgy dönt, hogy össze csenget is, maga a rosszindulatú, akkor 804 00:47:42,810 --> 00:47:45,580 lehet csavarni az egész út le a pályáról. 805 00:47:45,580 --> 00:47:49,630 >> Tehát itt van Ken Thompson és Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Tehát ez egy ikonikus fénykép. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie a jobb oldalon. 808 00:47:55,470 --> 00:47:58,740 Ő az egyik legfontosabb - 809 00:47:58,740 --> 00:48:03,640 nagyon sokat írt C, így köszönöm neki ezt az osztályt. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson van a bal oldalon. 811 00:48:04,840 --> 00:48:07,780 A kettő alapvetően írta UNIX. 812 00:48:07,780 --> 00:48:10,140 Nos, voltak nagy szerepük UNIX. 813 00:48:10,140 --> 00:48:11,310 Voltak mások. 814 00:48:11,310 --> 00:48:16,240 Tehát Ken Thompson, egy bizonyos ponton, megnyeri a Turing-díjat. 815 00:48:16,240 --> 00:48:20,860 És a Turing-díjat, én mindig hallottam úgy hivatkozott így, ez a 816 00:48:20,860 --> 00:48:23,100 Nobel-díj a számítógép-tudomány. 817 00:48:23,100 --> 00:48:27,500 >> Tehát a Turing-díjat, ő a adja az ő beszédében. 818 00:48:27,500 --> 00:48:31,790 És ő adja ezt a nagyon híres beszéd Most hívott Gondolatok Bízva 819 00:48:31,790 --> 00:48:35,620 Trust, amely már kapcsolódik Ahhoz, hogy a pályán honlapján. 820 00:48:35,620 --> 00:48:41,670 És ez a beszéd, azt mondja, jól van, ezért írtam UNIX, és most minden 821 00:48:41,670 --> 00:48:43,320 Ön ember használja UNIX. 822 00:48:43,320 --> 00:48:46,960 Nos, ne feledje, ma, hogy a Linux közvetlen leszármazottja UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X közvetlenül használja UNIX. 824 00:48:50,140 --> 00:48:53,810 A Windows nem annyira, de a sok Az ötletet vett UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Így aztán felmegy a színpadra, és azt mondja, Rendben, írtam UNIX. 826 00:48:59,220 --> 00:49:03,940 És csak hogy tudjátok, én vagyok tud bejelentkezni a minden 827 00:49:03,940 --> 00:49:05,590 egyetlen egy számítógépen. 828 00:49:05,590 --> 00:49:14,280 Mivel tettem egy ilyen különleges, ha x értéke egyenlő Ken Thomson félelmetes, 829 00:49:14,280 --> 00:49:16,350 akkor én szabad belépni. 830 00:49:16,350 --> 00:49:18,370 Tehát az emberek olyanok, mint, nos, Hogy csináltad? 831 00:49:18,370 --> 00:49:21,090 Megnéztük a login programot és semmi sem ott van. 832 00:49:21,090 --> 00:49:24,700 Olyan, mint, nos, én módosította a fordító hogy jelentkezzen be a login programot 833 00:49:24,700 --> 00:49:30,490 így a login program most lesz hogy x értéke egyenlő Ken Thompson 834 00:49:30,490 --> 00:49:31,700 félelmetes. 835 00:49:31,700 --> 00:49:33,120 >> És azt mondják, jó, ez nem igaz. 836 00:49:33,120 --> 00:49:35,740 Keressük a fordító, és a fordító nincs vonalak 837 00:49:35,740 --> 00:49:36,400 kód ilyesmi. 838 00:49:36,400 --> 00:49:40,540 Olyan, mint, rendben van, de mi van összeállítása a fordító az? 839 00:49:40,540 --> 00:49:44,810 És azt hiszik, és ő, mint, nos, Én vagyok az, aki adta a fordító 840 00:49:44,810 --> 00:49:50,580 Ön használja fordítani a fordító, így akkor összeállítása a fordító, hogy 841 00:49:50,580 --> 00:49:56,390 Maga rosszindulatú, és megtörni a login programot. 842 00:49:56,390 --> 00:49:59,360 Tehát alapvetően, ezen a ponton, ott van Nincs mód arra, hogy nézd meg a forrást 843 00:49:59,360 --> 00:50:02,450 kódja login programot , hogy mi a baj. 844 00:50:02,450 --> 00:50:04,220 Lehet nem is néz ki a forráskódját a fordító 845 00:50:04,220 --> 00:50:06,790 , hogy mi a baj. 846 00:50:06,790 --> 00:50:11,940 >> Meg kellene nézni a gépen kódot, a tényleges bináris a 847 00:50:11,940 --> 00:50:16,760 össze fordító látni, várj, ezek sornyi kódot nem kellene itt lennie. 848 00:50:16,760 --> 00:50:22,130 De Ken Thompson lépett egy lépéssel tovább, és azt mondta, jól van 849 00:50:22,130 --> 00:50:25,980 ezek a speciális programok, amelyek ténylegesen segít olvassa el a bináris programok, 850 00:50:25,980 --> 00:50:29,340 és így ha valaki használják, hogy a program olvassa el a bináris, akkor ezeket a 851 00:50:29,340 --> 00:50:30,490 sornyi kódot. 852 00:50:30,490 --> 00:50:34,020 Úgy módosították a programok mondani, minden jobb, ha ránézünk a 853 00:50:34,020 --> 00:50:38,460 fordító, ne jelenjen meg az adott meg a bináris. 854 00:50:38,460 --> 00:50:42,830 >> Szóval, akkor meg kell, hogy ezt a lépést tovább, és alapvetően, hogy lehetett volna 855 00:50:42,830 --> 00:50:46,210 venni többszintű indirekció, és egy bizonyos ponton, senki valójában 856 00:50:46,210 --> 00:50:47,990 lesz ellenőrzés. 857 00:50:47,990 --> 00:50:52,590 Tehát a történet tanulsága az, hogy te nem fog írni 858 00:50:52,590 --> 00:50:54,340 Csattanással ebben az osztályban. 859 00:50:54,340 --> 00:50:57,020 Fogsz használni hegymászás Csattanással sokat ebben az osztályban. 860 00:50:57,020 --> 00:51:00,490 Minden tudod, csenget egy rosszindulatú program, amely szabotálja minden 861 00:51:00,490 --> 00:51:03,520 egyetlen program, amit valaha is össze. 862 00:51:03,520 --> 00:51:08,206 És hagyom, hogy a nagyon baljós figyelmét, találkozunk szerdán. 863 00:51:08,206 --> 00:51:10,030 >> [Taps] 864 00:51:10,030 --> 00:51:12,935 >> SPEAKER 2: A következő CS50. 865 00:51:12,935 --> 00:51:14,580 >> SPEAKER 3: Nem merem mondani, hogy. 866 00:51:14,580 --> 00:51:15,930 Meg tudod csinálni. 867 00:51:15,930 --> 00:51:19,440 Ha már ilyet, meg tudod csinálni ma, meg tudod csinálni holnap. 868 00:51:19,440 --> 00:51:20,930 Már ezt évek óta. 869 00:51:20,930 --> 00:51:22,790 Csak menj oda, és erre a célra. 870 00:51:22,790 --> 00:51:24,310 Meg tudod csinálni. 871 00:51:24,310 --> 00:51:26,102 >> [MUSIC Playing]