1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [Speel van musiek] 3 00:00:11,210 --> 00:00:12,100 >> ROB BODEN: Alle reg. 4 00:00:12,100 --> 00:00:15,620 So, in die eerste ding wat eerste, video van 'n bekende gesig. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [Video speel] 7 00:00:22,560 --> 00:00:23,370 >> -Alle regte. 8 00:00:23,370 --> 00:00:27,150 Dit is CS50, en dit is die begin van die week, drie. 9 00:00:27,150 --> 00:00:29,980 Ek is jammer ek kon nie daar wees saam met jou vandag, maar laat my in te voer 10 00:00:29,980 --> 00:00:32,880 CS50 se eie Rob Boden. 11 00:00:32,880 --> 00:00:33,872 >> [Einde video speel] 12 00:00:33,872 --> 00:00:39,340 >> [Applous en CHEERS] 13 00:00:39,340 --> 00:00:41,277 >> ROB BODEN: Die filmografie in dat die video is fantasties. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Alle regte. 16 00:00:47,770 --> 00:00:50,960 So die eerste, daar is nog 'n middagete. 17 00:00:50,960 --> 00:00:52,330 Dit is môre by 01:15. 18 00:00:52,330 --> 00:00:54,480 Daar is geen middagete hierdie Vrydag. 19 00:00:54,480 --> 00:00:55,810 Dit is met Quora. 20 00:00:55,810 --> 00:01:00,190 En Tommy is nie hier nie, maar een van die mense daar is voormalige hoof CF, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 So hy is 'n prettige man. 23 00:01:02,730 --> 00:01:04,819 Jy moet kom. 24 00:01:04,819 --> 00:01:05,900 >> Alle regte. 25 00:01:05,900 --> 00:01:11,360 So verlede week, het ons begin uitmekaar breek oor wat 'n string werklik is. 26 00:01:11,360 --> 00:01:14,830 Ons het sedert die begin bekend dat dit is 'n reeks van karakters. 27 00:01:14,830 --> 00:01:18,130 Maar verlede week, het ons beweeg in die feit dat dit wat is regtig 'n reeks van 28 00:01:18,130 --> 00:01:22,110 karakters, wel, ons het nou ' skikkings van die karakters. 29 00:01:22,110 --> 00:01:26,450 En ons weet dat 'n string, dit is 'n verskeidenheid van die karakters, heel aan die einde, 30 00:01:26,450 --> 00:01:30,920 ons het hierdie spesiale nul byte, hierdie backslash 0, wat dui op die einde van 31 00:01:30,920 --> 00:01:32,230 die string. 32 00:01:32,230 --> 00:01:36,970 >> En so 'n string is 'n verskeidenheid van karakters, maar ons kan nie meer as 33 00:01:36,970 --> 00:01:39,530 net 'n verskeidenheid van die karakters, Ons kan 'n verskeidenheid van enige het 34 00:01:39,530 --> 00:01:40,890 tipe ding wat ons wil hê. 35 00:01:40,890 --> 00:01:51,570 So, as jy onthou van verlede week, die Ouderdomme program wat Dawid ingestel 36 00:01:51,570 --> 00:01:53,560 regtig vinnig. 37 00:01:53,560 --> 00:01:57,010 So die eerste ding wat ons gaan doen, is om vra die gebruiker vir 'n heelgetal is, die 38 00:01:57,010 --> 00:01:58,800 aantal mense in die kamer. 39 00:01:58,800 --> 00:02:01,260 Sodra ons daardie getal, ons verklaar 'n skikking. 40 00:02:01,260 --> 00:02:02,890 Let op hierdie bracket sintaksis. 41 00:02:02,890 --> 00:02:04,540 Jy gaan om gewoond te raak aan daardie. 42 00:02:04,540 --> 00:02:09,430 >> So ons is 'n verskeidenheid van heelgetalle verklaar genoem ouderdomme, en daar is n 43 00:02:09,430 --> 00:02:12,080 heelgetalle in hierdie reeks. 44 00:02:12,080 --> 00:02:16,480 So hierdie patroon reg hier, hierdie 4 int Ek is gelyk aan 0, i minder as n, i plus 45 00:02:16,480 --> 00:02:20,580 plus, wat ook gaan om 'n patroon te wees dat jy baie gebruik om te. 46 00:02:20,580 --> 00:02:24,000 Want dit is pretty much hoe jy altyd gaan Itereer oor skikkings. 47 00:02:24,000 --> 00:02:26,330 So onthou dat n die lengte van ons verskeidenheid. 48 00:02:26,330 --> 00:02:32,120 En so hier het ons herhaaldelik gevra vir die ouderdom van persoon wat ek in die kamer. 49 00:02:32,120 --> 00:02:36,640 >> Na dit, sal ons aftrek en vir watter arbitrêre rede, het ons dan 50 00:02:36,640 --> 00:02:40,220 druk hoe oud hulle gaan na 'n jaar van nou af. 51 00:02:40,220 --> 00:02:49,980 En hardloop die program, laat maak ouderdomme, dot streep ouderdomme. 52 00:02:49,980 --> 00:02:53,010 So aantal mense in die kamer, Kom ons sê daar is drie. 53 00:02:53,010 --> 00:02:59,880 En sê, die eerste persoon is 13, volgende is 26, en die laaste is 30. 54 00:02:59,880 --> 00:03:05,080 So dan sal dit Itereer oor die drie mense, uit te druk 14, 27 en 31. 55 00:03:05,080 --> 00:03:16,060 >> So onthou dat wanneer ons verklaar 'n verskeidenheid van grootte n, die indekse in daardie 56 00:03:16,060 --> 00:03:19,950 skikking, die skikking het waardes en indekse 0, 1, 2, al die pad 57 00:03:19,950 --> 00:03:21,680 tot N minus 1. 58 00:03:21,680 --> 00:03:26,255 So wanneer ons sê daar was drie mense in die kamer, en ons sit hier 59 00:03:26,255 --> 00:03:29,850 die eerste iterasie deur hierdie lus, is ek gaan wees 0. 60 00:03:29,850 --> 00:03:31,650 So in indeks 0. 61 00:03:31,650 --> 00:03:34,540 Ons is die toeken van die eerste ouderdom van die gebruiker. 62 00:03:34,540 --> 00:03:38,870 Toe ek in die volgende een, is ons die invoer van die tweede n die gebruiker, en in 63 00:03:38,870 --> 00:03:40,580 langs twee, die laaste n. 64 00:03:40,580 --> 00:03:44,200 >> So sien dat 'n skikking van die grootte drie nie iets 65 00:03:44,200 --> 00:03:46,040 in die indeks drie. 66 00:03:46,040 --> 00:03:49,036 Dit is nie geldig nie. 67 00:03:49,036 --> 00:03:50,250 Alle regte. 68 00:03:50,250 --> 00:03:55,136 So, gaan terug hier. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 So nou dat ons met skikkings gehandel het, Ons het 'n paar bekendheid. 71 00:04:01,590 --> 00:04:03,780 Nou gaan ons aan te beweeg na opdrag line argumente, wat gaan wees 72 00:04:03,780 --> 00:04:05,890 mooi relevant vir hierdie probleem stel. 73 00:04:05,890 --> 00:04:09,670 >> So tot nou toe, wanneer jy het verklaar jou hoof funksie, het ons 74 00:04:09,670 --> 00:04:11,230 gesê int belangrikste leemte. 75 00:04:11,230 --> 00:04:14,070 So nietig beteken net dat ons is nie verby 76 00:04:14,070 --> 00:04:16,440 argumente aan hierdie funksie. 77 00:04:16,440 --> 00:04:19,190 Nou gaan ons wat hoof te sien kan 'n paar argumente. 78 00:04:19,190 --> 00:04:22,470 Hier noem ons int argc en string bevat SPASIES hakies. 79 00:04:22,470 --> 00:04:26,930 Die hakies, weer, wat aandui dat ons te doen het met skikkings. 80 00:04:26,930 --> 00:04:31,850 So hier, string bevat SPASIES hakies, ons is die hantering van 'n verskeidenheid van snare. 81 00:04:31,850 --> 00:04:35,360 So argc, wat gaan om aan te dui hoeveel argumente wat ons het 82 00:04:35,360 --> 00:04:37,580 geslaag om hierdie program. 83 00:04:37,580 --> 00:04:46,050 En om te sien wat dit beteken, laat se sluit hierdie. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 So tot nou toe, het ons elke hardloop program soos dot streep ouderdomme. 86 00:04:50,790 --> 00:04:55,250 Ons kan ook op die opdrag lyn, verby slaag argumente, dus die term, opdrag 87 00:04:55,250 --> 00:04:56,550 line argumente. 88 00:04:56,550 --> 00:04:59,760 So het die eerste argument, hallo wêreld. 89 00:04:59,760 --> 00:05:03,350 So hier is, sal argc drie. 90 00:05:03,350 --> 00:05:07,720 Dit is die telling van die argumente op die opdrag lyn. 91 00:05:07,720 --> 00:05:12,840 Argc is altyd ten minste 1, sedert dot streep ouderdomme, self, tel dit as een van 92 00:05:12,840 --> 00:05:14,490 die command line argumente. 93 00:05:14,490 --> 00:05:17,010 >> Dan hallo is die eerste. 94 00:05:17,010 --> 00:05:20,460 As dot streep ouderdomme is die nulde, dan hallo is die eerste, en die wêreld is die 95 00:05:20,460 --> 00:05:22,830 tweede opdrag lyn argument. 96 00:05:22,830 --> 00:05:29,490 So het die string bevat SPASIES, ons gaan om te sien, bevat die snare, dot streep 97 00:05:29,490 --> 00:05:33,830 ouderdomme, hallo, en die wêreld. 98 00:05:33,830 --> 00:05:38,945 En, deur David se versoek, ons gaan 'n video wat die bekendstelling om te speel. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [Video speel] 101 00:05:43,890 --> 00:05:46,240 >> -Tot nou in programme wat ons het geskryf is, het ons verklaar 102 00:05:46,240 --> 00:05:48,500 hoof as int belangrikste leemte. 103 00:05:48,500 --> 00:05:51,170 En al hierdie tyd, daardie leemte het bloot spesifiseer dat die 104 00:05:51,170 --> 00:05:54,430 program nie enige neem command line argumente. 105 00:05:54,430 --> 00:05:57,750 Met ander woorde, wanneer 'n gebruiker loop 'n program, kan hy of sy voorsien opdrag 106 00:05:57,750 --> 00:06:01,710 line argumente deur die skryf van bykomende woorde of frases na die program se 107 00:06:01,710 --> 00:06:03,000 noem op die instruksielyn. 108 00:06:03,000 --> 00:06:06,550 >> Wel, as jy doen wat jy wil om jou program te neem command line argumente, een of 109 00:06:06,550 --> 00:06:10,540 meer sulke woorde, ons moet vervang leemte met 'n paar van die argumente. 110 00:06:10,540 --> 00:06:12,200 So laat ons dit doen. 111 00:06:12,200 --> 00:06:15,750 Sluit CS50.h. 112 00:06:15,750 --> 00:06:19,360 Sluit in standaard io.h. 113 00:06:19,360 --> 00:06:20,760 Int hoof. 114 00:06:20,760 --> 00:06:26,330 En nou, in plaas van leemte, ek gaan spesifiseer 'n int genoem argc, en 'n 115 00:06:26,330 --> 00:06:28,780 verskeidenheid van snare genoem bevat SPASIES. 116 00:06:28,780 --> 00:06:31,820 Nou, argc en bevat SPASIES is eenvoudig konvensies. 117 00:06:31,820 --> 00:06:34,000 >> Ons kon hierdie argumente genoem het die meeste enigiets wat ons wil hê. 118 00:06:34,000 --> 00:06:37,630 Maar wat belangrik is, is dat argc is 'n int, want per definisie, is dit 119 00:06:37,630 --> 00:06:41,360 gaan die argument telling te bevat, die aantal woorde in totaal wat die 120 00:06:41,360 --> 00:06:43,380 gebruiker getik op sy of haar onmiddellike. 121 00:06:43,380 --> 00:06:47,910 bevat SPASIES, intussen, argument vektor, is gaan eintlik 'n skikking te stoor wees 122 00:06:47,910 --> 00:06:52,020 al die woorde wat die gebruiker getik op sy of haar onmiddellike. 123 00:06:52,020 --> 00:06:54,500 >> Kom ons gaan nou iets te doen met een of meer van hierdie 124 00:06:54,500 --> 00:06:55,660 command line argumente. 125 00:06:55,660 --> 00:07:00,070 In die besonder, laat ons gaan voort en druk watter woord die gebruiker 126 00:07:00,070 --> 00:07:03,960 na die program se naam op die instruksielyn. 127 00:07:03,960 --> 00:07:04,730 Open bracket. 128 00:07:04,730 --> 00:07:06,240 Close bracket. 129 00:07:06,240 --> 00:07:10,510 Printf persent s backslash en komma. 130 00:07:10,510 --> 00:07:14,550 En nou het ek nodig printf watter waarde te vertel aan te sluit in dat bevat. 131 00:07:14,550 --> 00:07:18,600 Ek wil die eerste woord wat die gebruiker getik nadat die program se naam, 132 00:07:18,600 --> 00:07:23,130 en so ek gaan om te spesifiseer bevat SPASIES bracket 1, naby 133 00:07:23,130 --> 00:07:24,830 hakies, kommapunt. 134 00:07:24,830 --> 00:07:27,290 >> Nou, hoekom bracket 1 en nie bracket 0? 135 00:07:27,290 --> 00:07:30,990 Wel dit blyk, outomaties gestoor in bevat SPASIES 0 gaan wees om die 136 00:07:30,990 --> 00:07:32,620 program se werklike naam. 137 00:07:32,620 --> 00:07:36,180 Dus is die eerste woord wat die gebruiker na die program se naam is, deur 138 00:07:36,180 --> 00:07:38,990 konvensie, gaan wees gestoor in bevat SPASIES 1. 139 00:07:38,990 --> 00:07:42,380 Kom ons nou saam te stel en hierdie program. 140 00:07:42,380 --> 00:07:47,780 >> Maak bevat SPASIES 0, dot streep bevat SPASIES 0. 141 00:07:47,780 --> 00:07:50,520 En nou 'n woord soos Hello. 142 00:07:50,520 --> 00:07:51,670 Betree. 143 00:07:51,670 --> 00:07:53,520 En daar het ons dit, hallo. 144 00:07:53,520 --> 00:07:55,750 >> [Einde video speel] 145 00:07:55,750 --> 00:07:57,000 >> ROB BODEN: Alle reg. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Maak dit. 148 00:08:01,230 --> 00:08:16,730 So 'n blik op die program wat Ons het net aan ons voorgestel, goed, net 149 00:08:16,730 --> 00:08:24,710 om te wys, as ons druk bevat SPASIES 0, maak, nou Wat is dit, bevat SPASIES 0, dot streep bevat SPASIES 0. 150 00:08:24,710 --> 00:08:30,440 So, as wat verwag is, is dit die druk van die naam van die program, aangesien bevat SPASIES 0 is 151 00:08:30,440 --> 00:08:32,970 altyd gaan wees om die naam van die program. 152 00:08:32,970 --> 00:08:35,640 Maar laat ons iets doen 'n bietjie meer interessant. 153 00:08:35,640 --> 00:08:42,080 >> So in die probleem stel, sal jy bekendgestel aan hierdie funksie, atoi. 154 00:08:42,080 --> 00:08:44,440 So wat doen ons gebruik atoi vir? 155 00:08:44,440 --> 00:08:48,550 Dit gaan sit 'n string na 'n heelgetal. 156 00:08:48,550 --> 00:08:53,280 So as ek verby die string, een twee drie, te atoi, sal daardie skakel wat 157 00:08:53,280 --> 00:08:56,910 na die getal, een twee drie. 158 00:08:56,910 --> 00:09:01,480 So ons gaan die eerste om te skakel command line argument tot 'n heelgetal, 159 00:09:01,480 --> 00:09:05,690 en dan net druk wat heelgetal. 160 00:09:05,690 --> 00:09:09,680 >> So basies, is ons soort reimplementing getint, net die 161 00:09:09,680 --> 00:09:12,350 heelgetal is wat by die opdrag lyn in plaas van in die program 162 00:09:12,350 --> 00:09:14,560 interaktief. 163 00:09:14,560 --> 00:09:23,170 So dan, wat bevat SPASIES 0, kom ons doen dit in hier, en sluit dit. 164 00:09:23,170 --> 00:09:27,670 So hardloop bevat SPASIES 0, en laat ons betree die integer, een twee drie vier een twee. 165 00:09:27,670 --> 00:09:30,840 So dit sal die heelgetal druk, een twee drie vier een twee. 166 00:09:30,840 --> 00:09:35,500 Daar is 'n paar subtiele wat aan atoi dit sal ophou omgee oor enige iets 167 00:09:35,500 --> 00:09:39,040 buite 'n geldige numeriese karakter, maar dit maak nie saak. 168 00:09:39,040 --> 00:09:42,870 >> So, wat dink jy gebeur As ek dit doen? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Segmentering skuld. 171 00:09:47,050 --> 00:09:50,410 So hoekom is dit? 172 00:09:50,410 --> 00:09:56,060 As jy terug kyk op ons program, ons is omskakeling bevat SPASIES 1, die eerste argument 173 00:09:56,060 --> 00:09:59,610 na die program se naam, tot 'n heelgetal. 174 00:09:59,610 --> 00:10:03,350 Maar daar is geen argument geslaag na die program se naam. 175 00:10:03,350 --> 00:10:08,060 So hier is, sien ons dat dit 'n karretjie program, aangesien, as ons probeer om dit uit te voer 176 00:10:08,060 --> 00:10:10,530 sonder enige argumente, dit sal net crash. 177 00:10:10,530 --> 00:10:16,950 >> So 'n algemene patroon wat jy sien is iets soos, as argc minder 178 00:10:16,950 --> 00:10:21,100 as twee, wat aandui dat daar was nie ten minste die program naam en 'n 179 00:10:21,100 --> 00:10:29,100 eerste argument, dan sal ons iets doen soos printf, nie genoeg 180 00:10:29,100 --> 00:10:31,190 command line argumente. 181 00:10:31,190 --> 00:10:33,170 Dit is waarskynlik nie 'n goeie een om te druk, dit is waarskynlik iets soos 182 00:10:33,170 --> 00:10:35,440 jy moet 'n heelgetal tree op die opdrag lyn. 183 00:10:35,440 --> 00:10:37,450 Ek sal net die einde van dit daar. 184 00:10:37,450 --> 00:10:39,600 En dan terug 1. 185 00:10:39,600 --> 00:10:44,740 So onthou dat aan die einde van ons program, as ons terugkeer 0, dat die soort van 186 00:10:44,740 --> 00:10:47,060 dui sukses. 187 00:10:47,060 --> 00:10:50,940 En die belangrikste ook outomaties terugkeer 0 as jy dit nie doen nie. 188 00:10:50,940 --> 00:10:55,800 >> So hier is ons gestemd 1 aan te dui dat dit is nie 'n sukses. 189 00:10:55,800 --> 00:11:01,000 En jy kan terugkeer wat jy wil, net, 0 dui sukses, en 190 00:11:01,000 --> 00:11:03,390 iets anders dui mislukking. 191 00:11:03,390 --> 00:11:04,855 So laat ons hardloop hierdie weergawe van die dinge. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 So nou, as ons nie gaan nie 'n command line argument, dit sal korrek vertel 194 00:11:16,600 --> 00:11:18,290 ons nie genoeg command line. 195 00:11:18,290 --> 00:11:20,610 Het nie klaar is met die vonnis. 196 00:11:20,610 --> 00:11:24,950 Want as ons eintlik gee dit een, dit kan die program te voltooi. 197 00:11:24,950 --> 00:11:27,920 So dit is hoe jy argc sou gebruik in Om die aantal te bekragtig 198 00:11:27,920 --> 00:11:30,630 command line argumente wat eintlik geslaag. 199 00:11:30,630 --> 00:11:39,360 >> So kom ons maak hierdie program 'n bietjie meer ingewikkeld, en kyk na die tweede 200 00:11:39,360 --> 00:11:42,180 iterasie van dinge. 201 00:11:42,180 --> 00:11:46,310 So nou, ons is nie net die druk van die eerste opdrag lyn argument. 202 00:11:46,310 --> 00:11:51,210 Hier is ons iterating van int i gelykes 0, i minder as argc, i plus 203 00:11:51,210 --> 00:11:55,280 plus, en druk bevat SPASIES, indeks i. 204 00:11:55,280 --> 00:11:59,300 So hierdie patroon, weer, dit is dieselfde patroon as voorheen, behalwe in plaas 205 00:11:59,300 --> 00:12:02,600 van die roeping van die veranderlike n, gebruik ons ​​argc. 206 00:12:02,600 --> 00:12:09,520 >> So dit is iterating oor elke indeks in die skikking, en die druk van elke 207 00:12:09,520 --> 00:12:11,910 element in die skikking. 208 00:12:11,910 --> 00:12:20,300 En so, wanneer ons hierdie program, goed, Ek het nie 'n command line 209 00:12:20,300 --> 00:12:22,540 argumente, so dit is net druk die program se naam. 210 00:12:22,540 --> 00:12:26,053 As ek 'n klomp van die dinge, dit sal druk een, elk op sy eie lyn. 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 So laat neem hierdie 'n stap verder. 214 00:12:34,770 --> 00:12:38,890 En in plaas van die druk van elke argument op sy eie lyn, laat se druk elke 215 00:12:38,890 --> 00:12:42,590 karakter van elke argument op sy eie lyn. 216 00:12:42,590 --> 00:12:46,700 So onthou dat bevat SPASIES is 'n verskeidenheid van snare. 217 00:12:46,700 --> 00:12:50,960 So, wat is 'n string, maar 'n verskeidenheid van die karakters? 218 00:12:50,960 --> 00:12:57,140 So dit beteken dat bevat SPASIES is regtig 'n verskeidenheid van 'n verskeidenheid van die karakters. 219 00:12:57,140 --> 00:13:04,920 So neem voordeel van daardie, laat se ignoreer vir nou. 220 00:13:04,920 --> 00:13:08,190 Laat ons net kyk na die string bevat SPASIES 0. 221 00:13:08,190 --> 00:13:14,170 >> So as ons wil elke karakter te bring bevat SPASIES 0 op sy eie lyn, dan wil ek 222 00:13:14,170 --> 00:13:19,500 die patroon wat ons gewoond is om te doen, ek is minder as die lengte van die skikking, 223 00:13:19,500 --> 00:13:23,990 wat hier is, is strlen van, dis nie wat ek wil doen, string 224 00:13:23,990 --> 00:13:26,450 s gelyk bevat SPASIES 0. 225 00:13:26,450 --> 00:13:30,390 So ek is minder as die lengte van ons skikking, wat in hierdie geval is 'n skikking 226 00:13:30,390 --> 00:13:34,410 van die karakters, i plus plus. 227 00:13:34,410 --> 00:13:41,040 En so, soos ons verlede week gesien het, is dit die ideale As ons beweeg wat buite strlen 228 00:13:41,040 --> 00:13:45,210 van die toestand, sal sedert n byvoeg die StrLen van s elke keer as ons gaan 229 00:13:45,210 --> 00:13:47,720 deur die lus, en dit is nie gaan om te verander. 230 00:13:47,720 --> 00:13:50,230 So sal ons dit gelyk is aan n hier stel. 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 So nou, ons iterating oor elke indeks in die skikking. 234 00:14:01,320 --> 00:14:05,630 En so, as ons wil elke te druk karakter in die skikking, persent c is 235 00:14:05,630 --> 00:14:06,880 die vlag wat ons wil gebruik vir karakters. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 En nou 'n bracket ek gaan wees om die string, indeks karakter i, so as die 238 00:14:19,770 --> 00:14:20,970 string was hallo. 239 00:14:20,970 --> 00:14:27,530 dan is 0 gaan h te wees, s bracket 1 sal wees e, en so aan. 240 00:14:27,530 --> 00:14:30,800 >> So nou wil ons te kombineer Hierdie twee dinge. 241 00:14:30,800 --> 00:14:35,440 Ons wil elke karakter te druk van elke opdrag lyn argument. 242 00:14:35,440 --> 00:14:38,950 So ons gaan te hê 'n geneste for-lus. 243 00:14:38,950 --> 00:14:47,480 En konvensionele, die eerste counter EK, die volgende gaan j te wees, n 244 00:14:47,480 --> 00:14:54,450 sal die StrLen van bevat SPASIES ek, i minder as n, i plus plus. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 En nou in plaas van die druk bevat SPASIES i, so bevat SPASIES bracket ek gaan na die lys - 247 00:15:06,870 --> 00:15:14,280 wat gaan die i-de command line te wees argument, bevat SPASIES i, j gaan 248 00:15:14,280 --> 00:15:16,925 wees om die karakter van JTH die i-de argument. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Ek sal ontslae te raak van hierdie tot nou hier want ons het dit in daardie lus. 251 00:15:24,810 --> 00:15:33,900 So is gelykstaande aan string s gelykes bevat SPASIES i, en dan is bracket j. 252 00:15:33,900 --> 00:15:36,980 >> Wel, ons het nie nodig om te verklaar hierdie veranderlike is. 253 00:15:36,980 --> 00:15:44,530 In plaas daarvan, sal ons net kombineer hierdie twee in wat ons gehad het, bevat SPASIES i, j. 254 00:15:44,530 --> 00:15:45,780 >> Spreker 1: [onhoorbaar]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB BODEN: Goeie oproep. 257 00:15:49,680 --> 00:15:52,936 So dit is gebreek. 258 00:15:52,936 --> 00:15:55,510 As ek eintlik gehardloop het, sou ons het besef dit. 259 00:15:55,510 --> 00:16:01,210 So die toonbank ek omgee in hierdie besonder vir 260 00:16:01,210 --> 00:16:05,410 lus is j, die Iterator. 261 00:16:05,410 --> 00:16:08,560 So jy sou gehardloop het in kwessies, waarskynlik 'n oneindige lus, as ons 262 00:16:08,560 --> 00:16:09,540 het nie 'n vaste dit. 263 00:16:09,540 --> 00:16:12,220 Dit is hoekom ons ook praat Vandag oor die opsporing. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 So laat ons hierdie program. 266 00:16:15,240 --> 00:16:21,200 En laat ons eintlik voeg 'n aparte printf hier wat net sal druk 267 00:16:21,200 --> 00:16:27,480 'n ander lyn, want dit beteken wanneer ons hardloop die program, sal daar 'n leë wees 268 00:16:27,480 --> 00:16:31,830 lyn tussen elke karakter van elke opdrag lyn argument. 269 00:16:31,830 --> 00:16:33,448 Wel, ons sal sien wat dit beteken. 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 Het 'n paar fout. 273 00:16:39,870 --> 00:16:42,860 Fout onvoorwaardelik verklaar biblioteek funksie strlen. 274 00:16:42,860 --> 00:16:51,630 >> So gaan terug in ons program, het ek vergeet om te hash sluit string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 So string.h gaan wees om die kop lêer wat verklaar 277 00:16:57,730 --> 00:16:58,980 die funksie strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, dit stel. 280 00:17:06,060 --> 00:17:09,109 Nou, laat ons voer dit uit. 281 00:17:09,109 --> 00:17:10,930 So net dat. 282 00:17:10,930 --> 00:17:17,790 Dit gaan om uit te druk ons program se naam, hallo wêreld. 283 00:17:17,790 --> 00:17:23,510 Dit gaan elke ding om te druk, elke karakter, op sy eie lyn. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> So laat ons eintlik neem hierdie 'n stap verder. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 En in plaas van die gebruik van string.h, laat dink oor hoe ons wil implementeer ons eie 288 00:17:39,700 --> 00:17:41,420 strlen funksie. 289 00:17:41,420 --> 00:17:45,600 So ek sal onmiddellik gee 'n funksie handtekening. 290 00:17:45,600 --> 00:17:52,900 So kom ons noem in my_strlen, en dit is gaan 'n string te neem as 'n argument, 291 00:17:52,900 --> 00:17:57,220 en ons verwag om terug te keer die lengte van die string. 292 00:17:57,220 --> 00:18:03,430 So, waar is die man? 293 00:18:03,430 --> 00:18:04,990 Ja. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 So onthou van die vorige skyfie wat was ook van verlede week, wat 'n 296 00:18:12,900 --> 00:18:18,890 verskeidenheid van die karakters, wel, 'n string, so kom ons sê dit is ons string s. 297 00:18:18,890 --> 00:18:29,870 So as s is die string, hallo, dan, H-E-L-L-O, in die geheue, wat gaan 298 00:18:29,870 --> 00:18:35,610 wees, en dan is dit backslash 0 karakter. 299 00:18:35,610 --> 00:18:39,170 >> So hoe kry ons die lengte van s? 300 00:18:39,170 --> 00:18:43,190 Wel, die truuk soek vir hierdie teenreaksie 0 karakter, hierdie null 301 00:18:43,190 --> 00:18:44,380 Terminator. 302 00:18:44,380 --> 00:18:50,270 So het die algoritme gaan iets soos min te wees 303 00:18:50,270 --> 00:18:51,510 genoeg karakters wat - 304 00:18:51,510 --> 00:18:56,180 laat ons hierdie kant verteenwoordig 'n paar counter, kom ons noem dit int lengte. 305 00:18:56,180 --> 00:19:00,060 So, begin van hier, ons is gaan Itereer oor ons tou. 306 00:19:00,060 --> 00:19:04,100 >> Dus is die eerste karakter, dit is H, en dit is nie terug streep 0, so 307 00:19:04,100 --> 00:19:05,170 die lengte is 1. 308 00:19:05,170 --> 00:19:08,050 Itereer na die volgende karakter, E, en dit is nie agteroorskuisstreep 0. 309 00:19:08,050 --> 00:19:09,630 Lengte is 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 En uiteindelik, kom ons backslash 0, en so dit beteken dat, wel, 314 00:19:16,690 --> 00:19:17,780 hierdie string is verby. 315 00:19:17,780 --> 00:19:20,130 So laat ons terugkeer 5. 316 00:19:20,130 --> 00:19:33,630 >> So eintlik die uitvoering van die eerste, my n lengte is gelyk aan 0, my regterhand. 317 00:19:33,630 --> 00:19:36,088 En ons gaan Itereer - 318 00:19:36,088 --> 00:19:38,000 >> Spreker 1: [onhoorbaar] 319 00:19:38,000 --> 00:19:38,640 >> ROB BODEN: O, skiet. 320 00:19:38,640 --> 00:19:39,870 Goeie oproep. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 So n lengte is gelyk aan 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 So nou, terwyl s lengte nie gelyk en dan, backslash 0. 325 00:19:58,310 --> 00:20:04,660 So onthou, hierdie backslash 0, is dit 'n werklike karakter, en dit dui 326 00:20:04,660 --> 00:20:05,820 die einde van die string. 327 00:20:05,820 --> 00:20:09,850 Net soos, ook backslash n 'n werklike karakter. 328 00:20:09,850 --> 00:20:14,040 Agteroorskuisstreep 0 gaan om aan te dui die einde van ons reeks. 329 00:20:14,040 --> 00:20:15,414 Ek wil nie dat daar te vestig. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 En terwyl s geïndekseer deur lengte is nie gelyk aan die nul terminator, dan 332 00:20:25,620 --> 00:20:27,130 ons is maar net gaan om lengte te inkrementeer. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 So dan, aan die einde van ons program, lengte uiteindelik gaan 335 00:20:34,880 --> 00:20:37,610 wees 5 in hierdie geval. 336 00:20:37,610 --> 00:20:39,210 En ons sal net terug lengte. 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 So nou hier, ek doen nie doen my_strlen. 340 00:20:48,290 --> 00:20:50,700 Kom ons stel dit om seker te maak alles vlot verloop. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Was ek doen in 2? 343 00:20:58,210 --> 00:21:00,565 Of was dit 1? 344 00:21:00,565 --> 00:21:01,940 Dit moet doen. 345 00:21:01,940 --> 00:21:02,690 Alle regte. 346 00:21:02,690 --> 00:21:08,490 So is dit bevat SPASIES 2. 347 00:21:08,490 --> 00:21:11,585 Werk as wat verwag is, hoewel was dat die een wat ek het dit in? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Ja. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Hierdie weergawe van die dinge het nie die printf nuwe lyn na, maar dit 352 00:21:21,820 --> 00:21:22,910 nie 'n verskil maak. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 So het as wat verwag is. 355 00:21:25,780 --> 00:21:34,750 >> Nou kan ons selfs kombineer hierdie een stap verder, waar kennis hier, wel, 356 00:21:34,750 --> 00:21:38,920 Eerstens, ons is die StrLen van bevat SPASIES gryp Ek, en dan is ons iterating oor 357 00:21:38,920 --> 00:21:41,450 elke karakter in die string. 358 00:21:41,450 --> 00:21:47,480 So in plaas van om dit te doen, wat as ons net kombineer die logika van wag 359 00:21:47,480 --> 00:21:50,740 totdat ons getref backslash 0 reg in hierdie lus? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 So Itereer terwyl bevat SPASIES i, j doen nie gelyk backslash 0. 362 00:22:07,490 --> 00:22:10,680 So laat loop dit die eerste keer. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Alle regte. 365 00:22:21,180 --> 00:22:27,655 So hier is, is hierdie toestand te sê - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 laat dit duidelik dat. 368 00:22:40,060 --> 00:22:49,140 So nou, laat dit ons bevat SPASIES. 369 00:22:49,140 --> 00:22:55,290 So toe ek net hardloop die program voor, bevat SPASIES is 'n verskeidenheid van snare. 370 00:22:55,290 --> 00:23:03,100 En so, as ek loop dit met dot streep bevat SPASIES 2, Hello World, dan is die bevat SPASIES 371 00:23:03,100 --> 00:23:07,650 self is lengte van 3, vir bevat SPASIES nul, hallo, en die wêreld. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> En binnekant van elk van hierdie indekse is, self 'n skikking, waar dit sal wees 374 00:23:19,660 --> 00:23:23,780 dot, dit sal streep wees, weet ek nie As dit was die regte rigting, ek 375 00:23:23,780 --> 00:23:25,680 dink nie dit was nie. 376 00:23:25,680 --> 00:23:30,110 A-R-V Dash, het meer ruimte nodig. 377 00:23:30,110 --> 00:23:32,570 Kom ons sny in die skikking. 378 00:23:32,570 --> 00:23:38,230 A-R-V Dash 0, en dan backslash 0. 379 00:23:38,230 --> 00:23:43,160 En dan in wanorde sal wees hallo. 380 00:23:43,160 --> 00:23:45,910 Kom ons sê, H-E backslash 0. 381 00:23:45,910 --> 00:23:51,130 En uiteindelik, W-O backslash 0. 382 00:23:51,130 --> 00:23:59,730 >> So het die algoritme wat ons het net geskryf het, Die geneste vir loops, wat hulle 383 00:23:59,730 --> 00:24:07,321 doen, is, moet ons eers die werk i en dan j. 384 00:24:07,321 --> 00:24:15,206 Dit sou makliker met 'n kode op die wees skerm, Kom terug te gaan nie. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 So sien dat ek is die Iterator dis iterating oor elke opdrag 387 00:24:24,600 --> 00:24:25,610 lyn argument. 388 00:24:25,610 --> 00:24:28,870 En j is die Iterator iterating oor elke karakter in daardie 389 00:24:28,870 --> 00:24:30,410 command line argument. 390 00:24:30,410 --> 00:24:46,755 So, wat hierdie innerlike printf doen is, het ons printf bevat SPASIES 0 0, printf 391 00:24:46,755 --> 00:24:58,680 bevat SPASIES 0 1, printf bevat SPASIES 0 2, 3 0, 0 4, 0 5, 0 6, maar nou, bevat SPASIES 0 7 gaan 392 00:24:58,680 --> 00:25:00,670 gelyk backslash 0. 393 00:25:00,670 --> 00:25:05,730 >> So het ons verlaat dat lus, en nou kan ek iterate 1. 394 00:25:05,730 --> 00:25:10,910 En nou gaan ons te druk bevat SPASIES 1 0, bevat SPASIES 1 1 - 395 00:25:10,910 --> 00:25:17,040 Wel, nou, aangesien Ek sny hallo kort, bevat SPASIES 1 2 is weer aan die gang te wees 396 00:25:17,040 --> 00:25:18,170 backslash 0. 397 00:25:18,170 --> 00:25:25,050 En so, inkrementeer i en voort te gaan, en so aan, totdat ons druk al 398 00:25:25,050 --> 00:25:28,580 wêreld, en dit is drie command line argumente, en ons sal uitgang uit 399 00:25:28,580 --> 00:25:31,670 die buitenste lus, en klaar is met ons 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 >> So laat ons terug te kom hier. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 So sal jy 'n paar vertroudheid met kry command line argumente op hierdie 406 00:25:52,370 --> 00:25:54,460 spesifieke probleem stel. 407 00:25:54,460 --> 00:25:56,630 >> Nou, debugging. 408 00:25:56,630 --> 00:26:01,680 So het jy waarskynlik reeds te doen gehad sommige debugging met jou vorige 409 00:26:01,680 --> 00:26:03,120 probleem stel. 410 00:26:03,120 --> 00:26:08,420 En 'n baie maklike manier om ontfouting, Eerstens, laat ons kyk na 'n karretjie program. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 Wel, loop deur middel van hierdie program, ons gaan die gebruiker vir 'n om te vra 413 00:26:23,830 --> 00:26:29,350 integer, gryp wat heelgetal, en dan, arbitrêr, ons het 'n rukkie lus wat 414 00:26:29,350 --> 00:26:32,280 gaan net decrement Ek totdat dit gelyk aan 10. 415 00:26:32,280 --> 00:26:35,820 Laat ons net aanvaar wat ek invoer 'n heelgetal groter as 10. 416 00:26:35,820 --> 00:26:38,700 So decrement i totdat dit gelyk aan 10. 417 00:26:38,700 --> 00:26:42,630 >> En dan het ons nog 'n rukkie lus dat, terwyl ek nie gelyk 0, ons is 418 00:26:42,630 --> 00:26:44,540 gaan ek te decrement deur 3. 419 00:26:44,540 --> 00:26:49,790 So as jy sien die bedoeling van die fout hier, is dit dat hierdie sal decrement i te 420 00:26:49,790 --> 00:26:57,010 10 wees, en dan is dit terwyl lus decrement i van 10 tot 7, 4, 1, 421 00:26:57,010 --> 00:27:02,880 negatiewe 2, negatiewe 5, en so aan, te negatief oneindig, want ek sal 422 00:27:02,880 --> 00:27:05,920 nooit werklik gelyk 0. 423 00:27:05,920 --> 00:27:08,610 En dan aan die einde van hierdie program, ons het die cat funksie wat 424 00:27:08,610 --> 00:27:12,130 gaan oor die druk dat ek. 425 00:27:12,130 --> 00:27:16,520 >> So, dit is 'n kort en triviale program, en die fout is voor die hand liggend, 426 00:27:16,520 --> 00:27:18,790 veral nadat ek net gesê wat die fout was. 427 00:27:18,790 --> 00:27:24,840 Maar die bedoeling hier is, wel, dit dalk eintlik lyk soos 'n paar van jou 428 00:27:24,840 --> 00:27:30,040 oplossings van gulsige van die laaste probleem stel, en miskien is jy nie ' 429 00:27:30,040 --> 00:27:32,800 sommige oneindige lus in jou program, en jy het geen idee 430 00:27:32,800 --> 00:27:34,100 wat dit veroorsaak het. 431 00:27:34,100 --> 00:27:38,690 So 'n baie nuttige opsporing tegniek is om net printfs 432 00:27:38,690 --> 00:27:40,180 oor jou kode. 433 00:27:40,180 --> 00:27:49,200 >> So hier Ek wil 'n printf buite eerste while loop. 434 00:27:49,200 --> 00:27:53,155 En hier wil ek 'n printf, en ek sal net druk ek. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Ek sal selfs die eerste doen terwyl lus, i. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Buite, tweede, terwyl lus. 439 00:28:09,040 --> 00:28:12,170 Weereens, druk binne van hier, die waarde i. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 En laat loop nie. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> So dot streep debug. 444 00:28:24,800 --> 00:28:25,610 Tik 'n heelgetal. 445 00:28:25,610 --> 00:28:28,150 Kom ons doen 13. 446 00:28:28,150 --> 00:28:28,760 En boom. 447 00:28:28,760 --> 00:28:33,300 Ons sien dat ons oneindige herhaling binnekant van die tweede, terwyl lus. 448 00:28:33,300 --> 00:28:36,305 So nou weet ons wat die fout is. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Maar printf debugging is perfek groot, maar wanneer jou programme kry 451 00:28:45,610 --> 00:28:50,560 langer en meer ingewikkeld is, is daar meer gesofistikeerde oplossings te 452 00:28:50,560 --> 00:28:51,705 Aan die dinge werk. 453 00:28:51,705 --> 00:28:52,955 So laat verwyder al hierdie printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 En laat ons seker maak ek het nie breek nie. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> So het die program ons gaan bekend te stel word genoem 458 00:29:14,180 --> 00:29:16,715 GDB, vir GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 Wel, eintlik, laat verwyder debug vir 'n tweede, en maak debug weer. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 Wel, eintlik die eerste, 'n goeie les in command line argumente. 463 00:29:34,440 --> 00:29:37,780 Let daarop dat hierdie klang opdrag wat opstel van alles wat geslaag 464 00:29:37,780 --> 00:29:41,300 op die opdrag lyn, is hierdie command line argumente. 465 00:29:41,300 --> 00:29:46,250 So presies hoe jy gaan word met behulp command line argumente, soos ons 466 00:29:46,250 --> 00:29:51,500 gedoen het voor, en as jy wil in PSET 2, dit is hoe klang is met behulp van hulle. 467 00:29:51,500 --> 00:30:00,070 >> So sien dat hierdie eerste vlag Dash ggdb3, wat dit gaan sê is, klang, 468 00:30:00,070 --> 00:30:03,790 Jy moet hierdie lêer saam te stel met die bedoeling dat ons sal uiteindelik 469 00:30:03,790 --> 00:30:05,380 nodig het om dit te ontfout. 470 00:30:05,380 --> 00:30:13,840 So lank as wat jy het dat die vlag, Dan kan ons GDB debug. 471 00:30:13,840 --> 00:30:17,380 En dit sal oopmaak om die GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> So is daar 'n klomp opdragte wat jy nodig het om gewoond te raak. 473 00:30:22,920 --> 00:30:27,100 Eerste een wat jy sal waarskynlik onmiddellik moet word uitgevoer. 474 00:30:27,100 --> 00:30:28,200 So, wat is hardloop gaan doen? 475 00:30:28,200 --> 00:30:30,910 Dit gaan ons program te begin. 476 00:30:30,910 --> 00:30:36,180 So loop, begin program, die program ons vra vir 'n heelgetal, 13. 477 00:30:36,180 --> 00:30:39,170 En dan is dit oneindig herhaling as verwag, behalwe as ek verwyder die 478 00:30:39,170 --> 00:30:40,500 printfs, sodat ons nie eens sien nie dat. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Opgewonde normaalweg. 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 Dit is moontlik dat dit toegedraai al die manier om, terug na - ignoreer nie. 484 00:30:53,640 --> 00:30:55,170 Aanvaar dit nie normaalweg verlaat. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Daar is 'n ingewikkelde antwoord op daardie. 487 00:31:03,370 --> 00:31:07,890 >> So nou, dit is nie baie nuttig. 488 00:31:07,890 --> 00:31:11,480 Dus net die bestuur van ons program binnekant van hierdie debugger nie help nie in enige 489 00:31:11,480 --> 00:31:15,610 manier, want ons kon net gedoen dot streep debug van buite GDB. 490 00:31:15,610 --> 00:31:21,250 So het die een opdrag wat Jy sal waarskynlik - 491 00:31:21,250 --> 00:31:22,970 en ek sal ophou nie. 492 00:31:22,970 --> 00:31:25,850 Control-d of afsluit, albei werk. 493 00:31:25,850 --> 00:31:29,550 So laat dit oop te weer. 494 00:31:29,550 --> 00:31:31,130 >> Nog 'n opdrag wat jy sal waarskynlik onmiddellik wil 495 00:31:31,130 --> 00:31:33,600 gewoond te raak aan is breek. 496 00:31:33,600 --> 00:31:37,120 So ons sal breek op die hoof vir nou, en dan sal ek verduidelik dat. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 Wel, hier sien ons ons 'n breekpunt in hierdie lyn in debug.c. 499 00:31:46,370 --> 00:31:50,160 So, wat breek beteken, is dat wanneer ek tik termyn, is die program gaan 500 00:31:50,160 --> 00:31:53,560 voortgaan hardloop totdat Ek druk 'n breekpunt. 501 00:31:53,560 --> 00:31:59,390 So toe ek hardloop, die program begin, en dan is dit so gou as dit breek 502 00:31:59,390 --> 00:32:01,940 gaan die belangrikste funksie. 503 00:32:01,940 --> 00:32:06,930 Breek hoof gaan om iets te wees jy mooi algemeen doen nie. 504 00:32:06,930 --> 00:32:11,340 >> En nou, julle bekend te stel sommige meer instruksies. 505 00:32:11,340 --> 00:32:14,330 Let hier, dat dit sê ons gebreek by lyn 11, wat 506 00:32:14,330 --> 00:32:16,230 printf, tik 'n heelgetal. 507 00:32:16,230 --> 00:32:21,260 So het die opdrag Volgende gaan wees hoe ons gaan na die volgende lyn van kode. 508 00:32:21,260 --> 00:32:24,810 Dit gaan ons toelaat om te stap deur middel van ons program reël vir reël. 509 00:32:24,810 --> 00:32:26,260 So volgende. 510 00:32:26,260 --> 00:32:29,820 >> Nou lyn 12, ons gaan Die heelgetal te kry. 511 00:32:29,820 --> 00:32:30,450 Volgende. 512 00:32:30,450 --> 00:32:34,290 En as jy net getref weer Tik, sal dit oordoen die laaste ding wat jy gedoen het. 513 00:32:34,290 --> 00:32:36,480 So ek hoef nie te tik volgende elke keer. 514 00:32:36,480 --> 00:32:40,100 So tree 'n heelgetal, 13. 515 00:32:40,100 --> 00:32:46,940 So nou, lyn 14, terwyl ek groter as 10, en ek sal volgende te doen. 516 00:32:46,940 --> 00:32:48,685 En ons sien ons gaan i te Trek '. 517 00:32:48,685 --> 00:32:50,210 So ons gaan i weer decrement. 518 00:32:50,210 --> 00:32:53,620 >> So nou, nog 'n nuttige opdrag Print. 519 00:32:53,620 --> 00:32:55,750 So Print gaan om uit te druk die waarde van die veranderlike. 520 00:32:55,750 --> 00:32:57,825 Kom ons bring die waarde veranderlike i. 521 00:32:57,825 --> 00:32:58,705 Kom ons druk ek. 522 00:32:58,705 --> 00:33:00,910 Dit gaan om te sê ek is 11. 523 00:33:00,910 --> 00:33:03,330 Nou Volgende weer ons terwyl Ek is meer as 10. 524 00:33:03,330 --> 00:33:05,590 So ek is nog groter as 10, want dit is 11. 525 00:33:05,590 --> 00:33:06,920 Ek minus minus. 526 00:33:06,920 --> 00:33:08,250 Kom ons druk ek weer. 527 00:33:08,250 --> 00:33:10,950 Soos verwag, is dit 10. 528 00:33:10,950 --> 00:33:12,510 >> So nou, volgende. 529 00:33:12,510 --> 00:33:16,250 Is dit terug na die toestand gaan, ek is meer as 10, maar ek is nou 10, so 530 00:33:16,250 --> 00:33:20,040 dit is nie groter as 10, so ons verwag dit om te val uit die lus. 531 00:33:20,040 --> 00:33:22,220 En nou is ons onder die lyn van die kode. 532 00:33:22,220 --> 00:33:28,750 En 'n ander opdrag, lys, net gaan die vorige en die volgende te vertoon 533 00:33:28,750 --> 00:33:31,240 paar reëls van die kode, in Indien jy jouself verloor. 534 00:33:31,240 --> 00:33:35,420 So het ons net opgewonde dit terwyl lus, En nou het ons in hierdie 535 00:33:35,420 --> 00:33:37,080 while loop, lyn 18. 536 00:33:37,080 --> 00:33:39,860 Dus, terwyl ek nie gelyk 0. 537 00:33:39,860 --> 00:33:46,570 En, Volgende, ek is gelyk aan i minus 3, en ons sal sien, dit sal net gaan hou. 538 00:33:46,570 --> 00:33:48,270 En ons kan druk i. 539 00:33:48,270 --> 00:33:49,990 >> Elke opdrag soort het kortpaaie. 540 00:33:49,990 --> 00:33:51,720 So p is kort vir Print. 541 00:33:51,720 --> 00:33:53,400 So kan ons p i. 542 00:33:53,400 --> 00:33:57,550 Hou net vashou n, of hou doen Volgende. 543 00:33:57,550 --> 00:33:58,340 Druk ek weer. 544 00:33:58,340 --> 00:34:00,380 Jy sien nou is dit negatiewe 167. 545 00:34:00,380 --> 00:34:06,030 So sal dit gaan vir ewig, maar nie werklik vir ewig, want jy het net gesien, is dit 546 00:34:06,030 --> 00:34:09,330 eintlik sal eindig op 'n punt. 547 00:34:09,330 --> 00:34:15,699 >> So wat begin GDB. 548 00:34:15,699 --> 00:34:19,504 Maar laat ons doen een ding in GDB. 549 00:34:19,504 --> 00:34:20,754 Uh, ontfout. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 So, in hierdie spesifieke geval, die oneindige lus toevallig binnekant van 552 00:34:28,534 --> 00:34:30,050 die belangrikste funksie. 553 00:34:30,050 --> 00:34:35,779 En nou, aanvaar net dat dat ek gaan die oneindige lus om te beweeg in 554 00:34:35,779 --> 00:34:37,029 die cat funksie. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Onthou net dat, aan die einde van hierdie program, goed, dit was oorspronklik 557 00:34:43,730 --> 00:34:46,210 roep cat, wat was net gaan ek te druk. 558 00:34:46,210 --> 00:34:51,880 Maar nou is ons roeping cat, wat gaan decrement i totdat dit 0, en 559 00:34:51,880 --> 00:34:54,548 druk dan daardie veranderlike. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Behalwe dat. 562 00:34:57,970 --> 00:35:00,175 Maak debug. 563 00:35:00,175 --> 00:35:03,310 En nou, gdb debug. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> So as ek net hardloop dan is ek nie van plan om in staat wees om werklik stap vir stap deur my 566 00:35:10,580 --> 00:35:11,730 program lyn-vir-lyn. 567 00:35:11,730 --> 00:35:19,820 So laat breek by die hoof, en dan tik hardloop. 568 00:35:19,820 --> 00:35:28,160 So gaan deur middel van hierdie, printf, tree 'n heelgetal, kry die getal, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 So ons gaan decrementing te hou totdat ek meer as 10 is. 571 00:35:37,490 --> 00:35:42,840 Dan gaan ons val deur die terwyl loop, en jy na die lyn - 572 00:35:42,840 --> 00:35:44,364 laat se oop te maak in 'n aparte venster. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 So het ons decremented totdat ek was nie meer meer as 10, en dan het ons 575 00:35:53,300 --> 00:35:55,700 genoem die funksie, cat. 576 00:35:55,700 --> 00:36:01,340 >> So, wat so gou as ek getref gebeur funksie cat, goed, ek het cat, en 577 00:36:01,340 --> 00:36:04,030 dan het ek nie meer beheer oor GDB. 578 00:36:04,030 --> 00:36:10,230 So gou as ek getref Volgende op hierdie lyn, dinge het voortgeduur totdat dit gebeur het, 579 00:36:10,230 --> 00:36:12,400 waar die program opgewonde toe - 580 00:36:12,400 --> 00:36:14,450 neem dit nie uiteindelik bestaan ​​nie. 581 00:36:14,450 --> 00:36:16,390 Jy het dit breek vir 'n bietjie al. 582 00:36:16,390 --> 00:36:22,040 So hoekom het ek verloor beheer oor die program wat by die punt? 583 00:36:22,040 --> 00:36:27,540 Wel, as ek tik die volgende, wat gaan aan die letterlike volgende lyn van die kode wat 584 00:36:27,540 --> 00:36:28,850 sal voer. 585 00:36:28,850 --> 00:36:35,950 So na lyn 21, die volgende lyn van die kode wat sal voer is lyn 22, 586 00:36:35,950 --> 00:36:38,520 wat is, die verlaat van die hoof. 587 00:36:38,520 --> 00:36:43,810 So ek wil nie net gaan na die volgende lyn van die kode. 588 00:36:43,810 --> 00:36:48,170 Ek wil om te gaan in die funksie, cat, en dan ook deur 589 00:36:48,170 --> 00:36:49,830 diegene reëls van die kode. 590 00:36:49,830 --> 00:36:53,726 >> So vir wat, ons het 'n alternatief. 591 00:36:53,726 --> 00:36:56,770 Kom ons hou dit weer. 592 00:36:56,770 --> 00:36:58,020 Breek hoof. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, volgende, volgende, 13, volgende, volgende, volgende, noukeurig, 595 00:37:06,370 --> 00:37:09,820 voor ons lyn cat. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> So nou, ons is op lyn 21, waar ons 'n beroep cat. 598 00:37:13,700 --> 00:37:17,100 Ons wil nie die volgende te tik, aangesien dit sal net noem die funksie cat, en 599 00:37:17,100 --> 00:37:18,710 gaan na die volgende lyn van kode. 600 00:37:18,710 --> 00:37:20,840 Wat ons wil hê om te gebruik is die eerste stap. 601 00:37:20,840 --> 00:37:25,690 So daar is 'n verskil tussen Stap en volgende jaar, waar Stap stappe in die 602 00:37:25,690 --> 00:37:28,190 funksioneer, en Volgende gaan oor die funksie. 603 00:37:28,190 --> 00:37:32,830 Dit voer net die geheel van die funksie en hou gaan. 604 00:37:32,830 --> 00:37:37,210 >> So stap is om ons te bring in die funksie, cat. 605 00:37:37,210 --> 00:37:41,160 En ons hier sien, nou, ons is terug by die dit terwyl lus wat is, in teorie, 606 00:37:41,160 --> 00:37:44,190 vir ewig gaan bly. 607 00:37:44,190 --> 00:37:50,420 En as jy getref stap, wanneer dit is nie eens 'n funksie te roep nie, dan is dit 608 00:37:50,420 --> 00:37:51,720 identies aan Volgende. 609 00:37:51,720 --> 00:37:55,320 So dit is net wanneer jy op 'n lyn wat roep 'n funksie wat Stap 610 00:37:55,320 --> 00:37:56,970 gaan verskil van Volgende. 611 00:37:56,970 --> 00:37:57,930 So stap sal ons hier te bring. 612 00:37:57,930 --> 00:38:02,100 Stap, stap, stap, stap, stap, stap, en Ons sal net oneindige lus vir ewig. 613 00:38:02,100 --> 00:38:06,810 >> So kan jy gewoond raak aan dat as jou manier van die identifisering van oneindige lusse, is 614 00:38:06,810 --> 00:38:08,960 net hou hierdie Voer sleutel tot sien waar jy vashaak. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Daar is beter maniere om dit te doen nie, maar Vir nou, dit is perfek voldoende. 617 00:38:14,780 --> 00:38:17,967 En stilisties, om te voldoen aan Style 50, moet ek dit gedoen het. 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 >> So 'n laaste opdrag te stel. 621 00:38:28,400 --> 00:38:30,810 Wel, laat ons GDB debug in 622 00:38:30,810 --> 00:38:35,580 So in plaas van die breek by die hoof, as ek weet wat die cat funksie is ook die 623 00:38:35,580 --> 00:38:39,230 probleem is, dan kan ek net gesê, breek op cat, plaas. 624 00:38:39,230 --> 00:38:42,310 Kom ons sê ek breek op beide hoof-en cat. 625 00:38:42,310 --> 00:38:45,390 So jy kan stel soveel inspeksiepunte as jy wil. 626 00:38:45,390 --> 00:38:49,230 Toe ek tik hardloop, gaan dit om te stop by die - 627 00:38:49,230 --> 00:38:52,180 ooh, laat ons heropstel, aangesien Ek verander dinge. 628 00:38:52,180 --> 00:38:55,950 Jy sal hierdie lyn, Waarskuwing, Bron sien lêer is meer onlangs as uitvoerbaar nie. 629 00:38:55,950 --> 00:38:59,680 So dit beteken dat ek net gaan in hier en verander hierdie te voldoen aan Style 630 00:38:59,680 --> 00:39:03,100 50, maar ek het nie hercompileren die program. 631 00:39:03,100 --> 00:39:04,870 So GDB maak my bewus van wat. 632 00:39:04,870 --> 00:39:10,130 Ek sal ophou, maak debug weer getref gdb debug. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> So nou, terug na wat ek kon doen. 635 00:39:12,800 --> 00:39:15,720 Breek hoof, breek cat. 636 00:39:15,720 --> 00:39:20,680 Nou as ek hardloop die program, so dit is gaan voort totdat treffers van 'n 637 00:39:20,680 --> 00:39:21,320 breekpunt. 638 00:39:21,320 --> 00:39:24,680 Dit breekpunt gebeur wees die eerste een by die hoof. 639 00:39:24,680 --> 00:39:28,630 Nou, in plaas van om die volgende, volgende, volgende, volgende, volgende, totdat ek getref cat, ek 640 00:39:28,630 --> 00:39:35,230 kan tik voortgaan, wat sal voortgaan totdat jy getref die volgende breekpunt. 641 00:39:35,230 --> 00:39:37,200 Ek het die integriteit na die eerste tree. 642 00:39:37,200 --> 00:39:40,570 Gaan voort sal voortgaan totdat ek die volgende breekpunt, en dit is dat 643 00:39:40,570 --> 00:39:43,320 funksie van cat. 644 00:39:43,320 --> 00:39:50,130 >> So Run hardloop totdat jy getref 'n breekpunt, maar jy tik slegs uitgevoer word wanneer 645 00:39:50,130 --> 00:39:54,060 jy begin die program, en dan, Van toe af is, is dit steeds. 646 00:39:54,060 --> 00:40:01,950 As ek net gedoen breek hoof-en dan hardloop, sal dit breek op 647 00:40:01,950 --> 00:40:03,670 hoof, en dan voort te gaan. 648 00:40:03,670 --> 00:40:10,050 Want ek het nie 'n breek punt cat, Tik die getal, dan nou is ek 649 00:40:10,050 --> 00:40:11,380 gaan nie te breek op cat. 650 00:40:11,380 --> 00:40:16,318 Dit is net gaan tot oneindige lus totdat dit. 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 >> So dit is Intro te GDB. 654 00:40:24,420 --> 00:40:27,790 Jy moet begin om dit te gebruik in jou probleem stelle. 655 00:40:27,790 --> 00:40:30,550 Dit kan baie nuttig wees foute te identifiseer. 656 00:40:30,550 --> 00:40:35,280 As jy eintlik net, lyn-vir-lyn, gaan deur jou kode, en vergelyk wat 657 00:40:35,280 --> 00:40:39,740 eintlik met wat jy verwag om te gebeur, dan is dit redelik 658 00:40:39,740 --> 00:40:41,060 moeilik om jou foute te mis. 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 >> So verlede week Dawid het hierdie geheime-sleutel kriptografie dinge vir die 663 00:40:54,040 --> 00:40:59,350 eerste keer, waar ons wil nie wagwoorde net op gestoor word ons 664 00:40:59,350 --> 00:41:03,210 rekenaar in 'n paar eenvoudige teks lêer, waar iemand kan oor en kom net 665 00:41:03,210 --> 00:41:04,660 oop te maak en te lees. 666 00:41:04,660 --> 00:41:07,530 Ideaal gesproke sou hulle geïnkripteer in een of ander manier. 667 00:41:07,530 --> 00:41:13,340 En in Probleem Stel 2, sal jy doen word met 'n metode van kodering, 668 00:41:13,340 --> 00:41:16,520 of, wel, twee metodes, maar hulle is nie so groot nie. 669 00:41:16,520 --> 00:41:20,050 As jy nie die hacker uitgawe, jy ook gaan wees wat met 670 00:41:20,050 --> 00:41:22,150 decrypten 'n paar dinge. 671 00:41:22,150 --> 00:41:29,770 >> So die probleem is nou, wel, selfs al Ons het die sterkste enkripsiemetodes 672 00:41:29,770 --> 00:41:34,830 algoritme in die wêreld, as jy kies om 'n veral swak wagwoord, dan is dit 673 00:41:34,830 --> 00:41:37,720 sal nie help nie baie nie, aangesien mense sal steeds in staat wees om dit uit te vind. 674 00:41:37,720 --> 00:41:41,530 Selfs as die sien van die geïnkripteer string en dit lyk soos 'n gemors van vullis 675 00:41:41,530 --> 00:41:44,760 dit beteken niks vir hulle as hulle nog net 'n paar wagwoorde te probeer 676 00:41:44,760 --> 00:41:50,560 om dit uit te vind, dan is jy is nie baie veilig is. 677 00:41:50,560 --> 00:41:55,890 So kyk na 'n video wat maak die punt. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [Video speel] 680 00:42:00,970 --> 00:42:02,100 >> -Helm, jy monster. 681 00:42:02,100 --> 00:42:03,370 Wat gaan aan? 682 00:42:03,370 --> 00:42:05,170 Wat doen jy aan my dogter? 683 00:42:05,170 --> 00:42:09,910 >> -Laat my die briljante te stel jong plastiese chirurg, Dr Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, die grootste neus werk man in die hele 685 00:42:13,730 --> 00:42:16,080 heelal, en Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -U Hoogheid. 687 00:42:17,210 --> 00:42:18,070 >> -Neus-job? 688 00:42:18,070 --> 00:42:18,670 Ek verstaan ​​nie. 689 00:42:18,670 --> 00:42:20,090 Sy het reeds 'n neus-job. 690 00:42:20,090 --> 00:42:21,910 Dit was 'n lieflike sestien teenwoordig. 691 00:42:21,910 --> 00:42:22,140 >> -No. 692 00:42:22,140 --> 00:42:23,690 Dit is nie wat jy dink. 693 00:42:23,690 --> 00:42:25,420 Dit is baie, baie erger. 694 00:42:25,420 --> 00:42:30,300 As jy nie gee my die kombinasie die lug skild, Dr Schlotkin sal 695 00:42:30,300 --> 00:42:34,226 gee jou dogter terug haar ou neus. 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 Waar het jy dit? 699 00:42:40,516 --> 00:42:41,440 >> -Alle regte. 700 00:42:41,440 --> 00:42:42,180 Ek sal jou vertel. 701 00:42:42,180 --> 00:42:43,381 Ek sal jou vertel. 702 00:42:43,381 --> 00:42:44,263 Nee, pappa. 703 00:42:44,263 --> 00:42:45,590 Nee, jy moet nie. 704 00:42:45,590 --> 00:42:46,860 >> -Jy het gelyk, my liewe. 705 00:42:46,860 --> 00:42:48,450 Ek sal jou nuwe neus mis. 706 00:42:48,450 --> 00:42:52,090 Maar ek sal hom nie vertel die kombinasie, maak nie saak wat. 707 00:42:52,090 --> 00:42:53,680 >> -Baie goed. 708 00:42:53,680 --> 00:42:55,685 Dr Schlotkin, doen jou ergste. 709 00:42:55,685 --> 00:42:56,914 >> -My plesier. 710 00:42:56,914 --> 00:43:00,690 >> [TOOLS geslyp] 711 00:43:00,690 --> 00:43:01,910 >> -No. 712 00:43:01,910 --> 00:43:02,520 Wag nie. 713 00:43:02,520 --> 00:43:03,836 Wag nie. 714 00:43:03,836 --> 00:43:05,300 Ek sal jou vertel. 715 00:43:05,300 --> 00:43:06,880 Ek sal jou vertel. 716 00:43:06,880 --> 00:43:09,130 >> -Ek het geweet dit sou werk. 717 00:43:09,130 --> 00:43:09,900 Alle regte. 718 00:43:09,900 --> 00:43:12,850 Gee dit aan my. 719 00:43:12,850 --> 00:43:16,918 >> -Die kombinasie is een. 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 >> Twee-en-. 723 00:43:19,358 --> 00:43:19,846 >> Twee-en-. 724 00:43:19,846 --> 00:43:20,822 >> Twee-en-. 725 00:43:20,822 --> 00:43:21,310 >> Drie. 726 00:43:21,310 --> 00:43:21,798 >> Drie. 727 00:43:21,798 --> 00:43:22,774 >> Drie. 728 00:43:22,774 --> 00:43:23,262 >> Vier-. 729 00:43:23,262 --> 00:43:23,750 >> Vier-. 730 00:43:23,750 --> 00:43:26,150 >> Vier-. 731 00:43:26,150 --> 00:43:27,010 >> Vyf-. 732 00:43:27,010 --> 00:43:27,670 >> Vyf-. 733 00:43:27,670 --> 00:43:29,010 >> Vyf-. 734 00:43:29,010 --> 00:43:34,770 >> -So die kombinasie is een, twee, drie, vier, vyf. 735 00:43:34,770 --> 00:43:37,460 Dit is die domste kombinasie Wat ek ooit in my lewe gehoor het. 736 00:43:37,460 --> 00:43:39,710 Dit is die soort van ding wat 'n idioot sou hê op sy bagasie. 737 00:43:39,710 --> 00:43:42,000 >> -Dankie, jou Hoogheid. 738 00:43:42,000 --> 00:43:43,530 >> -Wat het jy gedoen? 739 00:43:43,530 --> 00:43:44,490 >> -Ek het die muur af. 740 00:43:44,490 --> 00:43:45,420 >> -Nee, jy het nie. 741 00:43:45,420 --> 00:43:45,840 Jy afgeskakel die hele film. 742 00:43:45,840 --> 00:43:46,930 >> -Ek moet gedruk het die verkeerde knoppie. 743 00:43:46,930 --> 00:43:48,265 >> Wel, sit dit terug op. 744 00:43:48,265 --> 00:43:49,110 Sit die film weer op. 745 00:43:49,110 --> 00:43:49,510 >> -Ja, meneer. 746 00:43:49,510 --> 00:43:49,917 Ja, meneer. 747 00:43:49,917 --> 00:43:50,324 >> -Laat ons gaan, Arnold. 748 00:43:50,324 --> 00:43:51,140 Kom, Gretchen. 749 00:43:51,140 --> 00:43:53,060 Natuurlik, jy weet ek sal nog steeds het jy te hef vir hierdie. 750 00:43:53,060 --> 00:43:53,440 >> [Einde video speel] 751 00:43:53,440 --> 00:43:54,690 >> ROB BODEN: Alle reg. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 So nou dat ons reeds praat sekuriteit in sommige maniere, mooi 754 00:44:08,430 --> 00:44:16,050 bietjie film plakkaat, so in die afgelope dae, hierdie kwessies met die NSA 755 00:44:16,050 --> 00:44:17,300 monitering alles. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 Dit kan moeilik wees om te voel soos jy 'n soort van privaatheid in die 758 00:44:26,930 --> 00:44:34,540 aanlyn wêreld, maar ek kon nie sê jy die meeste van die besonderhede van PRISM. 759 00:44:34,540 --> 00:44:42,130 So beweeg buite prisma, ons gaan nie om te praat oor wat nou 760 00:44:42,130 --> 00:44:44,030 dink oor jou laptop. 761 00:44:44,030 --> 00:44:48,360 So hier, Ek wil om te skakel my werklike rekening 762 00:44:48,360 --> 00:44:50,370 met my klein pikkewyn. 763 00:44:50,370 --> 00:44:57,310 So ek het 'n wagwoord in te stel, en dat wagwoord is wat ek wil om dit te wees. 764 00:44:57,310 --> 00:45:02,430 >> Maar onthou dat wat ek aan te meld met, so hierdie inskrywing 765 00:45:02,430 --> 00:45:04,850 vinnige, is 'n program. 766 00:45:04,850 --> 00:45:07,910 Dit is 'n program wat geskryf deur 'n persoon. 767 00:45:07,910 --> 00:45:13,250 En so, daardie persoon, indien hulle veral kwaadwillige, kon hulle 768 00:45:13,250 --> 00:45:17,780 gesê het, alles reg, so as die wagwoord dat ek kan ingaan, is gelyk aan my 769 00:45:17,780 --> 00:45:22,800 werklike wagwoord, of is dit gelyk om 'n spesiale wagwoord - 770 00:45:22,800 --> 00:45:25,550 David is awesome of iets - 771 00:45:25,550 --> 00:45:27,190 dan laat hulle in 772 00:45:27,190 --> 00:45:33,760 So 'n kwaadwillige programmeerder kan hê toegang tot al jou Mac, of 773 00:45:33,760 --> 00:45:36,150 Vensters, of enigiets. 774 00:45:36,150 --> 00:45:41,980 >> So dit is nie veel van 'n bron van kommer, aangesien, Ek bedoel, dit is login program 775 00:45:41,980 --> 00:45:48,720 dit is verskeep met OS X, honderde of duisende mense 776 00:45:48,720 --> 00:45:50,020 hersien hierdie kode. 777 00:45:50,020 --> 00:45:55,330 En so, as, in jou kode iewers, jy sê as hierdie string gelyk gelykes 778 00:45:55,330 --> 00:45:58,860 David is awesome, aanteken, dan is iemand se gaan wees, soos, wag. 779 00:45:58,860 --> 00:45:59,800 Dit is nie reg nie. 780 00:45:59,800 --> 00:46:01,790 Dit moet nie hier wees nie. 781 00:46:01,790 --> 00:46:06,650 So dit is een manier waarop ons dinge soort veilig wees. 782 00:46:06,650 --> 00:46:10,300 >> Maar dink selfs programme wat jy skryf. 783 00:46:10,300 --> 00:46:13,000 Kom ons sê jy die login program geskryf het. 784 00:46:13,000 --> 00:46:20,440 So hierdie aanmelding program wat jy geskryf het, so natuurlik, jy is 'n goeie 785 00:46:20,440 --> 00:46:21,210 programmeerder. 786 00:46:21,210 --> 00:46:25,610 Jy gaan nie enige kwaadwillige te sit As x is gelyk aan gelyk David is awesome 787 00:46:25,610 --> 00:46:27,860 in jou kode. 788 00:46:27,860 --> 00:46:31,930 Maar hierdie program, wat jy doen gebruik van hierdie program op te stel? 789 00:46:31,930 --> 00:46:34,180 Iets soos klang. 790 00:46:34,180 --> 00:46:38,460 So, wat as die persoon wat gebeur skryf klang spesiale cased in klang 791 00:46:38,460 --> 00:46:44,310 iets soos, as ek die opstel van die login program, en gee dan die kode 792 00:46:44,310 --> 00:46:49,720 in die aanteken program wat sê, as x gelyk is gelyk aan David is awesome? 793 00:46:49,720 --> 00:46:59,890 So nie heeltemal nie, maar ons het dieselfde probleem hier, waar klang, goed, 794 00:46:59,890 --> 00:47:03,790 duisende, indien nie duisende van mense, het gekyk na klang, het 795 00:47:03,790 --> 00:47:07,160 kyk na die reëls van die kode en gesê: Alle reg, daar is niks sleg hier. 796 00:47:07,160 --> 00:47:10,680 Dit is duidelik dat niemand doen enigiets wat hierdie kwaadwillige. 797 00:47:10,680 --> 00:47:15,780 >> Maar wat is klang self, soos, Wat as ek stel klang? 798 00:47:15,780 --> 00:47:20,900 Wat as ek 'n paar samesteller dat stel klang dat voeg in klang 799 00:47:20,900 --> 00:47:25,610 hierdie spesiale hack wat sê, alles reg, toe ek stel klang, dan is die 800 00:47:25,610 --> 00:47:31,290 uitvoerbare Ek kry moet spesiaal kyk binnekant van die login program en voeg 801 00:47:31,290 --> 00:47:34,230 hierdie wagwoord, gelyk gelykes Dave is awesome? 802 00:47:34,230 --> 00:47:37,990 So onthou dat jou samesteller self moet opgestel word op 'n sekere punt. 803 00:47:37,990 --> 00:47:42,810 So as wat jy kies klang te stel met self is kwaadwillige, dan is jy 804 00:47:42,810 --> 00:47:45,580 kan geskroef word om die hele pad af die lyn. 805 00:47:45,580 --> 00:47:49,630 >> So hier het ons Ken Thompson en Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 So, dit is 'n ikoniese foto. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie is aan die regterkant. 808 00:47:55,470 --> 00:47:58,740 Hy is 'n groot - 809 00:47:58,740 --> 00:48:03,640 pretty much C. geskryf sodat jy kan bedank hom vir hierdie klas. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson is aan die linkerkant. 811 00:48:04,840 --> 00:48:07,780 Die twee van hulle het basies geskryf UNIX. 812 00:48:07,780 --> 00:48:10,140 Wel, hulle was groot bydraers in UNIX. 813 00:48:10,140 --> 00:48:11,310 Daar was 'n paar ander. 814 00:48:11,310 --> 00:48:16,240 So Ken Thompson, op 'n sekere punt, hy wen die Turing-toekenning. 815 00:48:16,240 --> 00:48:20,860 En die Turing-toekenning, ek het nog altyd gehoor dit verwys op hierdie manier, dit is die 816 00:48:20,860 --> 00:48:23,100 Nobelprys Rekenaarwetenskap. 817 00:48:23,100 --> 00:48:27,500 >> So aan die Turing-toekenning, hy het om te gee sy aanvaardingstoespraak. 818 00:48:27,500 --> 00:48:31,790 En hy gee die baie bekende toespraak nou, genoem Reflections on Vertrou 819 00:48:31,790 --> 00:48:35,620 Trust, wat ons verbind om op die kursus webblad. 820 00:48:35,620 --> 00:48:41,670 En in hierdie toespraak, sê hy, alles reg, so ek UNIX geskryf het, en nou al 821 00:48:41,670 --> 00:48:43,320 Julle mense is met behulp van UNIX. 822 00:48:43,320 --> 00:48:46,960 Nou, onthou vandag dat Linux is 'n direkte afstammeling van UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X direk gebruik UNIX. 824 00:48:50,140 --> 00:48:53,810 Windows nie so veel nie, maar 'n baie van idees is geneem uit UNIX. 825 00:48:53,810 --> 00:48:59,220 >> So het hy gaan op die verhoog en sê: Alle reg, ek het UNIX. 826 00:48:59,220 --> 00:49:03,940 En net so julle ouens weet, ek is staat aan te meld in elke 827 00:49:03,940 --> 00:49:05,590 enkele een van jou rekenaars. 828 00:49:05,590 --> 00:49:14,280 Sedert ek een van hierdie spesiale as x gelyk is gelyk aan Ken Thomson is awesome, 829 00:49:14,280 --> 00:49:16,350 dan is ek toegelaat om aan te meld. 830 00:49:16,350 --> 00:49:18,370 So mense is soos, wel, Hoe het jy dit doen? 831 00:49:18,370 --> 00:49:21,090 Ons kyk na die login program en niks is daar. 832 00:49:21,090 --> 00:49:24,700 Hy is soos, wel, ek verander die samesteller om aan te meld in die login program 833 00:49:24,700 --> 00:49:30,490 sodat die login program sal nou dat x gelyk is gelyk aan Ken Thompson 834 00:49:30,490 --> 00:49:31,700 is awesome. 835 00:49:31,700 --> 00:49:33,120 >> En hulle sê, wel, dit is nie waar nie. 836 00:49:33,120 --> 00:49:35,740 Ons is op soek na die samesteller, en die samesteller geen lyne van 'n 837 00:49:35,740 --> 00:49:36,400 kode soos dit. 838 00:49:36,400 --> 00:49:40,540 Hy is soos, OK, maar wat is jy die samestelling van die samesteller met? 839 00:49:40,540 --> 00:49:44,810 En hulle dink, en hy is, soos, wel, Ek is die een wat jy die opsteller het 840 00:49:44,810 --> 00:49:50,580 jy met behulp van die vertaler te stel, sodat jy die opstel van 'n vertaler, wat 841 00:49:50,580 --> 00:49:56,390 self is kwaadwillige, en sal breek die login program. 842 00:49:56,390 --> 00:49:59,360 So basies, op daardie punt, is daar geen manier wat jy kan kyk na die bron 843 00:49:59,360 --> 00:50:02,450 kode van die login program om te sien wat verkeerd is. 844 00:50:02,450 --> 00:50:04,220 Jy kan nie eens in die bron-kode van die opsteller 845 00:50:04,220 --> 00:50:06,790 om te sien wat verkeerd is. 846 00:50:06,790 --> 00:50:11,940 >> Jy sal moet kyk na die masjien kode, die werklike binêre van die 847 00:50:11,940 --> 00:50:16,760 saamgestel vertaler te sien, wag, hierdie reëls van die kode moet nie hier wees nie. 848 00:50:16,760 --> 00:50:22,130 Maar Ken Thompson het dit 'n stap verder en sê, goed, daar is 849 00:50:22,130 --> 00:50:25,980 hierdie spesiale programme wat eintlik help jy lees die binêre programme, 850 00:50:25,980 --> 00:50:29,340 en so as iemand gebruik die program te lees die binêre, sou hulle sien dat hierdie 851 00:50:29,340 --> 00:50:30,490 reëls van die kode. 852 00:50:30,490 --> 00:50:34,020 Hy verander die programme om te sê, al reg, as jy kyk na die 853 00:50:34,020 --> 00:50:38,460 samesteller, nie hierdie spesifieke wys nie stel van binêre. 854 00:50:38,460 --> 00:50:42,830 >> So dan moet jy neem dat 'n stap verder en basies, kan dit 'n 855 00:50:42,830 --> 00:50:46,210 geneem van verskeie vlakke van indirection, en op 'n sekere punt, niemand is eintlik 856 00:50:46,210 --> 00:50:47,990 gaan word nagaan. 857 00:50:47,990 --> 00:50:52,590 So het die moraal van die storie is, is jy nie gaan om te skryf 858 00:50:52,590 --> 00:50:54,340 Klang in hierdie klas. 859 00:50:54,340 --> 00:50:57,020 Jy gaan word met behulp klim Klang 'n baie in hierdie klas. 860 00:50:57,020 --> 00:51:00,490 Vir al wat jy weet, klang is 'n kwaadwillige program wat saboteer elke 861 00:51:00,490 --> 00:51:03,520 enkele program wat jy ooit saamgestel. 862 00:51:03,520 --> 00:51:08,206 En om jou te verlaat op daardie onheilspellende daarop, jy sien op Woensdag. 863 00:51:08,206 --> 00:51:10,030 >> [Applous] 864 00:51:10,030 --> 00:51:12,935 >> Spreker 2: By die volgende CS50. 865 00:51:12,935 --> 00:51:14,580 >> SPREKER 3: Moenie jy waag om te sê dat. 866 00:51:14,580 --> 00:51:15,930 Jy kan dit doen. 867 00:51:15,930 --> 00:51:19,440 Jy het dit gedoen voor, kan jy dit doen Vandag, kan jy dit doen môre. 868 00:51:19,440 --> 00:51:20,930 Jy het om dit te doen vir die jaar. 869 00:51:20,930 --> 00:51:22,790 Gaan net daar en doen dit. 870 00:51:22,790 --> 00:51:24,310 Jy kan dit doen. 871 00:51:24,310 --> 00:51:26,102 >> [Speel van musiek]