1 00:00:00,000 --> 00:00:03,944 >> [MUSIK SPELA] 2 00:00:03,944 --> 00:00:10,732 3 00:00:10,732 --> 00:00:11,690 DAVID MALAN: Okej. 4 00:00:11,690 --> 00:00:14,674 Detta är CS50, och detta är slutet av vecka 2. 5 00:00:14,674 --> 00:00:16,840 Jag är så ledsen att jag inte kunde vara där med er alla i dag, 6 00:00:16,840 --> 00:00:18,300 men du är i mycket goda händer. 7 00:00:18,300 --> 00:00:21,710 Tillåt mig att presentera CS50: s egen Rob Bowden. 8 00:00:21,710 --> 00:00:29,106 9 00:00:29,106 --> 00:00:31,730 ROB BOWDEN: Och naturligtvis, sedan Vi måste göra narr av det faktum 10 00:00:31,730 --> 00:00:36,820 att han sände oss ett vertikalt video och visa denna. 11 00:00:36,820 --> 00:00:38,320 >> [VIDEOAVSPELNING] 12 00:00:38,320 --> 00:00:39,820 >> [MUSIK SPELA] 13 00:00:39,820 --> 00:00:42,350 >> [FOTSTEG] 14 00:00:42,350 --> 00:00:44,730 >> -detta Video inte måste titta på detta sätt. 15 00:00:44,730 --> 00:00:46,570 Det kunde ha förhindrats. 16 00:00:46,570 --> 00:00:49,070 Säg nej till vertikala videoklipp. 17 00:00:49,070 --> 00:00:53,310 >> -Vertikal Videor hända när du Håll din kamera på fel sätt. 18 00:00:53,310 --> 00:00:55,880 Din video kommer att sluta se ut som skit. 19 00:00:55,880 --> 00:00:57,650 >> - [GRYMT] 20 00:00:57,650 --> 00:01:02,240 >> -Det Finns fler och fler människor beroende att göra vertikala videoklipp varje dag. 21 00:01:02,240 --> 00:01:06,240 Det är inte spricka eller ingenting, men det är fortfarande riktigt illa. 22 00:01:06,240 --> 00:01:10,410 Det finns två olika typer av människor som lider av VVS. 23 00:01:10,410 --> 00:01:14,160 Den första gruppen behandlar videor de skjuter som bilder. 24 00:01:14,160 --> 00:01:15,850 De menar inte någon skada. 25 00:01:15,850 --> 00:01:19,180 De bara inte förstå att medan du kan vända en bild, 26 00:01:19,180 --> 00:01:20,880 du kan inte riktigt vända en video. 27 00:01:20,880 --> 00:01:21,880 >> [CRASH] 28 00:01:21,880 --> 00:01:23,460 >> - [APA SOUNDS] 29 00:01:23,460 --> 00:01:27,540 >> -Den Andra gruppen är människor som inte ger en [BLEEP]. 30 00:01:27,540 --> 00:01:31,090 >> -Vertikal Video syndrom är farligt. 31 00:01:31,090 --> 00:01:34,120 Rörliga bilder har alltid varit horisontella. 32 00:01:34,120 --> 00:01:35,990 Tv: n är horisontellt. 33 00:01:35,990 --> 00:01:38,380 Datorskärmar är horisontella. 34 00:01:38,380 --> 00:01:41,580 Människors ögon är horisontella. 35 00:01:41,580 --> 00:01:45,170 Vi är inte byggda för att titta på vertikala videoklipp. 36 00:01:45,170 --> 00:01:47,600 >> -Jag Älskar vertikala videor. 37 00:01:47,600 --> 00:01:50,410 >> -Nobody Bryr sig om dig. 38 00:01:50,410 --> 00:01:53,340 >> -Om Detta problem s lämnas därhän, du också 39 00:01:53,340 --> 00:01:57,650 kommer att börja som visar fyra filmer på en gång bara för att spara bandbredd. 40 00:01:57,650 --> 00:02:02,400 >> -Letterboxed Vertikala videoklipp skulle vara storleken på ett frimärke. 41 00:02:02,400 --> 00:02:04,920 >> -och Det kommer att sprida överallt. 42 00:02:04,920 --> 00:02:07,670 Biodukar har alltid varit horisontella. 43 00:02:07,670 --> 00:02:11,200 Om vertikala videor blir accepterade, biografer 44 00:02:11,200 --> 00:02:13,930 måste vara lång och smal. 45 00:02:13,930 --> 00:02:17,710 >> -Och Alla biografer skulle måste få rivas och byggas om. 46 00:02:17,710 --> 00:02:22,090 Och när de byggdes, Mila Kunis skulle vara gammal och ful. 47 00:02:22,090 --> 00:02:24,342 >> -Birds Kommer att krascha in i dem och dö. 48 00:02:24,342 --> 00:02:26,530 >> -Vi Alla får hård halsar från tittar upp. 49 00:02:26,530 --> 00:02:29,800 >> -Och Ingen kommer att sitta i den främre raden någonsin igen. 50 00:02:29,800 --> 00:02:37,170 >> -George Lucas kommer återutgivning Star Krig igen-- mager upplagan. 51 00:02:37,170 --> 00:02:41,860 >> -Jag Var aldrig riktigt kunna berätta berättelsen som jag ville berätta. 52 00:02:41,860 --> 00:02:46,030 Detta var en stor chans för mig att experimentera med en ny teknik. 53 00:02:46,030 --> 00:02:48,150 >> -Du Ett ryck. 54 00:02:48,150 --> 00:02:54,430 >> -varje Gång en mobil anordning används för att spela in video, är frestelsen där. 55 00:02:54,430 --> 00:02:56,370 Säg bara nej. 56 00:02:56,370 --> 00:03:00,116 Säg nej till George Lucas. 57 00:03:00,116 --> 00:03:04,062 Säg nej till gamla Mila Kunis. 58 00:03:04,062 --> 00:03:06,600 Säg nej till vertikala videoklipp. 59 00:03:06,600 --> 00:03:12,511 >> -Och Om du ser någon som gör det, säger, "du är inte skytte denna rätt dummy!" 60 00:03:12,511 --> 00:03:15,433 >> [MUSIK SPELA] 61 00:03:15,433 --> 00:03:18,842 62 00:03:18,842 --> 00:03:19,830 >> [END SPELA] 63 00:03:19,830 --> 00:03:23,702 >> [Applåder] 64 00:03:23,702 --> 00:03:27,598 >> [AUDIO OUT] 65 00:03:27,598 --> 00:03:44,041 66 00:03:44,041 --> 00:03:45,790 ROB BOWDEN: --simple form av kryptografi, 67 00:03:45,790 --> 00:03:49,500 vilket egentligen är krypteringen och dekryptering av hemliga meddelanden. 68 00:03:49,500 --> 00:03:52,590 Så här har vi en mycket enkel leksak. 69 00:03:52,590 --> 00:03:56,900 Och tanken är den yttre ringen roterar runt den inre ringen. 70 00:03:56,900 --> 00:04:01,610 Och du kan se, kanske om jag zooma i, that-- det är svårt att se. 71 00:04:01,610 --> 00:04:05,090 Men, liksom antalet 1-- väl flyttade det. 72 00:04:05,090 --> 00:04:09,120 >> Siffran 1 kartor till bokstaven X, nummer 2 kartor till punkt och pricka 73 00:04:09,120 --> 00:04:11,630 J. Otroligt svårt inte för att hoppa framåt. 74 00:04:11,630 --> 00:04:16,100 Brev 2 kartor till J. Nummer 3 kartor till D. Så 75 00:04:16,100 --> 00:04:20,140 med denna ring du kan ge någon ett meddelande 1, 2, 3. 76 00:04:20,140 --> 00:04:22,624 Av någon anledning vill berätta för dem XJD. 77 00:04:22,624 --> 00:04:24,540 Men du kan ge dem några budskap av siffror, 78 00:04:24,540 --> 00:04:28,460 och så länge som de har denna ring, de kan dekryptera vad du försöker säga. 79 00:04:28,460 --> 00:04:32,510 >> Så du kanske har sett denna särskilt exempel på kryptografi 80 00:04:32,510 --> 00:04:36,640 tidigare om runt julen du har sett A Christmas Story. 81 00:04:36,640 --> 00:04:38,520 Om du aldrig har sett det förut, så är det bara 82 00:04:38,520 --> 00:04:41,060 aktivera TBS på bokstavligen helst på julafton, 83 00:04:41,060 --> 00:04:44,510 eftersom de bara visa det rygg mot rygg tillbaka till rygg mot rygg hela dagen. 84 00:04:44,510 --> 00:04:46,744 Och relevanta videon är detta. 85 00:04:46,744 --> 00:04:47,410 [VIDEOAVSPELNING] 86 00:04:47,410 --> 00:04:50,020 -vara Det känt för alla och envar att Ralph Parker är härmed 87 00:04:50,020 --> 00:04:52,850 utsett en ledamot av den lilla Föräldralösa Annie Secret Circle 88 00:04:52,850 --> 00:04:56,490 och är berättigad till alla de utmärkelser och fördelar uppträder därtill. 89 00:04:56,490 --> 00:04:59,010 Signerad Little Orphan Annie. 90 00:04:59,010 --> 00:05:03,120 Kontra Pierre Andre med bläck! 91 00:05:03,120 --> 00:05:07,460 Heder och fördelar redan vid nio års ålder! 92 00:05:07,460 --> 00:05:12,530 >> [Yelling från RADIO] 93 00:05:12,530 --> 00:05:13,030 -Kom igen. 94 00:05:13,030 --> 00:05:14,000 Låt oss gå vidare med det. 95 00:05:14,000 --> 00:05:18,274 Jag behöver inte all that jazz om smugglare och pirater. 96 00:05:18,274 --> 00:05:20,440 -listen I morgon kväll med den avslutande äventyr 97 00:05:20,440 --> 00:05:22,540 i svart piratskepp. 98 00:05:22,540 --> 00:05:25,460 Nu är det dags för Annies hemligt meddelande 99 00:05:25,460 --> 00:05:28,620 för dig medlemmar av Secret Circle. 100 00:05:28,620 --> 00:05:32,370 Minns ungar, endast medlemmar Annie hemliga Circle 101 00:05:32,370 --> 00:05:34,880 kan avkoda Annies hemligt meddelande. 102 00:05:34,880 --> 00:05:39,100 Kom ihåg att Annie beroende av dig. 103 00:05:39,100 --> 00:05:41,660 Ställ dina stift till B2. 104 00:05:41,660 --> 00:05:43,960 Här är budskapet. 105 00:05:43,960 --> 00:05:44,680 12. 106 00:05:44,680 --> 00:05:45,180 11. 107 00:05:45,180 --> 00:05:45,679 2. 108 00:05:45,679 --> 00:05:48,110 -Jag Är i mitt första hemliga mötet. 109 00:05:48,110 --> 00:05:49,030 >> -25. 110 00:05:49,030 --> 00:05:49,834 14. 111 00:05:49,834 --> 00:05:51,040 11. 112 00:05:51,040 --> 00:05:51,854 18. 113 00:05:51,854 --> 00:05:52,670 16. 114 00:05:52,670 --> 00:05:54,570 >> -Oh, Är Pierre i stark röst i kväll. 115 00:05:54,570 --> 00:05:57,490 Jag kan tala om att kvällens budskap var verkligen viktigt. 116 00:05:57,490 --> 00:05:57,990 -3. 117 00:05:57,990 --> 00:06:00,080 25. 118 00:06:00,080 --> 00:06:01,580 Det är ett meddelande från Annie själv. 119 00:06:01,580 --> 00:06:02,880 Kom ihåg att inte berätta för någon. 120 00:06:02,880 --> 00:06:07,840 121 00:06:07,840 --> 00:06:11,130 >> -Fem Sekunder senare, jag är i den enda rum i huset där en pojke på nio 122 00:06:11,130 --> 00:06:15,830 kunde sitta i avskildhet och avkoda. 123 00:06:15,830 --> 00:06:16,620 Aha! 124 00:06:16,620 --> 00:06:17,340 B! 125 00:06:17,340 --> 00:06:20,210 Jag gick till nästa. 126 00:06:20,210 --> 00:06:23,300 E. Det första ordet är "vara." 127 00:06:23,300 --> 00:06:25,880 S. Det kom lättare nu. 128 00:06:25,880 --> 00:06:28,400 U. 25. 129 00:06:28,400 --> 00:06:30,528 Det är R. 130 00:06:30,528 --> 00:06:31,278 -Kom Igen, Ralphie! 131 00:06:31,278 --> 00:06:31,861 Jag har gotta go! 132 00:06:31,861 --> 00:06:33,182 -Jag Är rätt ner, Ma! 133 00:06:33,182 --> 00:06:36,038 Gee vina. 134 00:06:36,038 --> 00:06:42,840 T. O. "Var noga med att" - se till vad? 135 00:06:42,840 --> 00:06:44,770 Vad var Little Orphan Annie försöker säga? 136 00:06:44,770 --> 00:06:46,381 Var noga med vad? 137 00:06:46,381 --> 00:06:47,825 >> -Randy Har fått gå! 138 00:06:47,825 --> 00:06:48,866 Kan du komma ut? 139 00:06:48,866 --> 00:06:49,783 >> -Alla Rätt, mamma! 140 00:06:49,783 --> 00:06:51,786 Jag kommer att vara rätt ut! 141 00:06:51,786 --> 00:06:53,606 Jag var att komma närmare nu. 142 00:06:53,606 --> 00:06:55,550 Spänningen var hemskt. 143 00:06:55,550 --> 00:06:57,050 Vad var det? 144 00:06:57,050 --> 00:06:59,905 Ödet av planeten kan hänga i balans! 145 00:06:59,905 --> 00:07:01,736 >> -Ralphie, Randy har fått gå! 146 00:07:01,736 --> 00:07:05,680 >> -Jag Är rätt ut, för crying out loud! 147 00:07:05,680 --> 00:07:07,170 Nästan där! 148 00:07:07,170 --> 00:07:08,150 Mina fingrar flög. 149 00:07:08,150 --> 00:07:09,980 Mitt sinne var en stål fälla. 150 00:07:09,980 --> 00:07:11,496 Varje por vibrerade. 151 00:07:11,496 --> 00:07:13,268 Det var nästan klar! 152 00:07:13,268 --> 00:07:13,767 Ja. 153 00:07:13,767 --> 00:07:14,609 Ja. 154 00:07:14,609 --> 00:07:15,108 Ja. 155 00:07:15,108 --> 00:07:16,449 Ja. 156 00:07:16,449 --> 00:07:20,240 Var noga med att dricka din Ovaltine. 157 00:07:20,240 --> 00:07:20,740 Ovaltine? 158 00:07:20,740 --> 00:07:26,687 159 00:07:26,687 --> 00:07:27,520 En crummy kommersiell? 160 00:07:27,520 --> 00:07:32,040 161 00:07:32,040 --> 00:07:34,920 Son of a bitch. 162 00:07:34,920 --> 00:07:35,890 >> [END SPELA] 163 00:07:35,890 --> 00:07:39,650 >> ROB BOWDEN: Så det är hur Ovaltine avser kryptografi. 164 00:07:39,650 --> 00:07:42,290 I grund och botten CS50 bara annonserade Ovaltine, så vi kunde 165 00:07:42,290 --> 00:07:44,400 vara en crummy reklamfilm för Ovaltine. 166 00:07:44,400 --> 00:07:44,900 Okej. 167 00:07:44,900 --> 00:07:47,120 Så nu faktiska datavetenskap. 168 00:07:47,120 --> 00:07:50,670 Kom ihåg på måndag vi slutade dykning djupare i strängar. 169 00:07:50,670 --> 00:07:52,820 Så vi hade att göra med strängen "Zamyla." 170 00:07:52,820 --> 00:07:55,130 Och vi erkänner det faktum att vi kan behandla 171 00:07:55,130 --> 00:07:57,510 "Zamyla" som en följd av tecken. 172 00:07:57,510 --> 00:07:59,740 Och kom ihåg att vi lärt oss fästet notation. 173 00:07:59,740 --> 00:08:01,995 Så om detta lagrades i en sträng "s" och sedan 174 00:08:01,995 --> 00:08:05,860 om vi sa s konsol 0, skulle det ange bokstaven kapital Z. 175 00:08:05,860 --> 00:08:09,790 Och om vi sa s konsol 1, som skulle indikera den första gement a, 176 00:08:09,790 --> 00:08:14,220 och så vidare upp till s konsol 5, vilket skulle indikera sista a. 177 00:08:14,220 --> 00:08:17,090 >> Nu kom ihåg att Längden på denna sträng är 6, 178 00:08:17,090 --> 00:08:23,220 men indexen in i strängen är 0 till 5, Z genom att hålla en. 179 00:08:23,220 --> 00:08:28,650 Så detta passar nu till en större bild av datorns minne, RAM-minnet. 180 00:08:28,650 --> 00:08:32,020 Så någonstans det program som du kör din dator 181 00:08:32,020 --> 00:08:34,780 behöver komma ihåg Zamyla någonstans i minnet. 182 00:08:34,780 --> 00:08:36,029 Så kan jag ha en volontär? 183 00:08:36,029 --> 00:08:38,840 184 00:08:38,840 --> 00:08:40,181 Ja tack. 185 00:08:40,181 --> 00:08:50,120 186 00:08:50,120 --> 00:08:51,500 Och vad är ditt namn? 187 00:08:51,500 --> 00:08:52,410 >> DEAN: Dean. 188 00:08:52,410 --> 00:08:53,550 >> ROB BOWDEN: Dean? 189 00:08:53,550 --> 00:08:54,910 Trevligt att träffa dig, Dean. 190 00:08:54,910 --> 00:08:58,240 Så kom hit, och vi kommer att ha du ritar 191 00:08:58,240 --> 00:09:00,740 på vår fina tjusig layout minne. 192 00:09:00,740 --> 00:09:05,950 Nu har jag gillar att tänka på minnet som en lång remsa av byte, 193 00:09:05,950 --> 00:09:11,090 men bara till för att vi ska bara inte från vänster till höger, uppifrån och ned. 194 00:09:11,090 --> 00:09:11,590 OK? 195 00:09:11,590 --> 00:09:22,030 >> Så jag kommer att visa en program-- Getstrings.c. 196 00:09:22,030 --> 00:09:25,760 Och så allt det här programmet är gör begär fyra strängar 197 00:09:25,760 --> 00:09:28,830 från användaren med GetString och sedan skriva ut 198 00:09:28,830 --> 00:09:30,950 vad det första strängen angav var. 199 00:09:30,950 --> 00:09:32,840 Vi ignorerar två till fyra. 200 00:09:32,840 --> 00:09:33,610 OK. 201 00:09:33,610 --> 00:09:38,210 Så hit now-- när I första begäran s1. 202 00:09:38,210 --> 00:09:39,740 Så du är datorn. 203 00:09:39,740 --> 00:09:41,680 Och du genomför getString. 204 00:09:41,680 --> 00:09:46,710 Så du begär en sträng från mig, och jag säger, OK, Dean. 205 00:09:46,710 --> 00:09:47,900 Ge strängen "Dean". 206 00:09:47,900 --> 00:09:50,300 >> Så någonstans i minnet du måste komma ihåg "Dean". 207 00:09:50,300 --> 00:09:52,160 Så skriv det i minnet någonstans. 208 00:09:52,160 --> 00:09:58,270 209 00:09:58,270 --> 00:09:59,210 Perfekt. 210 00:09:59,210 --> 00:09:59,880 OK. 211 00:09:59,880 --> 00:10:01,740 Så nu har vi s2. 212 00:10:01,740 --> 00:10:03,869 Och s2 kommer att bli en begäran till getString. 213 00:10:03,869 --> 00:10:05,160 Så jag kommer att komma in en sträng. 214 00:10:05,160 --> 00:10:08,720 Jag kommer att gå in "Hannah." 215 00:10:08,720 --> 00:10:10,586 Så ange "Hannah" någonstans i minnet. 216 00:10:10,586 --> 00:10:18,860 217 00:10:18,860 --> 00:10:19,360 Yeah. 218 00:10:19,360 --> 00:10:23,000 A-H. 219 00:10:23,000 --> 00:10:25,550 >> OK, så nu s3. 220 00:10:25,550 --> 00:10:28,380 Och det kommer att vara en annan begära att få getString. 221 00:10:28,380 --> 00:10:37,020 Och så nu ange "Maria." 222 00:10:37,020 --> 00:10:37,520 Okej. 223 00:10:37,520 --> 00:10:40,980 Och så finns det en sista begäran till getString, s4. 224 00:10:40,980 --> 00:10:42,580 Så, jag vet inte. 225 00:10:42,580 --> 00:10:45,640 Vad sägs om vi går med antidisestablishmentarianism. 226 00:10:45,640 --> 00:10:49,460 Så ange den i minnet. 227 00:10:49,460 --> 00:10:50,400 Yeah. 228 00:10:50,400 --> 00:10:53,970 Så bara göra "Rob." 229 00:10:53,970 --> 00:10:54,560 >> OK. 230 00:10:54,560 --> 00:10:58,410 Så nu explain-- varför gjorde du lämnar dessa utrymmen? 231 00:10:58,410 --> 00:11:01,340 Varför har du detta tomt utrymme här, här och här uppe? 232 00:11:01,340 --> 00:11:05,170 233 00:11:05,170 --> 00:11:05,670 Ja. 234 00:11:05,670 --> 00:11:09,450 Så märker när jag går att skriva ut s1-- så om vi 235 00:11:09,450 --> 00:11:11,890 hade "Hannah" kör rätt upp bredvid "Dean" 236 00:11:11,890 --> 00:11:14,360 Hur vet vi när strängen "Dean" slutar? 237 00:11:14,360 --> 00:11:19,470 Så skriver ut strängen s1 kan ha precis tryckt "DeanHannahMariaRob" 238 00:11:19,470 --> 00:11:22,720 om den inte har någon aning om när "Dean" faktiskt slutar. 239 00:11:22,720 --> 00:11:23,240 >> Okej. 240 00:11:23,240 --> 00:11:27,650 Så i minnet hur vi faktiskt representerar denna ände av en sträng 241 00:11:27,650 --> 00:11:29,940 är med omvänt snedstreck noll. 242 00:11:29,940 --> 00:11:32,620 Så detta utrymme är precis vad vi ville ha. 243 00:11:32,620 --> 00:11:34,040 Det bör vara en backslash noll. 244 00:11:34,040 --> 00:11:37,690 Detta kommer att bli ett omvänt snedstreck noll, och detta kommer att vara ett omvänt snedstreck noll. 245 00:11:37,690 --> 00:11:41,585 Och du kan ha en fantastisk pris för att vara en perfekt volontär. 246 00:11:41,585 --> 00:11:44,910 247 00:11:44,910 --> 00:11:45,860 Ta en stress boll! 248 00:11:45,860 --> 00:11:49,040 249 00:11:49,040 --> 00:11:49,700 >> OK. 250 00:11:49,700 --> 00:11:54,420 Så denna karaktär backslash noll hur vi indikera slutet av en sträng. 251 00:11:54,420 --> 00:11:57,120 Det är hur när ett visst program vill skriva ut en sträng, 252 00:11:57,120 --> 00:11:59,760 Det är how-- minns vi lärt oss det strlen funktionen förra veckan? 253 00:11:59,760 --> 00:12:00,940 Stränglängd? 254 00:12:00,940 --> 00:12:03,770 Det är hur stränglängden kan avgöra hur länge en sträng är. 255 00:12:03,770 --> 00:12:05,810 Det håller bara iteration över tecken 256 00:12:05,810 --> 00:12:08,217 tills den hittar backslash noll tecken. 257 00:12:08,217 --> 00:12:11,050 Så viktiga att inse om det omvända snedstrecket noll tecken 258 00:12:11,050 --> 00:12:14,950 det är representerade av alla nollor i bitar. 259 00:12:14,950 --> 00:12:18,980 Så märker att detta är distinkt från noll karaktär. 260 00:12:18,980 --> 00:12:23,010 Så noll tecken, om du kommer ihåg i exemplet som han gav i slutet 261 00:12:23,010 --> 00:12:27,360 föreläsning där tecken map att-- som kapital A kartor till 65. 262 00:12:27,360 --> 00:12:29,130 Gemener en kartor till 97. 263 00:12:29,130 --> 00:12:30,890 Gemener B skulle vara 98. 264 00:12:30,890 --> 00:12:35,220 Så siffran 0 kartorna att-- jag inte vet från toppen av mitt huvud. 265 00:12:35,220 --> 00:12:36,400 44 eller 45. 266 00:12:36,400 --> 00:12:37,890 Någonstans i denna region. 267 00:12:37,890 --> 00:12:40,850 >> Så tecknet 0 är ett faktiskt antal. 268 00:12:40,850 --> 00:12:44,350 Men omvänt snedstreck noll kartor till alla nollbitar. 269 00:12:44,350 --> 00:12:46,380 Så det finns en skillnad mellan omvänt snedstreck noll, 270 00:12:46,380 --> 00:12:48,450 som vi kallar noll terminator. 271 00:12:48,450 --> 00:12:53,210 Det finns en skillnad mellan bakstreck noll och tecknet noll. 272 00:12:53,210 --> 00:12:54,350 >> Okej. 273 00:12:54,350 --> 00:12:57,520 Så talar lite mer om strängar. 274 00:12:57,520 --> 00:13:01,470 Så då vi ser här är hur skulle läggas ut i minnet. 275 00:13:01,470 --> 00:13:07,940 Så denna idé om strängar som en sekvens av characters-- så officiellt dataregister 276 00:13:07,940 --> 00:13:10,750 sciency term för sekvensen är en array. 277 00:13:10,750 --> 00:13:13,790 Så vi skulle kalla en sträng en array av tecken. 278 00:13:13,790 --> 00:13:17,770 Och det finns faktiskt andra data typer som vi kan göra matriser av. 279 00:13:17,770 --> 00:13:19,975 >> Så för att motivera detta, titta på ett exempel. 280 00:13:19,975 --> 00:13:22,810 281 00:13:22,810 --> 00:13:29,812 Vi kallar det ages0.c jag ska kopiera och klistra in vår mall. 282 00:13:29,812 --> 00:13:32,470 283 00:13:32,470 --> 00:13:33,410 OK. 284 00:13:33,410 --> 00:13:39,378 Så i det här programmet som vi vill göra är att ta ålder 285 00:13:39,378 --> 00:13:45,160 av tre studenter på kursen. 286 00:13:45,160 --> 00:13:49,240 Så vi vet int age-- och nu ska jag säga 0. 287 00:13:49,240 --> 00:13:53,140 Så du kanske vill säga age1, men för ändamål vi får se mycket snart, 288 00:13:53,140 --> 00:13:57,187 Jag ska säga int age0 lika getInt. 289 00:13:57,187 --> 00:13:59,270 Så samma samtal till getInt att vi har använt I 290 00:13:59,270 --> 00:14:01,561 inte råkar vara tillfrågas sade "ge mig ålder." 291 00:14:01,561 --> 00:14:03,120 Men bara begär det. 292 00:14:03,120 --> 00:14:06,510 >> Och age1 lika getInt. 293 00:14:06,510 --> 00:14:09,600 Och int age2 lika getInt. 294 00:14:09,600 --> 00:14:14,070 Så, återigen, tre studenter, men i slutändan de variabla indexen 295 00:14:14,070 --> 00:14:16,890 är age0 genom age2. 296 00:14:16,890 --> 00:14:17,550 OK. 297 00:14:17,550 --> 00:14:23,960 Så det här programmet kommer att göra vad Vi vill med age0, age1 och age2, 298 00:14:23,960 --> 00:14:27,670 men detta program i slutändan fungerar för tre studenter. 299 00:14:27,670 --> 00:14:28,380 >> OK. 300 00:14:28,380 --> 00:14:32,110 Så nu vad om jag vill fyra studenter? 301 00:14:32,110 --> 00:14:36,000 Tja, jag kommer att behöva gå tillbaka i min kod, ändra kommentaren, 302 00:14:36,000 --> 00:14:39,840 och nu har vi en int ålder 3 lika getInt. 303 00:14:39,840 --> 00:14:40,610 OK. 304 00:14:40,610 --> 00:14:43,660 Så som ser problemet här? 305 00:14:43,660 --> 00:14:47,310 Vad är problemet med denna typ av inställning? 306 00:14:47,310 --> 00:14:47,810 Yeah. 307 00:14:47,810 --> 00:14:53,110 308 00:14:53,110 --> 00:14:53,610 Yeah. 309 00:14:53,610 --> 00:14:56,360 Så vi skapar en variabel för varje student. 310 00:14:56,360 --> 00:15:00,140 Nu som fungerar, men i slutändan vad händer om jag nu 311 00:15:00,140 --> 00:15:06,500 säger: "Jag vill ta ålder åtta studenter eller 16 studenter 312 00:15:06,500 --> 00:15:11,340 eller hur många studenter i de hundratals studenter i CS50 313 00:15:11,340 --> 00:15:16,750 eller tusentals studenter på campus eller de miljarder människor i världen? 314 00:15:16,750 --> 00:15:19,130 Så i slutändan är detta inte hållbart. 315 00:15:19,130 --> 00:15:21,990 Varje gång du ser dig själv kopierar och klistra in koden så här, 316 00:15:21,990 --> 00:15:25,050 bör du i allmänhet känna att det finns ett bättre sätt. 317 00:15:25,050 --> 00:15:31,290 >> Så det är där vi introducerar en array deklaration. 318 00:15:31,290 --> 00:15:34,564 Så när du deklarerar en array, Detta är vad det allmänna formatet 319 00:15:34,564 --> 00:15:35,480 kommer att se ut. 320 00:15:35,480 --> 00:15:36,664 Vi kommer att säga typ. 321 00:15:36,664 --> 00:15:38,830 och sedan ska vi ange namnet på den matris, 322 00:15:38,830 --> 00:15:41,150 precis som vi definierar en given variabel. 323 00:15:41,150 --> 00:15:43,980 Och sedan slutligen vi använder denna konsol notation igen 324 00:15:43,980 --> 00:15:47,480 men i ett annat sammanhang från hur vi använder den tidigare. 325 00:15:47,480 --> 00:15:51,860 >> Så här ser detta ut som en normal variabeldeklaration som vi har sett. 326 00:15:51,860 --> 00:15:54,890 Så vi har sett int x semikolon innan. 327 00:15:54,890 --> 00:16:00,020 Och nu kan vi se något liknande int x konsoler 5. 328 00:16:00,020 --> 00:16:04,020 Och sätta denna idé till GetInt program som vi have-- 329 00:16:04,020 --> 00:16:08,850 så att vi kan genomföra detta på samma sätt. 330 00:16:08,850 --> 00:16:13,630 >> Låt oss säga i CS vi tenderar att använda n som antalet något. 331 00:16:13,630 --> 00:16:16,150 Så här vi kommer att lagra fyra studenter. 332 00:16:16,150 --> 00:16:25,960 Och nu kan vi säga int ålder fäste n-- inte riktigt få det yet-- 333 00:16:25,960 --> 00:16:32,210 att förklara ett arrangemang av fyra studenter. 334 00:16:32,210 --> 00:16:38,050 Så hur det kommer att se ut minne kommer att likna denna. 335 00:16:38,050 --> 00:16:39,570 Rensa detta. 336 00:16:39,570 --> 00:16:46,606 Och vi kommer att ha någonstans i memory-- Jag lägger här uppe. 337 00:16:46,606 --> 00:16:52,690 338 00:16:52,690 --> 00:16:53,808 >> Så någonstans i minnet. 339 00:16:53,808 --> 00:16:58,760 340 00:16:58,760 --> 00:16:59,727 Ett två tre Fyra. 341 00:16:59,727 --> 00:17:03,383 342 00:17:03,383 --> 00:17:09,849 Vi har fyra heltal i rad för denna uppsättning av fyra heltal. 343 00:17:09,849 --> 00:17:13,820 Så, för närvarande, vad är storleken på en av dessa rutor? 344 00:17:13,820 --> 00:17:17,190 345 00:17:17,190 --> 00:17:17,690 Yeah. 346 00:17:17,690 --> 00:17:18,390 Det är fyra byte. 347 00:17:18,390 --> 00:17:19,690 Det är 32 bitar. 348 00:17:19,690 --> 00:17:22,310 Så nu är annorlunda från arrayen som vi 349 00:17:22,310 --> 00:17:24,020 såg tidigare, uppsättningen av tecken. 350 00:17:24,020 --> 00:17:28,540 I en sträng varje låda var bara ett byte, eftersom ett tecken är bara ett byte. 351 00:17:28,540 --> 00:17:32,170 Men med en rad av heltal, varje låda måste vara fyra bytes i ordning 352 00:17:32,170 --> 00:17:34,060 för att passa en hel heltal. 353 00:17:34,060 --> 00:17:37,197 Så detta är vad en rad fyra Ints skulle se ut. 354 00:17:37,197 --> 00:17:40,510 355 00:17:40,510 --> 00:17:43,870 >> Och sedan tillbaka till koden. 356 00:17:43,870 --> 00:17:47,460 Nu vill vi faktiskt lagra heltal i den arrayen. 357 00:17:47,460 --> 00:17:53,470 Så nu detta är en mycket, mycket, mycket gemensamma mönster som kommer vid någon tidpunkt 358 00:17:53,470 --> 00:17:54,680 blir muskelminne. 359 00:17:54,680 --> 00:17:56,710 Så int i lika med 0. 360 00:17:56,710 --> 00:17:57,940 i mindre än n. 361 00:17:57,940 --> 00:18:01,850 i plus plus. 362 00:18:01,850 --> 00:18:05,790 Åldersgrupp i lika getInt. 363 00:18:05,790 --> 00:18:15,100 >> Så detta för loop, detta format, Du bör få mycket van vid. 364 00:18:15,100 --> 00:18:20,010 Så det här är i allmänhet hur vi kommer iterera över nästan alla matris. 365 00:18:20,010 --> 00:18:23,690 Nu märker denna typ av förklarar varför från början 366 00:18:23,690 --> 00:18:29,870 vi behövde för slingor går för int i är lika med ett, jag mindre än eller lika med 10. 367 00:18:29,870 --> 00:18:34,200 Orsaken är att från noll gör detta fungerar bra med arrayer. 368 00:18:34,200 --> 00:18:36,270 Så arrayer är noll indexeras. 369 00:18:36,270 --> 00:18:40,360 Om denna matris är av längd 4, indexen är 0 till 3. 370 00:18:40,360 --> 00:18:42,880 >> Så genom den första variant av denna för loop 371 00:18:42,880 --> 00:18:49,930 vi kommer att ställa ålder konsol 0 lika med ett anrop till getInt. 372 00:18:49,930 --> 00:18:52,440 Så vad jag råkade att komma in på tangentbordet. 373 00:18:52,440 --> 00:18:56,970 I det andra passet, vi är inställning age1 lika med getInt. 374 00:18:56,970 --> 00:18:58,230 Tredje passet, age2. 375 00:18:58,230 --> 00:18:59,880 Slutlig pass ålder 3. 376 00:18:59,880 --> 00:19:05,750 Så om i det första passet av slingan Jag ange numret 4 på tangentbordet, 377 00:19:05,750 --> 00:19:07,740 då vi kommer att sätta in en 4 här. 378 00:19:07,740 --> 00:19:11,470 Om å andra passet jag skriver 50, kommer vi att sätta en 50 här. 379 00:19:11,470 --> 00:19:15,180 På tredje passet kanske jag anger -1, -1, 380 00:19:15,180 --> 00:19:21,810 och slutligen om jag anger 0-- och nu ihåg att detta var index tre. 381 00:19:21,810 --> 00:19:25,350 >> Efter att vi loop back, i är kommer att inkrementeras till 4. 382 00:19:25,350 --> 00:19:27,770 Jag är inte längre är mindre än n, vilket är fyra. 383 00:19:27,770 --> 00:19:29,840 Och vi bryta sig ut ur loopen. 384 00:19:29,840 --> 00:19:32,578 Så vad skulle vara fel med det? 385 00:19:32,578 --> 00:19:38,140 386 00:19:38,140 --> 00:19:38,729 [OHÖRBAR]? 387 00:19:38,729 --> 00:19:39,604 PUBLIK: [OHÖRBAR] 388 00:19:39,604 --> 00:19:45,880 389 00:19:45,880 --> 00:19:46,400 >> Ja. 390 00:19:46,400 --> 00:19:51,550 Så arrayen har endast fyra ställen, vilket innebär som index 0 till 3. 391 00:19:51,550 --> 00:19:55,630 Så om detta vore fallet, skulle jag ta på värdet 4 vid något tillfälle. 392 00:19:55,630 --> 00:20:00,910 åldersgruppen 4 kommer att sätta vad som än händer att vara över här 393 00:20:00,910 --> 00:20:02,920 vad jag har att säga, skriv 6. 394 00:20:02,920 --> 00:20:05,010 Det kommer att ställa detta till sex. 395 00:20:05,010 --> 00:20:06,560 >> Men vi vet inte vad som finns här. 396 00:20:06,560 --> 00:20:08,836 Detta är inte minne att vi hade tillgång till. 397 00:20:08,836 --> 00:20:10,710 Så om du kommer ihåg från föregående föreläsning, 398 00:20:10,710 --> 00:20:14,350 han skriva ut värden för Zamyla och någon gång han slog denna segmentering 399 00:20:14,350 --> 00:20:17,990 fel. Så du kommer förmodligen att få se många segmenteringsfel som du 400 00:20:17,990 --> 00:20:20,530 genomföra några av de problemsamlingar. 401 00:20:20,530 --> 00:20:24,950 Men detta är ett av de sätt på vilka du kan stöta på en segmente 402 00:20:24,950 --> 00:20:28,540 fel, när du börja använda minne på ett sätt som du inte bör vara. 403 00:20:28,540 --> 00:20:34,117 Så vi inte har tillgång till denna plats och det är en bugg. 404 00:20:34,117 --> 00:20:37,760 405 00:20:37,760 --> 00:20:40,190 >> Så det här är bättre. 406 00:20:40,190 --> 00:20:45,820 Nu finns det fortfarande en liten problem med denna kod. 407 00:20:45,820 --> 00:20:50,720 Och det är i princip att vi är fortfarande fast vid fyra studenter. 408 00:20:50,720 --> 00:20:52,940 Nu om jag vill använda åtta studenter, OK. 409 00:20:52,940 --> 00:20:54,350 Det är inte så stor en affär. 410 00:20:54,350 --> 00:20:58,120 Jag kan gå in, ändra kommentera och ändra n. 411 00:20:58,120 --> 00:20:59,760 Nu detta kommer att fungera med åtta elever. 412 00:20:59,760 --> 00:21:02,190 Om jag sammanställa denna och kör detta, kommer det att visa mig-- 413 00:21:02,190 --> 00:21:07,870 Det kommer att begära heltal för åtta studenter och det kommer bara att fungera. 414 00:21:07,870 --> 00:21:11,850 Men det är mindre än idealisk att behöva kompilera om programmet varje gång 415 00:21:11,850 --> 00:21:15,960 Jag vill ändra antalet studenter som jag vill ange åldrar för. 416 00:21:15,960 --> 00:21:22,990 >> Så den slutliga förbättring detta, eftersom vi får se här-- vi är 417 00:21:22,990 --> 00:21:26,177 kommer att begära att antalet personer. 418 00:21:26,177 --> 00:21:28,010 Här har vi ett antal människor i rummen 419 00:21:28,010 --> 00:21:29,880 eller någon åldrarna personer i rummet. 420 00:21:29,880 --> 00:21:33,300 Men vi kommer att begära att antalet av personer i rummet från användaren. 421 00:21:33,300 --> 00:21:36,171 Så det här är exakt samma do-while loop som vi har sett tidigare. 422 00:21:36,171 --> 00:21:37,920 Det är exakt samma gör-while-slinga som du 423 00:21:37,920 --> 00:21:40,050 kan genomföra på problemet set. 424 00:21:40,050 --> 00:21:43,102 Så länge de är in i en n mindre än 1, 425 00:21:43,102 --> 00:21:45,310 så det har fått vara på minst en person i rummet. 426 00:21:45,310 --> 00:21:47,407 Så länge de är in i en n mindre än 1, 427 00:21:47,407 --> 00:21:48,990 då ska vi hålla ber igen. 428 00:21:48,990 --> 00:21:50,906 Vänligen ange numret av personer i rummet. 429 00:21:50,906 --> 00:21:53,550 Nu, när vi har numret människor i room-- 430 00:21:53,550 --> 00:21:58,020 så jag kan ange att det är 200 personer i det här rummet. 431 00:21:58,020 --> 00:22:05,480 Sedan här nere vi kommer att komma och förklarar en rad storlek 200. 432 00:22:05,480 --> 00:22:10,220 Vi förklarar array som är stor nog att rymma 200 åldrar. 433 00:22:10,220 --> 00:22:15,370 Coming down, det är för loop att du kommer att få mycket van vid. 434 00:22:15,370 --> 00:22:19,490 Så iteration över denna matris, tilldela till varje plats 435 00:22:19,490 --> 00:22:23,020 i den arrayen ett heltal, och sedan slutligen här är vi 436 00:22:23,020 --> 00:22:28,340 bara få ett exempel på iteration över den arrayen, inte att tilldela värden, 437 00:22:28,340 --> 00:22:30,150 men för att komma åt värden. 438 00:22:30,150 --> 00:22:33,810 >> Så hit ser vi att vi säger, ett år från nu, 439 00:22:33,810 --> 00:22:40,470 personen% jag kommer att vara% i år, där den första% i är i plus en. 440 00:22:40,470 --> 00:22:43,010 Så jag är här indexvariabel. 441 00:22:43,010 --> 00:22:49,420 Och den andra% i kommer att vara värdet som lagras i åldrar arrayen plus 1. 442 00:22:49,420 --> 00:22:54,217 Så detta plus ett är bara för att vi är saying-- detta plus 1, åldrar I plus 1. 443 00:22:54,217 --> 00:22:57,050 Detta plus en är bara för att vi är sade ett år från och med nu den person 444 00:22:57,050 --> 00:22:58,280 kommer vara så här gammal. 445 00:22:58,280 --> 00:23:01,080 >> Så varför är detta i plus 1? 446 00:23:01,080 --> 00:23:04,064 Varför vi har en plus en där? 447 00:23:04,064 --> 00:23:04,564 Yeah. 448 00:23:04,564 --> 00:23:07,410 449 00:23:07,410 --> 00:23:07,930 Ja. 450 00:23:07,930 --> 00:23:10,510 Så kom ihåg arrayer noll indexeras. 451 00:23:10,510 --> 00:23:14,840 Så om vi skriver detta för någon att bara läsa utgången, 452 00:23:14,840 --> 00:23:19,380 då kanske de vill se något som människa en, person nummer ett, 453 00:23:19,380 --> 00:23:21,160 kommer att vara 20 år gammal. 454 00:23:21,160 --> 00:23:23,570 Person nummer två kommer att vara 15 år gammal. 455 00:23:23,570 --> 00:23:27,420 De vill helst inte se personen siffran noll är 15 år gammal. 456 00:23:27,420 --> 00:23:36,460 >> Så sammanställa detta och bara se vad det ser like-- skapa utrymme. 457 00:23:36,460 --> 00:23:43,560 Gör åldrar sammanställer. 458 00:23:43,560 --> 00:23:45,080 Köra åldrar. 459 00:23:45,080 --> 00:23:46,580 Vi ser många människor i rummet. 460 00:23:46,580 --> 00:23:48,850 Så jag ska säga att det finns tre personer i rummet. 461 00:23:48,850 --> 00:23:54,000 Age of persons nummer ett, låt oss säga 15, 20, 25. 462 00:23:54,000 --> 00:23:59,680 Och nu ska jag säga ett år från Nu kommer de att vara 16, 21, 26. 463 00:23:59,680 --> 00:24:02,900 Låt oss se till att detta fungerar med en n som inte är lika med tre. 464 00:24:02,900 --> 00:24:07,940 Så om jag säger antal personer är 5, en, två, tre, två, ett, ett år från och med nu 465 00:24:07,940 --> 00:24:11,170 de ska vara två, tre, fyra, tre, två år gammal. 466 00:24:11,170 --> 00:24:16,500 Så jag kunde lika lätt har n vara 10.000. 467 00:24:16,500 --> 00:24:21,270 Nu ska jag sitta här under ganska en stund in åldrar, men det fungerar. 468 00:24:21,270 --> 00:24:26,000 >> Så nu i minnet någonstans vi har en rad storlek 10000, 469 00:24:26,000 --> 00:24:28,830 så i slutändan 40 tusen bytes, eftersom det finns 470 00:24:28,830 --> 00:24:31,222 fyra byte för var och en av heltal. 471 00:24:31,222 --> 00:24:33,180 Så det finns en rad storlek 10000 där vi kan 472 00:24:33,180 --> 00:24:36,201 lagra åldrarna dessa 10.000 personer. 473 00:24:36,201 --> 00:24:36,700 Okej. 474 00:24:36,700 --> 00:24:40,070 Frågor om något av detta? 475 00:24:40,070 --> 00:24:41,892 Yeah. 476 00:24:41,892 --> 00:24:43,350 Vad händer om du gav ett negativt tal? 477 00:24:43,350 --> 00:24:44,870 Låt oss se vad som händer. 478 00:24:44,870 --> 00:24:49,320 Så i denna case-- nummer människor i rummet, negativ. 479 00:24:49,320 --> 00:24:52,580 Det avvisade detta, eftersom här uppe vi råkar 480 00:24:52,580 --> 00:24:57,180 som hantering det faktum att om n är mindre än en vi kommer att fråga igen. 481 00:24:57,180 --> 00:25:01,780 Om du försöker att förklara en matris med negativ storlek, 482 00:25:01,780 --> 00:25:03,950 det i allmänhet fungerar inte. 483 00:25:03,950 --> 00:25:05,570 >> Så låt oss försöka. 484 00:25:05,570 --> 00:25:08,000 Låt oss bortse från vad värde de ingång för n 485 00:25:08,000 --> 00:25:10,571 och bara säga int åldrar negativ. 486 00:25:10,571 --> 00:25:12,410 Låt oss se om det även sammanställer. 487 00:25:12,410 --> 00:25:14,100 Jag är inte säker. 488 00:25:14,100 --> 00:25:14,920 Nej. 489 00:25:14,920 --> 00:25:18,280 Så åldrar deklareras som en matris med en negativ storlek. 490 00:25:18,280 --> 00:25:22,540 Så upfront den känner igen en array kan inte vara negativ storlek och avvisar det. 491 00:25:22,540 --> 00:25:26,840 Nu, om vi inte hanterar Detta gör-medan bygeln, 492 00:25:26,840 --> 00:25:28,810 om vi inte kontrollera om n är mindre än 1-- 493 00:25:28,810 --> 00:25:32,690 Låt oss säga att vi bara hade inte detta alls 494 00:25:32,690 --> 00:25:35,940 och i stället vi bara ta ett heltal. 495 00:25:35,940 --> 00:25:40,710 Oavsett vad det heltal är, Vi deklarerar en matris av den storleken. 496 00:25:40,710 --> 00:25:44,250 >> Så kompilatorn kan inte möjligen klagar nu. 497 00:25:44,250 --> 00:25:48,780 Om jag sammanställa this-- så det kan inte klaga, 498 00:25:48,780 --> 00:25:51,480 eftersom det kan inte veta att jag är kommer att ange ett negativt tal, 499 00:25:51,480 --> 00:25:52,550 som kan vara ogiltig. 500 00:25:52,550 --> 00:25:54,633 För alla den vet, jag kanske ange ett positivt tal, 501 00:25:54,633 --> 00:25:56,000 vilket är helt giltiga. 502 00:25:56,000 --> 00:26:01,090 Så jag kan tänka mig om jag anger -1 människor i rummet, segmentering fel. 503 00:26:01,090 --> 00:26:06,040 >> Så okej. 504 00:26:06,040 --> 00:26:13,160 Så låt oss lägga detta tillbaka bara hålla det vad det ursprungligen var. 505 00:26:13,160 --> 00:26:15,640 Så gör åldrar. 506 00:26:15,640 --> 00:26:18,120 Nu om jag vill prova en negativt age-- så låt oss 507 00:26:18,120 --> 00:26:19,710 säger att det finns fem personer i rummet. 508 00:26:19,710 --> 00:26:23,180 Age of persons nummer ett är negativ 4, person tre 509 00:26:23,180 --> 00:26:26,500 är noll, personen three-- OK. 510 00:26:26,500 --> 00:26:29,850 Så här ett år från och med nu, personnummer en kommer att vara negativ 3 år gammal. 511 00:26:29,850 --> 00:26:32,830 Så förmodligen inte vettigt. 512 00:26:32,830 --> 00:26:37,220 Men det är bara för att titta på koden allt vi gör 513 00:26:37,220 --> 00:26:40,260 begär getInt. 514 00:26:40,260 --> 00:26:44,110 >> Nu, om vi hade haft GetPositiveInt funktion 515 00:26:44,110 --> 00:26:49,690 eller vi hade helt enkelt gjort detta sorts samma stund slinga där nere, 516 00:26:49,690 --> 00:26:52,340 då detta skulle fungera alldeles utmärkt. 517 00:26:52,340 --> 00:26:54,200 Men i detta särskilda fall, gör vi bara inte 518 00:26:54,200 --> 00:26:57,772 råkar vara hantera negativa värden. 519 00:26:57,772 --> 00:26:59,147 Alla andra frågor om arrayer? 520 00:26:59,147 --> 00:27:02,290 521 00:27:02,290 --> 00:27:03,250 OK. 522 00:27:03,250 --> 00:27:09,380 >> Så vi har nu sett matriser. 523 00:27:09,380 --> 00:27:12,500 Och vi kommer att behöva använda detta för kommandoradsargument. 524 00:27:12,500 --> 00:27:14,680 Så i problembild two-- Jag vet att många av er 525 00:27:14,680 --> 00:27:18,040 kan fortfarande arbeta med problem set en, men problem ställa in två kommer upp. 526 00:27:18,040 --> 00:27:22,260 I problem set två, kommer du att måste ha att göra med strängar, arrayer, 527 00:27:22,260 --> 00:27:23,950 och kommandoradsargument. 528 00:27:23,950 --> 00:27:26,270 >> Så vad är kommandoradsargumenten? 529 00:27:26,270 --> 00:27:29,570 Nu kan du se här nere en liten teaser för exakt vad som är 530 00:27:29,570 --> 00:27:30,950 kommer att hända. 531 00:27:30,950 --> 00:27:32,950 Vi ser int main, inc argc, string argv parentes. 532 00:27:32,950 --> 00:27:34,560 533 00:27:34,560 --> 00:27:38,130 Så låt oss först försöka tolka vad det försöker säga. 534 00:27:38,130 --> 00:27:40,800 Nu, OK. 535 00:27:40,800 --> 00:27:44,637 >> Så på kommandoraden bör du vara vänja sig några av dessa kommandon 536 00:27:44,637 --> 00:27:48,580 nu, och du har förmodligen köra cd i terminalen innan. 537 00:27:48,580 --> 00:27:52,100 Så om vi säger cd pset1, du vet att det bör 538 00:27:52,100 --> 00:27:55,050 att förändras i pset1 katalogen. 539 00:27:55,050 --> 00:27:59,120 >> Nu märker att du har aldrig skrivit ett program liknande förut. 540 00:27:59,120 --> 00:28:03,120 Varje program som du har skrivit, du skulle köra, säg, dot slash Mario, 541 00:28:03,120 --> 00:28:06,779 dot slash giriga, och då är det kan be dig för inmatning. 542 00:28:06,779 --> 00:28:08,570 Nu, det är inte vad förändring katalog gör. 543 00:28:08,570 --> 00:28:12,770 När du kör cd, inte då säga, vilken katalog vill du cd i? 544 00:28:12,770 --> 00:28:17,200 Istället kan du bara säga, cd pset1, och det bara går in i pset1 katalogen. 545 00:28:17,200 --> 00:28:20,430 >> Så på samma sätt vi har andra exempel. 546 00:28:20,430 --> 00:28:21,540 gör hej. 547 00:28:21,540 --> 00:28:25,760 När du kör gör, inte då säga, vilket program vill du göra? 548 00:28:25,760 --> 00:28:29,620 Du säger bara, vid kommandoraden gör hej. 549 00:28:29,620 --> 00:28:31,060 >> Move är ett annat exempel. 550 00:28:31,060 --> 00:28:34,840 Denna vi flyttar mario.c fil upp en katalog. 551 00:28:34,840 --> 00:28:38,060 Så nu vet vi med det här exemplet vi verkligen passerar två argument. 552 00:28:38,060 --> 00:28:42,090 Det finns mario.c som det första argumentet, och dot dot är det andra argumentet. 553 00:28:42,090 --> 00:28:46,140 Och sedan när du kör gör du se att riktigt lång kommandot line-- 554 00:28:46,140 --> 00:28:50,580 som verkligen länge kommandot skrivs på kommandoraden. 555 00:28:50,580 --> 00:28:53,590 Så det länge command-- här är bara en kort del av den, 556 00:28:53,590 --> 00:28:56,090 men nu har vi tre kommandoradsargument. 557 00:28:56,090 --> 00:28:59,750 Dot streck noll, hej, och hej.c. 558 00:28:59,750 --> 00:29:03,497 >> Så dessa är kommandoraden argument, argument 559 00:29:03,497 --> 00:29:05,580 att du passerar på kommandoraden, så att det 560 00:29:05,580 --> 00:29:08,680 behöver inte bli tillfrågad när du kör programmet. 561 00:29:08,680 --> 00:29:13,090 Det skulle vara frustrerande om när du sprang klang det sade, "OK, 562 00:29:13,090 --> 00:29:15,630 som program-- som filen du sammanställa? 563 00:29:15,630 --> 00:29:17,010 Hej.c. 564 00:29:17,010 --> 00:29:19,440 Vilka flaggor skulle du vilja att komma in? streck o. 565 00:29:19,440 --> 00:29:21,190 Vad skulle du vilja filen att kallas? 566 00:29:21,190 --> 00:29:21,690 Hallå. 567 00:29:21,690 --> 00:29:25,290 Nej, du bara köra clang dash o hej hej.c. 568 00:29:25,290 --> 00:29:28,820 >> Så ser tillbaka på detta. 569 00:29:28,820 --> 00:29:32,920 Nu argc-- argc är argument räknas. 570 00:29:32,920 --> 00:29:36,620 Det är antalet kommandoraden argument anges på kommandoraden. 571 00:29:36,620 --> 00:29:39,720 Tja, argv-- tekniskt v står för vektorn, 572 00:29:39,720 --> 00:29:41,460 vilket i princip innebär array. 573 00:29:41,460 --> 00:29:42,680 Men du kan ignorera det. 574 00:29:42,680 --> 00:29:47,540 Argv-- vi har sträng argv, så sträng argv parentes. 575 00:29:47,540 --> 00:29:50,150 Så det här är en annan form av fästen du inte har sett förut. 576 00:29:50,150 --> 00:29:52,300 Så vi har sett fäste notation när vi har sagt, 577 00:29:52,300 --> 00:29:53,970 liknande, string s lika Zamyla. 578 00:29:53,970 --> 00:29:56,910 s konsol 0 åtkomst tecknet Z. 579 00:29:56,910 --> 00:30:00,720 >> Vi har också sett fästen när vi sade int åldrar fästet 5. 580 00:30:00,720 --> 00:30:03,160 Det förklarade en rad storlek 5. 581 00:30:03,160 --> 00:30:06,280 Så här är en version av den konsoler vi inte har sett förut. 582 00:30:06,280 --> 00:30:09,630 Så denna typ av sträng argv som skulle vara helt bekant 583 00:30:09,630 --> 00:30:12,050 att det bara skulle vara en sträng. 584 00:30:12,050 --> 00:30:14,520 Nu parentes anger att detta är en array. 585 00:30:14,520 --> 00:30:19,920 Så sträng argv konsoler medel att argv är en array med strängar. 586 00:30:19,920 --> 00:30:22,540 Nu tekniskt en sträng är en array med tecken. 587 00:30:22,540 --> 00:30:26,400 Så det här är nu en array av en uppsättning tecken. 588 00:30:26,400 --> 00:30:31,490 Men det är mycket lättare att tänka på detta som bara en array med strängar. 589 00:30:31,490 --> 00:30:34,900 >> Så varför skulle konsolerna vara tom? 590 00:30:34,900 --> 00:30:38,170 Liksom, varför kan vi inte säga, konsol 5, fäste n? 591 00:30:38,170 --> 00:30:40,700 592 00:30:40,700 --> 00:30:41,200 Yeah. 593 00:30:41,200 --> 00:30:43,731 594 00:30:43,731 --> 00:30:44,230 Yeah. 595 00:30:44,230 --> 00:30:46,396 Vi vet inte hur många ingångar där kommer att bli. 596 00:30:46,396 --> 00:30:53,560 Så om vi tittar på den klang exempel vi säger klang streck o hej hej.c. 597 00:30:53,560 --> 00:30:56,710 I det här fallet, det råkar att vara tre kommandoradsargument. 598 00:30:56,710 --> 00:31:00,522 Och så brackets-- vi får se i en andra det inte skulle vara tre. 599 00:31:00,522 --> 00:31:01,730 Det tekniskt sett vore fyra. 600 00:31:01,730 --> 00:31:04,030 Men konsolerna, vi skulle säg, det finns tre. 601 00:31:04,030 --> 00:31:08,220 Men nu om vi tittat på flytt mario.c dot dot, konsolerna 602 00:31:08,220 --> 00:31:09,760 Vi vill sätta två i dem. 603 00:31:09,760 --> 00:31:12,884 >> Och det finns en hel del kommandon som har ett varierande antal kommandoraden 604 00:31:12,884 --> 00:31:13,620 argument. 605 00:31:13,620 --> 00:31:17,430 Så vad den här versionen av hakparenteser indikerar 606 00:31:17,430 --> 00:31:20,820 är att argv är en array av strängar. 607 00:31:20,820 --> 00:31:24,360 Men vi vet inte hur många strängar är i den arrayen. 608 00:31:24,360 --> 00:31:27,090 Och hur vet vi hur många strängar är i arrayen? 609 00:31:27,090 --> 00:31:28,870 Det är hela poängen argc. 610 00:31:28,870 --> 00:31:32,300 argc berättar hur länge argv är. 611 00:31:32,300 --> 00:31:36,500 >> Så det sista för att hålla åtanke är att tekniskt, 612 00:31:36,500 --> 00:31:40,820 kommandot själv räknas som en av kommandoradsargument. 613 00:31:40,820 --> 00:31:45,330 Så cd pset1, det finns två kommandoradsargument. 614 00:31:45,330 --> 00:31:50,260 Programmet i sig, cd, och sedan det aktuella argumentet del av det, pset1. 615 00:31:50,260 --> 00:31:54,490 Alla program som du har skrivit hittills har haft en kommandoraden argument-- dot 616 00:31:54,490 --> 00:31:55,320 snedstreck Mario. 617 00:31:55,320 --> 00:31:57,350 Det är den enda kommandoraden argument. 618 00:31:57,350 --> 00:32:00,900 >> Så nu tittar på clang dash o hej hej.c. 619 00:32:00,900 --> 00:32:01,905 Så vad är argc? 620 00:32:01,905 --> 00:32:05,260 621 00:32:05,260 --> 00:32:06,080 4. 622 00:32:06,080 --> 00:32:08,140 Så argc är 4. 623 00:32:08,140 --> 00:32:12,140 Klang, så argv konsol 0 är klang. 624 00:32:12,140 --> 00:32:15,630 argv fäste 1 är streck 0. 625 00:32:15,630 --> 00:32:21,870 argv fästet 2 är hej, och argv fästet 3 är hej.c. 626 00:32:21,870 --> 00:32:26,813 OK, så frågor om detta, och då kommer vi titta på några programmatiska exempel. 627 00:32:26,813 --> 00:32:29,460 628 00:32:29,460 --> 00:32:30,480 >> OK. 629 00:32:30,480 --> 00:32:36,260 Så vi tar en titt på hello3.c. 630 00:32:36,260 --> 00:32:41,890 Så detta bör vara bekant från ett av de första C Exempel 631 00:32:41,890 --> 00:32:45,800 vi hade där vi bara skulle säga, hej värld, men nu är det mer generellt. 632 00:32:45,800 --> 00:32:52,300 Så här är vi säger hej % s backslash n argv konsolen 1. 633 00:32:52,300 --> 00:32:57,440 Notice-- så fram till denna punkt, är detta vad min mallfilen har sett ut. 634 00:32:57,440 --> 00:33:01,800 Jag hade int main (void), och sedan skulle jag göra något i huvudfunktionen. 635 00:33:01,800 --> 00:33:05,100 Nu i stället, när vi börja ta itu med kommandoradsargument, 636 00:33:05,100 --> 00:33:07,890 Vi måste konstatera en annan form av huvud. 637 00:33:07,890 --> 00:33:11,930 >> Så titta på hello3 igen, det viktigaste är att gå 638 00:33:11,930 --> 00:33:15,990 att ta två argument now-- int argc, Antalet kommandoradsargument, 639 00:33:15,990 --> 00:33:20,970 och sträng argv parentes, den faktiska strängar in på kommandoraden. 640 00:33:20,970 --> 00:33:26,560 Så jag kommer att ändra på det mall för att återspegla detta faktum. 641 00:33:26,560 --> 00:33:29,060 Nu när du skriver ett program om du inte 642 00:33:29,060 --> 00:33:33,720 behöver ta något kommando-line argument, sedan bara använda int main (void). 643 00:33:33,720 --> 00:33:37,070 Men nu när du skriver kommandoradsargument program, som 644 00:33:37,070 --> 00:33:40,350 du ska göra för problem ställa two-- så nu när du kör 645 00:33:40,350 --> 00:33:42,630 program som behöver ta kommandoradsargument, 646 00:33:42,630 --> 00:33:45,250 du måste ha huvud av detta formulär. 647 00:33:45,250 --> 00:33:51,290 >> Så här-- detta är den stora användnings av kommandoraden argument. 648 00:33:51,290 --> 00:33:54,100 Så utskrift argv 1. 649 00:33:54,100 --> 00:33:59,180 OK så låt oss sammanställa och kör detta program. 650 00:33:59,180 --> 00:34:02,440 Gör hello3. 651 00:34:02,440 --> 00:34:03,570 Sammanställer. 652 00:34:03,570 --> 00:34:06,870 Dot slash hello3. 653 00:34:06,870 --> 00:34:08,920 Och låt oss säga, "Rob." 654 00:34:08,920 --> 00:34:10,760 Hej Rob. 655 00:34:10,760 --> 00:34:14,940 Om jag säger, "Hej Maria," Hej Maria. 656 00:34:14,940 --> 00:34:15,719 Hej Maria. 657 00:34:15,719 --> 00:34:18,639 Hannah fortfarande säger, "Hej Maria ", eftersom jag inte 658 00:34:18,639 --> 00:34:21,340 gör något med vår argv 2. 659 00:34:21,340 --> 00:34:22,590 Argv 2 nu skulle vara "Hannah." 660 00:34:22,590 --> 00:34:25,030 Argc skulle vara tre. 661 00:34:25,030 --> 00:34:27,735 Vad händer om jag gjorde det här? 662 00:34:27,735 --> 00:34:31,980 663 00:34:31,980 --> 00:34:34,679 Så hej null. 664 00:34:34,679 --> 00:34:38,760 >> Han berörde kort på det faktum att tekniskt, getString 665 00:34:38,760 --> 00:34:42,429 kan returnera null, men vi får en mycket mer i vad null egentligen är. 666 00:34:42,429 --> 00:34:47,449 Men ta det som en fråga om faktum att ingen är generellt dåliga. 667 00:34:47,449 --> 00:34:50,179 Vi gjorde något fel om det skriver ut "Hej null." 668 00:34:50,179 --> 00:34:52,179 Och anledningen till att vi gjorde något fel är-- bra, 669 00:34:52,179 --> 00:34:56,179 när jag körde dot slash hello3 var argc 1. 670 00:34:56,179 --> 00:34:59,680 Så det betyder längden av argv var 1. 671 00:34:59,680 --> 00:35:05,110 Om en array har längden 1, det enda giltiga index är noll. 672 00:35:05,110 --> 00:35:08,550 Och så här argv en är utanför intervallet för denna matris. 673 00:35:08,550 --> 00:35:13,410 Det liknade förut när jag försökte att lagra sex utanför slutet av arrayen. 674 00:35:13,410 --> 00:35:18,100 Så jag försöker komma åt något utsidan av argv räknas, 675 00:35:18,100 --> 00:35:21,340 och vi får null. 676 00:35:21,340 --> 00:35:24,360 >> Så en bättre version av detta, en förbättring, 677 00:35:24,360 --> 00:35:27,010 uttryckligen kontroll argc. 678 00:35:27,010 --> 00:35:33,580 Så om argc är lika med 2, betyder att vi körde något liknande dot slash hello3 Rob. 679 00:35:33,580 --> 00:35:36,840 Och det kommer ut "Hej Rob." 680 00:35:36,840 --> 00:35:39,850 Om argc inte är lika 2, då är det bara att gå 681 00:35:39,850 --> 00:35:42,560 att ignorera vad du lägger på kommandoraden argument 682 00:35:42,560 --> 00:35:43,960 som kommandoradsargument. 683 00:35:43,960 --> 00:35:47,168 Eller om du inte sätta någon alls, är det bara att ignorera det och bara säga, 684 00:35:47,168 --> 00:35:47,960 "Hej du." 685 00:35:47,960 --> 00:35:51,490 >> Så sammanställa detta. 686 00:35:51,490 --> 00:35:54,500 Gör hello4. 687 00:35:54,500 --> 00:35:56,790 Och kör hello4. 688 00:35:56,790 --> 00:36:00,010 Kör det här sättet, vad som ska skrivas ut? 689 00:36:00,010 --> 00:36:01,330 "Hej du." 690 00:36:01,330 --> 00:36:02,810 Hej du. 691 00:36:02,810 --> 00:36:05,870 Vad sägs om hello4 Rob? 692 00:36:05,870 --> 00:36:06,950 "Hej Rob." 693 00:36:06,950 --> 00:36:10,580 Och slutligen, hello Rob Maria är bara "Hej du" igen, 694 00:36:10,580 --> 00:36:13,677 eftersom du inte riktigt komma in något som förväntas. 695 00:36:13,677 --> 00:36:15,510 Du angav fler namn än den kunde hantera, 696 00:36:15,510 --> 00:36:19,500 så det bara som standard hello du beteende. 697 00:36:19,500 --> 00:36:23,040 Så frågor om detta? 698 00:36:23,040 --> 00:36:26,290 Eller kommandoradsargument? 699 00:36:26,290 --> 00:36:28,690 >> OK, så ta en titt på en några fler exempel på att använda 700 00:36:28,690 --> 00:36:34,230 kommandoraden arguments-- först Vi har argv streck 1 dot c. 701 00:36:34,230 --> 00:36:38,510 Så kommentarerna ge bort vad Detta program borde göra. 702 00:36:38,510 --> 00:36:42,460 Men märker now-- detta för loop, Detta matchar exakt mönster 703 00:36:42,460 --> 00:36:43,390 Jag sade innan. 704 00:36:43,390 --> 00:36:46,240 Vi råkar bara vara användning argc istället för n. 705 00:36:46,240 --> 00:36:48,880 Nu argc är verkligen n. 706 00:36:48,880 --> 00:36:51,260 Det är längden på argv arrayen. 707 00:36:51,260 --> 00:36:59,600 Så är iteration över argv array printf-ing varje argv värde. 708 00:36:59,600 --> 00:37:04,730 >> Så om jag gör detta. 709 00:37:04,730 --> 00:37:08,232 Gör argv 1. 710 00:37:08,232 --> 00:37:09,940 Den sammanställer. 711 00:37:09,940 --> 00:37:11,620 Dot slash argv 1. 712 00:37:11,620 --> 00:37:15,530 Bara kör det här, det tryck dot snedstreck argv 1 713 00:37:15,530 --> 00:37:18,500 eftersom det var den enda kommandoraden argument-- programnamnet. 714 00:37:18,500 --> 00:37:22,080 Det kommer alltid att finnas på least-- argc kan inte vara mindre än ett, 715 00:37:22,080 --> 00:37:25,910 eftersom det kommer alltid minst vara programnamnet för att köra. 716 00:37:25,910 --> 00:37:32,040 Så argv 1 Rob skriver ut argv 1 och sedan på den nya linjen "Rob." 717 00:37:32,040 --> 00:37:36,350 >> Så i den första iterationen av denna slinga, jag är 0. 718 00:37:36,350 --> 00:37:39,090 Argv 0 är programnamnet. 719 00:37:39,090 --> 00:37:40,010 Dot slash argv 1. 720 00:37:40,010 --> 00:37:43,770 Och sedan argv 1 är min första kommandoraden argument, som är Rob. 721 00:37:43,770 --> 00:37:45,920 Vid denna punkt, är vi lika med argc. 722 00:37:45,920 --> 00:37:48,210 Vi bryta sig ur slingan och vi är klara. 723 00:37:48,210 --> 00:37:53,940 Så det här kommer att arbeta för en godtycklig antal kommandoradsargument. 724 00:37:53,940 --> 00:37:58,550 Lägg märke till det skriver argv 0, argv 1, argv 2, argv 3, argv 4. 725 00:37:58,550 --> 00:38:00,150 Och det finns ingen argv 5. 726 00:38:00,150 --> 00:38:01,460 argc är lika med fem. 727 00:38:01,460 --> 00:38:06,960 Så vid argc-- på i är lika med 5, vi bryta sig ut ur loopen. 728 00:38:06,960 --> 00:38:07,950 OK. 729 00:38:07,950 --> 00:38:11,315 Så frågor om det innan vi titta på ett mer komplext exempel? 730 00:38:11,315 --> 00:38:14,190 731 00:38:14,190 --> 00:38:16,860 >> Så argv 2. 732 00:38:16,860 --> 00:38:17,830 Okej. 733 00:38:17,830 --> 00:38:20,610 Så vi fortfarande skriver ut de kommandoradsargument. 734 00:38:20,610 --> 00:38:23,170 Men nu märker vi har en kapslad för slinga. 735 00:38:23,170 --> 00:38:24,670 Så vad är detta gör? 736 00:38:24,670 --> 00:38:28,430 Så den första slingan gör exakt vad den gjorde innan. 737 00:38:28,430 --> 00:38:30,950 Vi är fortfarande kretsa över varje kommandoradsargument, 738 00:38:30,950 --> 00:38:34,260 men nu detta andra loop-- vi har också sett något liknande förut. 739 00:38:34,260 --> 00:38:38,600 När han var iteration över Zamyla utskrift av Z-A-M-Y-L-A. 740 00:38:38,600 --> 00:38:44,816 Så här andra slingan för int j lika 0, n är lika strlen av argv fäste i. 741 00:38:44,816 --> 00:38:49,170 >> Så låt oss först tänka the-- låt oss gå igenom. 742 00:38:49,170 --> 00:38:53,560 Låt oss tänka vad datorn skulle göra om jag körde det här programmet som just dot 743 00:38:53,560 --> 00:38:56,030 slash argv streck 2. 744 00:38:56,030 --> 00:39:03,590 Så om jag körde denna kod, då argc kommer att vara lika med 1. 745 00:39:03,590 --> 00:39:07,050 Och snöre argv-- det bara kommer att bli ett index i argv, 746 00:39:07,050 --> 00:39:12,370 och det kommer att vara lika med dot slash argv 2-- programnamnet. 747 00:39:12,370 --> 00:39:19,170 >> OK, så nu har jag lika med 0, i mindre än 1, jag plus plus för int j lika med 0, 748 00:39:19,170 --> 00:39:23,880 n är lika strlen av argv bygel 0, så i den första variant av denna slinga. argv 749 00:39:23,880 --> 00:39:27,250 konsol 0 är dot slash argv 2. 750 00:39:27,250 --> 00:39:29,320 Så vad är längden på strängen? 751 00:39:29,320 --> 00:39:32,480 Tja, dot slash A-R-G-V streck 2. 752 00:39:32,480 --> 00:39:35,020 Så strlen av detta kommer att vara 8. 753 00:39:35,020 --> 00:39:37,500 Så j är lika med 0, n är lika med 8. 754 00:39:37,500 --> 00:39:39,530 Så länge som j är mindre än 8, j ++. 755 00:39:39,530 --> 00:39:44,080 Och med att vi kommer att vara skriver ut ett enda tecken, som 756 00:39:44,080 --> 00:39:47,350 är argv konsol jag fästet j. 757 00:39:47,350 --> 00:39:49,826 >> Så det enda jag är noll. 758 00:39:49,826 --> 00:39:51,700 Vi har fortfarande bara en kommandoraden argument. 759 00:39:51,700 --> 00:39:53,890 I det första iteration av for-slingan, vi är 760 00:39:53,890 --> 00:39:56,950 kommer att bli utskrift argv konsol 0 konsol 0. 761 00:39:56,950 --> 00:39:58,325 Och sedan j kommer att öka. 762 00:39:58,325 --> 00:40:01,650 Och vi kommer att skriva ut argv konsol 0 konsolen 1. 763 00:40:01,650 --> 00:40:04,150 Och sedan argv konsol 0 konsol 2. 764 00:40:04,150 --> 00:40:09,030 >> Så detta är vårt första möte flerdimensionella arrayer. 765 00:40:09,030 --> 00:40:12,770 Kom ihåg tidigare att jag sa att argv är tekniskt 766 00:40:12,770 --> 00:40:15,950 en matris med rader av tecken. 767 00:40:15,950 --> 00:40:24,360 Så här om jag sa något i stil string s lika argv fäste i, 768 00:40:24,360 --> 00:40:29,590 och då sa jag, s fäste j, detta skulle åstadkomma samma sak. 769 00:40:29,590 --> 00:40:31,960 Nu har du sett s fäste j innan. 770 00:40:31,960 --> 00:40:36,680 Det är bara komma åt den j: te karaktären av denna sträng. 771 00:40:36,680 --> 00:40:48,010 Så med detta, vi får det j: te karaktär i: te argv. 772 00:40:48,010 --> 00:40:51,450 >> Så vad bör detta i slutändan utgång? 773 00:40:51,450 --> 00:40:53,210 Gör argv 2. 774 00:40:53,210 --> 00:40:54,730 Den sammanställer. 775 00:40:54,730 --> 00:40:56,340 Dot slash argv 2. 776 00:40:56,340 --> 00:41:03,790 "Rob Maria Hannah" och ge oss några rum. 777 00:41:03,790 --> 00:41:07,050 Så vi ser att detta är utmatning prick på en egen rad och snedstreck 778 00:41:07,050 --> 00:41:08,920 på en egen rad och en på en egen rad. 779 00:41:08,920 --> 00:41:11,260 Det skrivs ut varje särprägel 780 00:41:11,260 --> 00:41:12,950 av varje kommandoraden argument. 781 00:41:12,950 --> 00:41:15,960 Och sedan i mellan dem, på grund av denna nya serie 782 00:41:15,960 --> 00:41:19,380 vi skriver ut här nere, i mellan dem det kommer ut en ny linje. 783 00:41:19,380 --> 00:41:24,540 >> Så detta liknar den kända argv streck 1, 784 00:41:24,540 --> 00:41:26,459 som trycks varje kommandoraden argument 785 00:41:26,459 --> 00:41:28,500 men nu är vi utskrift de kommandoradsargument 786 00:41:28,500 --> 00:41:31,950 och sedan iterera igenom varje karaktären hos varje kommandoradsargument 787 00:41:31,950 --> 00:41:35,400 att få denna utgång. 788 00:41:35,400 --> 00:41:36,870 OK? 789 00:41:36,870 --> 00:41:40,570 Så frågor om detta? 790 00:41:40,570 --> 00:41:45,130 >> En sak att notera är att kommandoraden arguments-- 791 00:41:45,130 --> 00:41:49,990 så att de skiljs åt av mellanslag som du skulle naturligtvis förvänta sig att vara. 792 00:41:49,990 --> 00:41:53,050 Så en sträng kan ha utrymmen i det. 793 00:41:53,050 --> 00:41:57,380 Det är inte super viktigt, men om jag ville tredje kommandoraden argument 794 00:41:57,380 --> 00:42:01,226 att ha ett utrymme i det, då jag kunde säga något sådant. 795 00:42:01,226 --> 00:42:04,470 796 00:42:04,470 --> 00:42:05,550 OK? 797 00:42:05,550 --> 00:42:12,190 Så detta nu fortfarande bara har tre kommandoraden arguments-- brunn 4. 798 00:42:12,190 --> 00:42:17,620 Dot slash argv streck 2, Rob, Maria, och Hannah Bloomberg. 799 00:42:17,620 --> 00:42:18,320 OK. 800 00:42:18,320 --> 00:42:19,310 Frågor om detta? 801 00:42:19,310 --> 00:42:22,700 802 00:42:22,700 --> 00:42:24,894 >> Det finns inget speciellt om blanksteg. 803 00:42:24,894 --> 00:42:27,810 Det råkar bara vara att kommandoraden behandlar blanksteg 804 00:42:27,810 --> 00:42:29,226 hur du separera varje argument. 805 00:42:29,226 --> 00:42:32,048 806 00:42:32,048 --> 00:42:33,000 Okej. 807 00:42:33,000 --> 00:42:39,950 Så då Problem set two-- du kommer att vara 808 00:42:39,950 --> 00:42:43,240 tittar på hemlig nyckel kryptering. 809 00:42:43,240 --> 00:42:47,700 Så, som liknar den som exempel vi såg från A Christmas Story, 810 00:42:47,700 --> 00:42:52,840 du kommer att genomföra vissa algoritmer som, givet ett meddelande, 811 00:42:52,840 --> 00:42:55,560 du kommer att kunna att kryptera det meddelande 812 00:42:55,560 --> 00:42:58,730 som bara någon med att hemliga nyckel, med den dekoder ring, 813 00:42:58,730 --> 00:43:01,090 bör kunna dekryptera. 814 00:43:01,090 --> 00:43:04,839 >> Så det är standardversionen. 815 00:43:04,839 --> 00:43:07,130 Du kommer att genomföra två olika versioner. 816 00:43:07,130 --> 00:43:09,620 Om du råkar ta en titt vid hackaren Utgåva nu, 817 00:43:09,620 --> 00:43:12,600 vi kommer att ge du en sträng som denna, 818 00:43:12,600 --> 00:43:15,240 som representerar ett krypterat lösenord. 819 00:43:15,240 --> 00:43:19,990 Så ditt mål är att räkna ut vad dekrypterade lösenordet är. 820 00:43:19,990 --> 00:43:26,950 Nu är faktiskt hur lösenord lagras i en massa datorer, 821 00:43:26,950 --> 00:43:31,290 och det bara lagrar denna slumpmässig teckensträng. 822 00:43:31,290 --> 00:43:34,440 Du måste räkna ut hur man får från detta slumpmässiga teckensträng 823 00:43:34,440 --> 00:43:36,140 vad det ursprungliga lösenordet var. 824 00:43:36,140 --> 00:43:39,060 825 00:43:39,060 --> 00:43:43,290 >> Och slutligen, efter detta problem, skall du 826 00:43:43,290 --> 00:43:46,100 kunna förstå vad detta innebär. 827 00:43:46,100 --> 00:43:51,650 Så du kommer att lära dig att dekryptera denna typ av slumpmässiga sträng. 828 00:43:51,650 --> 00:43:56,390 På samma sätt, om du kommer ihåg från vecka 0, kanske du har sett denna URL. 829 00:43:56,390 --> 00:44:00,210 Och du bör kunna dekryptera detta så småningom. 830 00:44:00,210 --> 00:44:04,810 Du kanske inte är nöjd när du dekryptera den och klicka på länken. 831 00:44:04,810 --> 00:44:05,700 Okej. 832 00:44:05,700 --> 00:44:06,591 Det var allt för i dag. 833 00:44:06,591 --> 00:44:12,095 Så ser du nästa vecka! 834 00:44:12,095 --> 00:44:18,315 >> [ELEKTRONISK MUSIK SPELA] 835 00:44:18,315 --> 00:47:15,619