1 00:00:00,000 --> 00:00:03,944 >> [MUSIC SPILLE] 2 00:00:03,944 --> 00:00:10,732 3 00:00:10,732 --> 00:00:11,690 DAVID MALAN: All right. 4 00:00:11,690 --> 00:00:14,674 Dette er CS50, og denne er i slutten av uke 2. 5 00:00:14,674 --> 00:00:16,840 Jeg er så lei for at jeg ikke kunne være der med dere alle i dag, 6 00:00:16,840 --> 00:00:18,300 men du er i veldig gode hender. 7 00:00:18,300 --> 00:00:21,710 Tillat meg å presentere CS50 egen Rob Bowden. 8 00:00:21,710 --> 00:00:29,106 9 00:00:29,106 --> 00:00:31,730 ROB BOWDEN: Og selvfølgelig, deretter vi har å gjøre narr av det faktum 10 00:00:31,730 --> 00:00:36,820 at han sendte oss en vertikal video og vise dette. 11 00:00:36,820 --> 00:00:38,320 >> [VIDEO PLAYBACK] 12 00:00:38,320 --> 00:00:39,820 >> [MUSIC SPILLE] 13 00:00:39,820 --> 00:00:42,350 >> [Fotspor] 14 00:00:42,350 --> 00:00:44,730 >> -Dette Video gjorde ikke nødt til å se på denne måten. 15 00:00:44,730 --> 00:00:46,570 Det kunne ha vært forhindret. 16 00:00:46,570 --> 00:00:49,070 Si nei til vertikale videoer. 17 00:00:49,070 --> 00:00:53,310 >> -Vertikal Videoer skje når du Hold kameraet på feil måte. 18 00:00:53,310 --> 00:00:55,880 Videoen vil ende opp som ser ut som dritt. 19 00:00:55,880 --> 00:00:57,650 >> - [GRYNT] 20 00:00:57,650 --> 00:01:02,240 >> -Det Er flere og flere mennesker er avhengige å lage vertikale videoer hver dag. 21 00:01:02,240 --> 00:01:06,240 Det er ikke sprekke eller ingenting, men det er fortsatt veldig dårlig. 22 00:01:06,240 --> 00:01:10,410 Det finnes to forskjellige typer mennesker som er rammet med VVS. 23 00:01:10,410 --> 00:01:14,160 Den første gruppen behandler videoer de skyter like bilder. 24 00:01:14,160 --> 00:01:15,850 De mener ikke noe vondt. 25 00:01:15,850 --> 00:01:19,180 De forstår bare ikke at mens du kan slå et bilde, 26 00:01:19,180 --> 00:01:20,880 du kan egentlig ikke slå en video. 27 00:01:20,880 --> 00:01:21,880 >> [CRASH] 28 00:01:21,880 --> 00:01:23,460 >> - [MONKEY LYDER] 29 00:01:23,460 --> 00:01:27,540 >> -Den Andre gruppen er mennesker som ikke gir en [bleep]. 30 00:01:27,540 --> 00:01:31,090 >> -Vertikal Video syndrom er farlig. 31 00:01:31,090 --> 00:01:34,120 Filmindustrien har alltid vært horisontal. 32 00:01:34,120 --> 00:01:35,990 TV er horisontal. 33 00:01:35,990 --> 00:01:38,380 Dataskjermer er horisontale. 34 00:01:38,380 --> 00:01:41,580 Folks øyne er horisontale. 35 00:01:41,580 --> 00:01:45,170 Vi er ikke bygd for å se vertikale videoer. 36 00:01:45,170 --> 00:01:47,600 >> -Jeg Elsker vertikale videoer. 37 00:01:47,600 --> 00:01:50,410 >> -Nobody Bryr seg om deg. 38 00:01:50,410 --> 00:01:53,340 >> -Hvis Dette problemets venstre ukontrollert, du også 39 00:01:53,340 --> 00:01:57,650 vil begynne å vise fire videoer på en gang bare for å spare båndbredde. 40 00:01:57,650 --> 00:02:02,400 >> -Letterboxed Vertikale videoer ville være på størrelse med et frimerke. 41 00:02:02,400 --> 00:02:04,920 >> -Og Det vil spre seg overalt. 42 00:02:04,920 --> 00:02:07,670 Film skjermer har alltid vært horisontal. 43 00:02:07,670 --> 00:02:11,200 Hvis vertikale videoer blir aksepterte, kinoer 44 00:02:11,200 --> 00:02:13,930 blir nødt til å være høy og tynn. 45 00:02:13,930 --> 00:02:17,710 >> -Og Alle kinoene ville må bli revet og gjenoppbygget. 46 00:02:17,710 --> 00:02:22,090 Og etter den tid de ble gjenoppbygd, Mila Kunis ville være gammel og stygg. 47 00:02:22,090 --> 00:02:24,342 >> -Birds Vil krasje inn i dem og dø. 48 00:02:24,342 --> 00:02:26,530 >> -Vi Alle få stiv nakker fra å se opp. 49 00:02:26,530 --> 00:02:29,800 >> -Og Ingen vil sitte i første rad igjen. 50 00:02:29,800 --> 00:02:37,170 >> -George Lucas vil re-release stjerne Wars igjen-- den magre utgaven. 51 00:02:37,170 --> 00:02:41,860 >> -Jeg Var egentlig aldri i stand til å fortelle historien at jeg ønsket å fortelle. 52 00:02:41,860 --> 00:02:46,030 Dette var en stor sjanse for meg å eksperimentere med en ny teknologi. 53 00:02:46,030 --> 00:02:48,150 >> -Du En dust. 54 00:02:48,150 --> 00:02:54,430 >> -hver Gang en mobilenhet blir brukt til å spille inn video, er fristelsen der. 55 00:02:54,430 --> 00:02:56,370 Bare si nei. 56 00:02:56,370 --> 00:03:00,116 Si nei til George Lucas. 57 00:03:00,116 --> 00:03:04,062 Si nei til gamle Mila Kunis. 58 00:03:04,062 --> 00:03:06,600 Si nei til vertikale videoer. 59 00:03:06,600 --> 00:03:12,511 >> -Og Hvis du ser noen gjør det, si: "du er ikke fotograferer det riktig dummy!" 60 00:03:12,511 --> 00:03:15,433 >> [MUSIC SPILLE] 61 00:03:15,433 --> 00:03:18,842 62 00:03:18,842 --> 00:03:19,830 >> [END PLAYBACK] 63 00:03:19,830 --> 00:03:23,702 >> [APPLAUSE] 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 for kryptografi, 67 00:03:45,790 --> 00:03:49,500 som er utgangspunktet kryptering og dekryptering av hemmelige meldinger. 68 00:03:49,500 --> 00:03:52,590 Så her har vi en veldig enkel leketøy. 69 00:03:52,590 --> 00:03:56,900 Og tanken er den ytre ringen roterer rundt den indre ringen. 70 00:03:56,900 --> 00:04:01,610 Og du kan se, kanskje hvis jeg zoome i, at-- det er vanskelig å se. 71 00:04:01,610 --> 00:04:05,090 Men, som er antallet 1-- vel, som flyttet. 72 00:04:05,090 --> 00:04:09,120 >> Nummer 1 er tilordnet bokstaven X, nummer 2 kart til punkt og prikke 73 00:04:09,120 --> 00:04:11,630 J. Utrolig vanskelig ikke hoppe fremover. 74 00:04:11,630 --> 00:04:16,100 Letter to kart til J. Nummer tre maps til D. Så 75 00:04:16,100 --> 00:04:20,140 med denne ringen kan du gi noen en melding 1, 2, 3. 76 00:04:20,140 --> 00:04:22,624 For en eller annen grunn ønsker å fortelle dem XJD. 77 00:04:22,624 --> 00:04:24,540 Men du kan gi dem noen melding av tall, 78 00:04:24,540 --> 00:04:28,460 og så lenge som de har denne ring, de kan dekryptere hva du prøver å si. 79 00:04:28,460 --> 00:04:32,510 >> Så du kan ha sett dette spesielt eksempel på kryptografi 80 00:04:32,510 --> 00:04:36,640 før hvis rundt jula du har sett A Christmas Story. 81 00:04:36,640 --> 00:04:38,520 Hvis du aldri har sett det før, så bare 82 00:04:38,520 --> 00:04:41,060 slå på TBS ved bokstavelig helst på julaften, 83 00:04:41,060 --> 00:04:44,510 fordi de bare viser det back to back til rygg mot rygg mot rygg hele dagen. 84 00:04:44,510 --> 00:04:46,744 Og den aktuelle video dette. 85 00:04:46,744 --> 00:04:47,410 [VIDEO PLAYBACK] 86 00:04:47,410 --> 00:04:50,020 -Vær Det kjent for alle og enhver at Ralph Parker er herved 87 00:04:50,020 --> 00:04:52,850 oppnevnt et medlem av den lille Orphan Annie Secret Circle 88 00:04:52,850 --> 00:04:56,490 og har krav på alle æresbevisninger og fordeler som skjer i dette. 89 00:04:56,490 --> 00:04:59,010 Signert Little Orphan Annie. 90 00:04:59,010 --> 00:05:03,120 Kontra Pierre Andre i blekk! 91 00:05:03,120 --> 00:05:07,460 Honors og fordeler allerede i en alder av ni! 92 00:05:07,460 --> 00:05:12,530 >> [Roping fra RADIO] 93 00:05:12,530 --> 00:05:13,030 -Kom igjen. 94 00:05:13,030 --> 00:05:14,000 La oss fortsette med det. 95 00:05:14,000 --> 00:05:18,274 Jeg trenger ikke all that jazz om smuglere og pirater. 96 00:05:18,274 --> 00:05:20,440 Lytt morgen kveld med den avsluttende eventyr 97 00:05:20,440 --> 00:05:22,540 av Black Pirate Ship. 98 00:05:22,540 --> 00:05:25,460 Nå er det tid for Annie hemmelige budskap 99 00:05:25,460 --> 00:05:28,620 for dere medlemmer av Secret Circle. 100 00:05:28,620 --> 00:05:32,370 Husk barn, bare medlemmer av Annie Secret Circle 101 00:05:32,370 --> 00:05:34,880 kan dekode Annie hemmelige budskap. 102 00:05:34,880 --> 00:05:39,100 Husk, er Annie avhengig av deg. 103 00:05:39,100 --> 00:05:41,660 Still dine pins til B2. 104 00:05:41,660 --> 00:05:43,960 Her er 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 -Jeg Er i min første hemmelig møte. 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 >> -Å, Er Pierre i stor stemme i kveld. 115 00:05:54,570 --> 00:05:57,490 Jeg kunne fortelle at kveldens Meldingen var veldig viktig. 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 er en melding fra Annie selv. 119 00:06:01,580 --> 00:06:02,880 Husk, ikke si det til noen. 120 00:06:02,880 --> 00:06:07,840 121 00:06:07,840 --> 00:06:11,130 >> -Fem Sekunder senere, jeg er i den eneste rom i huset hvor en gutt på ni 122 00:06:11,130 --> 00:06:15,830 kunne sitte uforstyrret og dekode. 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 Jeg gikk til den neste. 126 00:06:20,210 --> 00:06:23,300 E. Det første ordet er "være". 127 00:06:23,300 --> 00:06:25,880 S. Det kom lettere nå. 128 00:06:25,880 --> 00:06:28,400 U. 25. 129 00:06:28,400 --> 00:06:30,528 Det er R. 130 00:06:30,528 --> 00:06:31,278 -Kom Igjen, Ralphie! 131 00:06:31,278 --> 00:06:31,861 Jeg har må gå! 132 00:06:31,861 --> 00:06:33,182 -Jeg Være rett ned, Ma! 133 00:06:33,182 --> 00:06:36,038 Jøss. 134 00:06:36,038 --> 00:06:42,840 T. O. "Sørg for å" - være sikker på hva? 135 00:06:42,840 --> 00:06:44,770 Hva var Little Orphan Annie prøver å si? 136 00:06:44,770 --> 00:06:46,381 Vær sikker på hva? 137 00:06:46,381 --> 00:06:47,825 >> -Randy Har fått til å gå! 138 00:06:47,825 --> 00:06:48,866 Kan du komme ut? 139 00:06:48,866 --> 00:06:49,783 >> -Alle Rett, mamma! 140 00:06:49,783 --> 00:06:51,786 Jeg skal være rett ut! 141 00:06:51,786 --> 00:06:53,606 Jeg begynte å bli nærmere nå. 142 00:06:53,606 --> 00:06:55,550 Spenningen var forferdelig. 143 00:06:55,550 --> 00:06:57,050 Hva var det? 144 00:06:57,050 --> 00:06:59,905 Skjebnen til planeten kan henge i balanse! 145 00:06:59,905 --> 00:07:01,736 >> -Ralphie, Randy må jo gå! 146 00:07:01,736 --> 00:07:05,680 >> -Jeg Være rett ut, for roper høyt! 147 00:07:05,680 --> 00:07:07,170 Nesten der! 148 00:07:07,170 --> 00:07:08,150 Fingrene mine fløy. 149 00:07:08,150 --> 00:07:09,980 Mitt sinn var en stål felle. 150 00:07:09,980 --> 00:07:11,496 Hver pore vibrerte. 151 00:07:11,496 --> 00:07:13,268 Det var nesten 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 Pass på å drikke 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 PLAYBACK] 163 00:07:35,890 --> 00:07:39,650 >> ROB BOWDEN: Så det er slik Ovaltine gjelder kryptografi. 164 00:07:39,650 --> 00:07:42,290 I utgangspunktet CS50 nettopp annonsert Ovaltine, slik at vi kunne 165 00:07:42,290 --> 00:07:44,400 være en crummy reklamefilm for Ovaltine. 166 00:07:44,400 --> 00:07:44,900 Greit. 167 00:07:44,900 --> 00:07:47,120 Så nå selve informatikk. 168 00:07:47,120 --> 00:07:50,670 Husk på mandag vi slapp dykking dypere inn strenger. 169 00:07:50,670 --> 00:07:52,820 Så vi arbeider med strengen "Zamyla." 170 00:07:52,820 --> 00:07:55,130 Og vi ble gjenkjenne det faktum at vi kan behandle 171 00:07:55,130 --> 00:07:57,510 "Zamyla" som en sekvens av tegn. 172 00:07:57,510 --> 00:07:59,740 Og husk at vi har lært braketten notasjon. 173 00:07:59,740 --> 00:08:01,995 Så hvis dette var lagret i en streng "s" og deretter 174 00:08:01,995 --> 00:08:05,860 hvis vi sa s brakett 0, ville det indikerer bokstaven hovedstaden Z. 175 00:08:05,860 --> 00:08:09,790 Og hvis vi sa s brakett 1, som skulle tilsi det første små bokstaver a, 176 00:08:09,790 --> 00:08:14,220 og så videre opp til s braketten 5, som skulle tilsi det siste en. 177 00:08:14,220 --> 00:08:17,090 >> Nå må du huske at Lengden av denne strengen er 6, 178 00:08:17,090 --> 00:08:23,220 men indeksene i strengen er 0 til 5, Z gjennom det vare. 179 00:08:23,220 --> 00:08:28,650 Så dette passer nå inn i et større bilde av datamaskinens minne, RAM. 180 00:08:28,650 --> 00:08:32,020 Så et eller annet sted i programmet som du kjører datamaskinen 181 00:08:32,020 --> 00:08:34,780 trenger å huske Zamyla et eller annet sted i minnet. 182 00:08:34,780 --> 00:08:36,029 Så kan jeg ha en frivillig? 183 00:08:36,029 --> 00:08:38,840 184 00:08:38,840 --> 00:08:40,181 Ja takk. 185 00:08:40,181 --> 00:08:50,120 186 00:08:50,120 --> 00:08:51,500 Og hva er ditt navn? 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 Hyggelig å møte deg, Dean. 190 00:08:54,910 --> 00:08:58,240 Så kom over her, og vi kommer til å ha du tegner 191 00:08:58,240 --> 00:09:00,740 på vår hyggelig kjekk liten layout minne. 192 00:09:00,740 --> 00:09:05,950 Nå liker jeg å tenke på minne som en lang stripe av bytes, 193 00:09:05,950 --> 00:09:11,090 men bare for visning formål vi vil bare gjør venstre til høyre, øverst til nederst. 194 00:09:11,090 --> 00:09:11,590 OK? 195 00:09:11,590 --> 00:09:22,030 >> Så jeg kommer til å vise en program-- Getstrings.c. 196 00:09:22,030 --> 00:09:25,760 Og så alt dette programmet er gjør ber om fire strenger 197 00:09:25,760 --> 00:09:28,830 fra brukeren med GetString og deretter utskrift 198 00:09:28,830 --> 00:09:30,950 uansett hva det første angitte strengen var. 199 00:09:30,950 --> 00:09:32,840 Vi ignorerer to til fire. 200 00:09:32,840 --> 00:09:33,610 OK. 201 00:09:33,610 --> 00:09:38,210 Så over her now-- når Jeg første forespørselen s1. 202 00:09:38,210 --> 00:09:39,740 Så du er datamaskinen. 203 00:09:39,740 --> 00:09:41,680 Og du gjennomfører GetString. 204 00:09:41,680 --> 00:09:46,710 Så du ber om en streng fra meg, og jeg sier, OK, Dean. 205 00:09:46,710 --> 00:09:47,900 Gi strengen "Dean". 206 00:09:47,900 --> 00:09:50,300 >> Så et eller annet sted i minnet du må huske "Dean". 207 00:09:50,300 --> 00:09:52,160 Så skriv det inn i minnet et sted. 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å nå har vi S2. 212 00:10:01,740 --> 00:10:03,869 Og s2 kommer til å bli en forespørsel til GetString. 213 00:10:03,869 --> 00:10:05,160 Så jeg kommer til å legge inn en streng. 214 00:10:05,160 --> 00:10:08,720 Jeg kommer til å skrive inn "Hannah." 215 00:10:08,720 --> 00:10:10,586 Så skriver du "Hannah" et sted 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å nå s3. 220 00:10:25,550 --> 00:10:28,380 Og det kommer til å være en annen be om å GetString. 221 00:10:28,380 --> 00:10:37,020 Og så nå skriver du "Maria". 222 00:10:37,020 --> 00:10:37,520 Greit. 223 00:10:37,520 --> 00:10:40,980 Og så er det en siste forespørsel til GetString, s4. 224 00:10:40,980 --> 00:10:42,580 Så, jeg vet ikke. 225 00:10:42,580 --> 00:10:45,640 Hva om vi går med antidisestablishmentarianism. 226 00:10:45,640 --> 00:10:49,460 Så skriv det inn i minnet. 227 00:10:49,460 --> 00:10:50,400 Yeah. 228 00:10:50,400 --> 00:10:53,970 Så bare gjøre "Rob". 229 00:10:53,970 --> 00:10:54,560 >> OK. 230 00:10:54,560 --> 00:10:58,410 Så nå explain-- hvorfor gjorde du lar disse områder? 231 00:10:58,410 --> 00:11:01,340 Hvorfor har du denne blank plass her, her og her oppe? 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å legger merke til når jeg går å skrive ut s1-- så hvis vi 235 00:11:09,450 --> 00:11:11,890 hadde "Hannah" løpe rett opp ved siden av "Dean" 236 00:11:11,890 --> 00:11:14,360 hvordan vet vi når strengen "Dean" slutter? 237 00:11:14,360 --> 00:11:19,470 Så skriver strengen s1 kan ha bare trykt "DeanHannahMariaRob" 238 00:11:19,470 --> 00:11:22,720 hvis den ikke har noen anelse av når "Dean" faktisk ender. 239 00:11:22,720 --> 00:11:23,240 >> Greit. 240 00:11:23,240 --> 00:11:27,650 Så i minnet måten vi faktisk representerer denne enden av en streng 241 00:11:27,650 --> 00:11:29,940 er med backslash null. 242 00:11:29,940 --> 00:11:32,620 Så dette rommet er nøyaktig hva vi ønsket. 243 00:11:32,620 --> 00:11:34,040 Det bør være en skråstrek null. 244 00:11:34,040 --> 00:11:37,690 Dette vil være en omvendt skråstrek null, og dette vil være en backslash null. 245 00:11:37,690 --> 00:11:41,585 Og du kan ha en fabelaktig premie for å være en perfekt frivillig. 246 00:11:41,585 --> 00:11:44,910 247 00:11:44,910 --> 00:11:45,860 Ta en stress ball! 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å dette tegnet backslash null er hvordan vi angi slutten av en streng. 251 00:11:54,420 --> 00:11:57,120 Det er hvordan når et gitt program ønsker å skrive ut en streng, 252 00:11:57,120 --> 00:11:59,760 det er how-- husker vi lærte den strlen funksjon i forrige uke? 253 00:11:59,760 --> 00:12:00,940 String lengde? 254 00:12:00,940 --> 00:12:03,770 Det er hvordan strenglengde er i stand til å bestemme hvor lenge en streng er. 255 00:12:03,770 --> 00:12:05,810 Det holder bare itera over tegn 256 00:12:05,810 --> 00:12:08,217 til den finner backslash null karakter. 257 00:12:08,217 --> 00:12:11,050 Så det viktigste er å innse om backslash null karakter 258 00:12:11,050 --> 00:12:14,950 er det representert av alle nuller i biter. 259 00:12:14,950 --> 00:12:18,980 Så merker at dette er forskjellig fra null-tegn. 260 00:12:18,980 --> 00:12:23,010 Så null karakter, hvis du husker i eksemplet at han ga ved slutten 261 00:12:23,010 --> 00:12:27,360 av foredrag der karakterene kart to-- som kapital A maps til 65. 262 00:12:27,360 --> 00:12:29,130 Små bokstaver et kart til 97. 263 00:12:29,130 --> 00:12:30,890 Små bokstaver b ville være 98. 264 00:12:30,890 --> 00:12:35,220 Så nummer 0 kartene to-- jeg ikke vet av toppen av hodet mitt. 265 00:12:35,220 --> 00:12:36,400 44 eller 45. 266 00:12:36,400 --> 00:12:37,890 Et sted i den regionen. 267 00:12:37,890 --> 00:12:40,850 >> Så tegnet 0 er en faktisk nummer. 268 00:12:40,850 --> 00:12:44,350 Men backslash null kart til alle null biter. 269 00:12:44,350 --> 00:12:46,380 Så det er en forskjell mellom backslash null, 270 00:12:46,380 --> 00:12:48,450 som vi kaller det null terminator. 271 00:12:48,450 --> 00:12:53,210 Det er et skille mellom backslash null og karakteren null. 272 00:12:53,210 --> 00:12:54,350 >> Greit. 273 00:12:54,350 --> 00:12:57,520 Så snakker litt mer om strenger. 274 00:12:57,520 --> 00:13:01,470 Så da ser vi her dette er hvordan ville det være lagt ut i minnet. 275 00:13:01,470 --> 00:13:07,940 Så denne ideen om strenger som en sekvens av characters-- så den offisielle datamaskin 276 00:13:07,940 --> 00:13:10,750 sciency begrep for sekvensen er en matrise. 277 00:13:10,750 --> 00:13:13,790 Så vi vil kalle en streng en rekke tegn. 278 00:13:13,790 --> 00:13:17,770 Og det er faktisk andre data typer som vi kan gjøre arrays ut av. 279 00:13:17,770 --> 00:13:19,975 >> Så for å motivere dette, se på et eksempel. 280 00:13:19,975 --> 00:13:22,810 281 00:13:22,810 --> 00:13:29,812 Vi kaller det ages0.c jeg skal kopiere og lime vår mal. 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 dette programmet hva vi ønsker å gjøre er å ta tak i alder 285 00:13:39,378 --> 00:13:45,160 av tre studenter i kurset. 286 00:13:45,160 --> 00:13:49,240 Så vi vet int age-- og nå kommer jeg til å si 0. 287 00:13:49,240 --> 00:13:53,140 Så vil du kanskje si alder1, men til formål vil vi se veldig kort tid, 288 00:13:53,140 --> 00:13:57,187 Jeg vil si int age0 lik GetInt. 289 00:13:57,187 --> 00:13:59,270 Så det samme kallet til GetInt at vi har brukt jeg 290 00:13:59,270 --> 00:14:01,561 ikke tilfeldigvis være å spørre sa: "gi meg den alderen." 291 00:14:01,561 --> 00:14:03,120 Men bare ber om det. 292 00:14:03,120 --> 00:14:06,510 >> Og alder1 tilsvarer GetInt. 293 00:14:06,510 --> 00:14:09,600 Og int age2 tilsvarer GetInt. 294 00:14:09,600 --> 00:14:14,070 Så, igjen, tre studenter, men Til syvende og variable indekser 295 00:14:14,070 --> 00:14:16,890 er age0 gjennom age2. 296 00:14:16,890 --> 00:14:17,550 OK. 297 00:14:17,550 --> 00:14:23,960 Så dette programmet vil gjøre hva vi vil med age0, alder1, og age2, 298 00:14:23,960 --> 00:14:27,670 men dette programmet slutt fungerer for tre studenter. 299 00:14:27,670 --> 00:14:28,380 >> OK. 300 00:14:28,380 --> 00:14:32,110 Så nå hva om jeg vil ha fire studenter? 301 00:14:32,110 --> 00:14:36,000 Vel, jeg er nødt til å gå tilbake inn koden min, endre kommentaren, 302 00:14:36,000 --> 00:14:39,840 og nå har vi en int age3 lik GetInt. 303 00:14:39,840 --> 00:14:40,610 OK. 304 00:14:40,610 --> 00:14:43,660 Så som ser problemet her? 305 00:14:43,660 --> 00:14:47,310 Hva er problemet med denne typen oppsett? 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 oppretter en variabel for hver elev. 310 00:14:56,360 --> 00:15:00,140 Nå som fungerer, men til slutt hva om jeg nå 311 00:15:00,140 --> 00:15:06,500 si: "Jeg ønsker å ta tak i en alder av åtte studenter eller 16 elever 312 00:15:06,500 --> 00:15:11,340 eller de imidlertid mange studenter av de hundrevis av studenter i CS50 313 00:15:11,340 --> 00:15:16,750 eller tusenvis av studenter på campus eller de milliarder av mennesker i verden? 314 00:15:16,750 --> 00:15:19,130 Så til slutt dette ikke er bærekraftig. 315 00:15:19,130 --> 00:15:21,990 Hver gang du ser deg selv kopierer og lime inn kode som dette, 316 00:15:21,990 --> 00:15:25,050 bør du generelt føler at det er en bedre måte. 317 00:15:25,050 --> 00:15:31,290 >> Så det er her vi introdusere en rekke erklæring. 318 00:15:31,290 --> 00:15:34,564 Så når du deklarerer en array, dette er hva den generelle formatet 319 00:15:34,564 --> 00:15:35,480 kommer til å se ut. 320 00:15:35,480 --> 00:15:36,664 Vi kommer til å si hvilken type. 321 00:15:36,664 --> 00:15:38,830 og så skal vi gi navnet på den oppstillingen, 322 00:15:38,830 --> 00:15:41,150 akkurat som vi definerer enhver variabel. 323 00:15:41,150 --> 00:15:43,980 Og så til slutt vi bruker Denne braketten notasjonen igjen 324 00:15:43,980 --> 00:15:47,480 men i en annen sammenheng fra hvordan vi bruker den tidligere. 325 00:15:47,480 --> 00:15:51,860 >> Så her ser det ut som en normal variable erklæring om at vi har sett. 326 00:15:51,860 --> 00:15:54,890 Så vi har sett int x semikolon før. 327 00:15:54,890 --> 00:16:00,020 Vel nå vi kan se noe som int x brak 5. 328 00:16:00,020 --> 00:16:04,020 Og sette denne ideen inn i GetInt program som vi have-- 329 00:16:04,020 --> 00:16:08,850 slik at vi kan implementere dette på samme måte. 330 00:16:08,850 --> 00:16:13,630 >> La oss si at i CS vi pleier å bruke n som antallet noe. 331 00:16:13,630 --> 00:16:16,150 Så her vi kommer til å lagre fire studenter. 332 00:16:16,150 --> 00:16:25,960 Og nå kan vi si int alder braketten N- ikke helt får det yet-- 333 00:16:25,960 --> 00:16:32,210 å erklære en rekke av fire studenter. 334 00:16:32,210 --> 00:16:38,050 Så hvordan dette vil se ut i minne vil være lik denne. 335 00:16:38,050 --> 00:16:39,570 Klare dette. 336 00:16:39,570 --> 00:16:46,606 Og vi kommer til å ha et sted i memory-- vil jeg sette dette opp der. 337 00:16:46,606 --> 00:16:52,690 338 00:16:52,690 --> 00:16:53,808 >> Slik at et eller annet sted i minnet. 339 00:16:53,808 --> 00:16:58,760 340 00:16:58,760 --> 00:16:59,727 En to tre fire. 341 00:16:59,727 --> 00:17:03,383 342 00:17:03,383 --> 00:17:09,849 Vi har fire heltall på rad for denne matrisen av fire heltall. 343 00:17:09,849 --> 00:17:13,820 Så, for tiden, hva er størrelsen av en av disse boksene? 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 er fire bytes. 347 00:17:18,390 --> 00:17:19,690 Det er 32 biter. 348 00:17:19,690 --> 00:17:22,310 Så nå er dette annerledes fra tabellen at vi 349 00:17:22,310 --> 00:17:24,020 så tidligere, rekken av tegn. 350 00:17:24,020 --> 00:17:28,540 I en streng hver boks var bare én byte, fordi et tegn er bare en byte. 351 00:17:28,540 --> 00:17:32,170 Men med en rekke tall, hver boksen må være fire byte i orden 352 00:17:32,170 --> 00:17:34,060 å passe en hel heltall. 353 00:17:34,060 --> 00:17:37,197 Så dette er hva en rekke fire ints ville se ut. 354 00:17:37,197 --> 00:17:40,510 355 00:17:40,510 --> 00:17:43,870 >> Og deretter tilbake til koden. 356 00:17:43,870 --> 00:17:47,460 Nå ønsker vi å faktisk butikken heltall i den oppstillingen. 357 00:17:47,460 --> 00:17:53,470 Så nå er dette en veldig, veldig, veldig felles mønster som vil på et tidspunkt 358 00:17:53,470 --> 00:17:54,680 bli muskel minne. 359 00:17:54,680 --> 00:17:56,710 Så int i lik 0. 360 00:17:56,710 --> 00:17:57,940 jeg mindre enn n. 361 00:17:57,940 --> 00:18:01,850 jeg pluss pluss. 362 00:18:01,850 --> 00:18:05,790 Aldersgruppen jeg er lik GetInt. 363 00:18:05,790 --> 00:18:15,100 >> Så dette for loop, dette formatet, Du bør få veldig vant til. 364 00:18:15,100 --> 00:18:20,010 Så dette er generelt hvordan vi vil iterere over nesten alle array. 365 00:18:20,010 --> 00:18:23,690 Legg merke til nå denne typen forklarer hvorfor fra begynnelsen 366 00:18:23,690 --> 00:18:29,870 vi har ikke for løkker går for int i er lik 1, i mindre enn eller lik 10. 367 00:18:29,870 --> 00:18:34,200 Årsaken er at fra null gjør dette arbeidet godt med arrays. 368 00:18:34,200 --> 00:18:36,270 Så arrays er null indeksert. 369 00:18:36,270 --> 00:18:40,360 Hvis denne matrisen er av lengde 4, indeksene er 0 til 3. 370 00:18:40,360 --> 00:18:42,880 >> Så gjennom den første gjentakelse av dette for loop 371 00:18:42,880 --> 00:18:49,930 vi kommer til å være å sette alders brakett 0 lik en oppfordring til GetInt. 372 00:18:49,930 --> 00:18:52,440 Så uansett hva jeg skjedd å gå inn på tastaturet. 373 00:18:52,440 --> 00:18:56,970 I den andre pass, er vi innstilling alder1 lik GetInt. 374 00:18:56,970 --> 00:18:58,230 Tredje pass, age2. 375 00:18:58,230 --> 00:18:59,880 Endelige pass age3. 376 00:18:59,880 --> 00:19:05,750 Så hvis i det første gjennomløp av sløyfen Jeg går inn i nummer 4 på tastaturet, 377 00:19:05,750 --> 00:19:07,740 så får vi sette inn en 4 her. 378 00:19:07,740 --> 00:19:11,470 Hvis på den andre passet jeg skriver 50, vil vi sette en 50 her. 379 00:19:11,470 --> 00:19:15,180 På det tredje passet jeg kanskje skriv negative en negativ en, 380 00:19:15,180 --> 00:19:21,810 og så til slutt går jeg inn 0-- og Nå må du huske at dette var indeksen tre. 381 00:19:21,810 --> 00:19:25,350 >> Etter at vi sløyfe tilbake, er jeg kommer til å økes til fire. 382 00:19:25,350 --> 00:19:27,770 i er ikke lenger mindre enn n, som er fire. 383 00:19:27,770 --> 00:19:29,840 Og vi bryte ut av loopen. 384 00:19:29,840 --> 00:19:32,578 Så hva ville være galt med dette? 385 00:19:32,578 --> 00:19:38,140 386 00:19:38,140 --> 00:19:38,729 [Uhørbart]? 387 00:19:38,729 --> 00:19:39,604 PUBLIKUM: [uhørbart] 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 Slik at matrisen bare har fire steder, som betyr så indekser 0 til 3. 391 00:19:51,550 --> 00:19:55,630 Så hvis dette var tilfelle, ville jeg ta verdien 4 på enkelte punkt. 392 00:19:55,630 --> 00:20:00,910 aldersgruppe 4 skal sette uansett hva som skjer til å være over her 393 00:20:00,910 --> 00:20:02,920 til hva jeg har å si, skriv 6. 394 00:20:02,920 --> 00:20:05,010 Det vil være å sette dette til seks. 395 00:20:05,010 --> 00:20:06,560 >> Men vi vet ikke hva som er over her. 396 00:20:06,560 --> 00:20:08,836 Dette er ikke minnet at vi hadde tilgang til. 397 00:20:08,836 --> 00:20:10,710 Så hvis du husker fra forrige forelesning, 398 00:20:10,710 --> 00:20:14,350 han skrive ut verdier av Zamyla og på et tidspunkt han traff denne segmenter 399 00:20:14,350 --> 00:20:17,990 utsette. Så vil du sannsynligvis bli seende mange segmentering feil som du 400 00:20:17,990 --> 00:20:20,530 gjennomføre noen av de oppgavesett. 401 00:20:20,530 --> 00:20:24,950 Men dette er en av de måtene som du kan støte på en segmentering 402 00:20:24,950 --> 00:20:28,540 utsette, når du begynner å få tilgang minne på måter som du ikke bør være. 403 00:20:28,540 --> 00:20:34,117 Slik at vi ikke har tilgang til denne plasseringen, og dette er en feil. 404 00:20:34,117 --> 00:20:37,760 405 00:20:37,760 --> 00:20:40,190 >> Så dette er bedre. 406 00:20:40,190 --> 00:20:45,820 Nå er det fortsatt en liten Problemet med denne koden. 407 00:20:45,820 --> 00:20:50,720 Og det er i utgangspunktet at vi er fortsatt fast på fire studenter. 408 00:20:50,720 --> 00:20:52,940 Nå hvis jeg ønsker å bruke åtte studenter, OK. 409 00:20:52,940 --> 00:20:54,350 Det er ikke så stor en avtale. 410 00:20:54,350 --> 00:20:58,120 Jeg kan gå inn, endre kommentere og endre n. 411 00:20:58,120 --> 00:20:59,760 Nå vil dette fungere med åtte studenter. 412 00:20:59,760 --> 00:21:02,190 Hvis jeg kompilere dette og kjøre dette, vil det vise me-- 413 00:21:02,190 --> 00:21:07,870 det vil be om heltall for åtte studenter og det vil bare fungere. 414 00:21:07,870 --> 00:21:11,850 Men det er mindre enn ideell til å trenge å rekompilere programmet hver eneste gang 415 00:21:11,850 --> 00:21:15,960 Jeg ønsker å endre antall studenter at jeg ønsker å gå inn i evigheter for. 416 00:21:15,960 --> 00:21:22,990 >> Så den endelige forbedring på dette, så vi får se her-- vi er 417 00:21:22,990 --> 00:21:26,177 kommer til å be om antall personer. 418 00:21:26,177 --> 00:21:28,010 Her har vi en rekke av folk i rommene 419 00:21:28,010 --> 00:21:29,880 eller eventuelle aldre mennesker i rommet. 420 00:21:29,880 --> 00:21:33,300 Men vi kommer til å be om antall av mennesker i rommet fra brukeren. 421 00:21:33,300 --> 00:21:36,171 Så dette er nøyaktig samme do-while løkke som vi har sett før. 422 00:21:36,171 --> 00:21:37,920 Det er nøyaktig samme gjør-mens loop som du 423 00:21:37,920 --> 00:21:40,050 kan implementere på problemet sett. 424 00:21:40,050 --> 00:21:43,102 Så så lenge de er går inn i en n mindre enn 1, 425 00:21:43,102 --> 00:21:45,310 så det er nødt til å være på Minst én person i rommet. 426 00:21:45,310 --> 00:21:47,407 Så lenge de er går inn i en n mindre enn 1, 427 00:21:47,407 --> 00:21:48,990 så vi kommer til å fortsette å spørre igjen. 428 00:21:48,990 --> 00:21:50,906 Oppgi antall av mennesker i rommet. 429 00:21:50,906 --> 00:21:53,550 Nå, når vi har nummeret mennesker i rommet-- 430 00:21:53,550 --> 00:21:58,020 så jeg kan gå inn på at det er 200 personer i dette rommet. 431 00:21:58,020 --> 00:22:05,480 Deretter ned her vi kommer til å komme og erklære en rekke størrelse 200. 432 00:22:05,480 --> 00:22:10,220 Vi erklærer array som er stor nok til å romme 200 aldre. 433 00:22:10,220 --> 00:22:15,370 Kommer ned, er det for loop at du vil få veldig vant til. 434 00:22:15,370 --> 00:22:19,490 Så gjentar over denne tabellen, tildele til hvert sted 435 00:22:19,490 --> 00:22:23,020 ved at matrisen er et heltall, og så til slutt her er vi 436 00:22:23,020 --> 00:22:28,340 bare å få et eksempel på itera over det array, for ikke å tilordne verdier, 437 00:22:28,340 --> 00:22:30,150 men for å få tilgang verdier. 438 00:22:30,150 --> 00:22:33,810 >> Så over her ser vi at vi sier, et år fra nå, 439 00:22:33,810 --> 00:22:40,470 person% jeg vil være% i år, der den første% i er i pluss 1. 440 00:22:40,470 --> 00:22:43,010 Så jeg er denne indeksen variabel. 441 00:22:43,010 --> 00:22:49,420 Og den andre% i kommer til å være den verdi som er lagret i alderen matrisen pluss en. 442 00:22:49,420 --> 00:22:54,217 Så dette pluss en er bare fordi vi er saying-- dette pluss en, aldre jeg pluss 1. 443 00:22:54,217 --> 00:22:57,050 Dette pluss en er bare fordi vi er sier, et år fra nå personen 444 00:22:57,050 --> 00:22:58,280 vil være denne gamle. 445 00:22:58,280 --> 00:23:01,080 >> Så hvorfor er dette jeg pluss en? 446 00:23:01,080 --> 00:23:04,064 Derfor har vi et pluss 1 er det? 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å husk arrays er null indeksert. 451 00:23:10,510 --> 00:23:14,840 Så hvis vi skal skrive ut dette for noen å bare lese utgang, 452 00:23:14,840 --> 00:23:19,380 da trolig de ønsker å se noe som person en, person nummer én, 453 00:23:19,380 --> 00:23:21,160 vil være 20 år gammel. 454 00:23:21,160 --> 00:23:23,570 Person nummer to vil være 15 år gammel. 455 00:23:23,570 --> 00:23:27,420 De vil heller ikke se person tallet null er 15 år gammel. 456 00:23:27,420 --> 00:23:36,460 >> Så sammenstille dette, og bare se hva det ser like-- Lag litt plass. 457 00:23:36,460 --> 00:23:43,560 Gjør aldre kompilerer. 458 00:23:43,560 --> 00:23:45,080 Kjører aldre. 459 00:23:45,080 --> 00:23:46,580 Vi ser antall personer i rommet. 460 00:23:46,580 --> 00:23:48,850 Så jeg vil si det er tre personer i rommet. 461 00:23:48,850 --> 00:23:54,000 Age of person nummer én, la oss si 15, 20, 25. 462 00:23:54,000 --> 00:23:59,680 Og nå skal jeg si et år fra Nå vil de være 16, 21, 26. 463 00:23:59,680 --> 00:24:02,900 La oss se at dette fungerer med en n som ikke er lik tre. 464 00:24:02,900 --> 00:24:07,940 Så hvis jeg sier antall mennesker er 5, en, to, tre, to, en, et år fra nå 465 00:24:07,940 --> 00:24:11,170 de vil være to, tre, fire, tre, to år gammel. 466 00:24:11,170 --> 00:24:16,500 Så jeg kunne like lett ha n være 10.000. 467 00:24:16,500 --> 00:24:21,270 Nå vil jeg bli sittende her for ganske en mens du taster inn aldre, men dette fungerer. 468 00:24:21,270 --> 00:24:26,000 >> Så nå i minnet et sted vi har en matrise av størrelse 10 000, 469 00:24:26,000 --> 00:24:28,830 så til slutt 40 000 bytes, fordi det finnes 470 00:24:28,830 --> 00:24:31,222 fire byte for hver av de hele tall. 471 00:24:31,222 --> 00:24:33,180 Så det er en rekke størrelse 10 000 der vi kan 472 00:24:33,180 --> 00:24:36,201 lagre alderen disse 10.000 mennesker. 473 00:24:36,201 --> 00:24:36,700 Greit. 474 00:24:36,700 --> 00:24:40,070 Spørsmål om noe av dette? 475 00:24:40,070 --> 00:24:41,892 Yeah. 476 00:24:41,892 --> 00:24:43,350 Hva hvis du ga et negativt tall? 477 00:24:43,350 --> 00:24:44,870 La oss se hva som skjer. 478 00:24:44,870 --> 00:24:49,320 Så i denne case-- nummer av mennesker i rommet, negativt. 479 00:24:49,320 --> 00:24:52,580 Det avviste det, fordi her oppe vi skje 480 00:24:52,580 --> 00:24:57,180 som skal håndtere det faktum at hvis n er mindre enn en vi kommer til å spørre igjen. 481 00:24:57,180 --> 00:25:01,780 Hvis du prøver å erklære en rekke negative størrelse, 482 00:25:01,780 --> 00:25:03,950 det vanligvis ikke fungerer. 483 00:25:03,950 --> 00:25:05,570 >> Så la oss prøve. 484 00:25:05,570 --> 00:25:08,000 La oss se bort uansett verdien de innspill for n 485 00:25:08,000 --> 00:25:10,571 og bare si int aldre negativ en. 486 00:25:10,571 --> 00:25:12,410 La oss se om det enda kompilerer. 487 00:25:12,410 --> 00:25:14,100 Jeg er ikke sikker. 488 00:25:14,100 --> 00:25:14,920 Nei. 489 00:25:14,920 --> 00:25:18,280 Så aldre er erklært som en matrise med en negativ størrelse. 490 00:25:18,280 --> 00:25:22,540 Så upfront den gjenkjenner en matrise kan ikke være av negativ størrelse og avviser det. 491 00:25:22,540 --> 00:25:26,840 Nå, hvis vi ikke håndterer dette do-while-loop riktig, 492 00:25:26,840 --> 00:25:28,810 hvis vi ikke sjekker hvis n er mindre enn 1-- 493 00:25:28,810 --> 00:25:32,690 la oss si at vi bare ikke har dette i det hele tatt 494 00:25:32,690 --> 00:25:35,940 og i stedet vi bare ta et heltall. 495 00:25:35,940 --> 00:25:40,710 Uansett hva som heltall er, vi erklærer en matrise av denne størrelsen. 496 00:25:40,710 --> 00:25:44,250 >> Så kompilatoren kan ikke muligens klage nå. 497 00:25:44,250 --> 00:25:48,780 Hvis jeg kompilere dette-- så det kan ikke klage, 498 00:25:48,780 --> 00:25:51,480 fordi det kan ikke vite at jeg er kommer til å legge inn et negativt tall, 499 00:25:51,480 --> 00:25:52,550 som kan være ugyldig. 500 00:25:52,550 --> 00:25:54,633 For alle vet det, jeg kan angi et positivt tall, 501 00:25:54,633 --> 00:25:56,000 som er helt gyldig. 502 00:25:56,000 --> 00:26:01,090 Så jeg kan tenke meg hvis jeg skriver negative 1 mennesker i rommet, segmentering feil. 503 00:26:01,090 --> 00:26:06,040 >> Så ok. 504 00:26:06,040 --> 00:26:13,160 Så la oss legge denne tilbake bare holde det hva det opprinnelig var. 505 00:26:13,160 --> 00:26:15,640 Så gjør aldre. 506 00:26:15,640 --> 00:26:18,120 Nå hvis jeg ønsker å prøve en negative age-- så la oss 507 00:26:18,120 --> 00:26:19,710 sier det er fem personer i rommet. 508 00:26:19,710 --> 00:26:23,180 Age of person nummer én er negativ 4, person tre- 509 00:26:23,180 --> 00:26:26,500 er null, personen three-- OK. 510 00:26:26,500 --> 00:26:29,850 Så her, et år fra nå, person nummer en vil være negativ 3 år gammel. 511 00:26:29,850 --> 00:26:32,830 Så sannsynligvis ikke fornuftig. 512 00:26:32,830 --> 00:26:37,220 Men det er bare fordi jakt på koden alt vi gjør 513 00:26:37,220 --> 00:26:40,260 ber GetInt. 514 00:26:40,260 --> 00:26:44,110 >> Nå, hvis vi hadde hatt GetPositiveInt funksjon 515 00:26:44,110 --> 00:26:49,690 eller vi hadde bare rett og slett gjort dette liksom samme stund loop der nede, 516 00:26:49,690 --> 00:26:52,340 da dette ville fungere helt greit. 517 00:26:52,340 --> 00:26:54,200 Men i dette spesielle tilfellet, vi bare ikke 518 00:26:54,200 --> 00:26:57,772 tilfeldigvis håndtere negative verdier. 519 00:26:57,772 --> 00:26:59,147 Andre spørsmål om arrays? 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 nå sett arrays. 523 00:27:09,380 --> 00:27:12,500 Og vi kommer til å trenge å bruke dette for kommandolinjeargumenter. 524 00:27:12,500 --> 00:27:14,680 Så i oppgavesettet two-- Jeg vet at mange av dere 525 00:27:14,680 --> 00:27:18,040 kan fortsatt være i arbeid på problemet sett en, men problemet satt to er kommer opp. 526 00:27:18,040 --> 00:27:22,260 I oppgavesettet to, kommer du til å må håndtere strenger, tabeller, 527 00:27:22,260 --> 00:27:23,950 og kommandolinjeargumenter. 528 00:27:23,950 --> 00:27:26,270 >> Så hva er kommandolinjeargumenter? 529 00:27:26,270 --> 00:27:29,570 Nå kan du se her nede en liten teaser for nøyaktig hva som er 530 00:27:29,570 --> 00:27:30,950 kommer til å skje. 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å først la oss prøve å tolke hva som prøver å si. 534 00:27:38,130 --> 00:27:40,800 Nå, OK. 535 00:27:40,800 --> 00:27:44,637 >> Så på kommandolinjen bør du være å venne seg til noen av disse kommandoene 536 00:27:44,637 --> 00:27:48,580 nå, og du har sikkert kjørt cd i terminalen før. 537 00:27:48,580 --> 00:27:52,100 Så hvis vi sier cd pset1, du vet at det burde 538 00:27:52,100 --> 00:27:55,050 være endring i den pset1 katalogen. 539 00:27:55,050 --> 00:27:59,120 >> Nå merker at du har aldri skrevet et program som dette før. 540 00:27:59,120 --> 00:28:03,120 Hvert program som du har skrevet, du ville kjøre, sier dot slash Mario, 541 00:28:03,120 --> 00:28:06,779 dot slash grådig, og da er det kan be deg om innspill. 542 00:28:06,779 --> 00:28:08,570 Nå, det er ikke det change directory gjør. 543 00:28:08,570 --> 00:28:12,770 Når du kjører cd, betyr det ikke så si, hvilken katalog du ønsker å cd inn? 544 00:28:12,770 --> 00:28:17,200 I stedet, du bare si, cd pset1, og det bare går inn i pset1 katalogen. 545 00:28:17,200 --> 00:28:20,430 >> Så på samme måte har vi andre eksempler. 546 00:28:20,430 --> 00:28:21,540 gjøre hei. 547 00:28:21,540 --> 00:28:25,760 Når du kjører gjør, betyr det ikke så si, hvilket program ønsker du å gjøre? 548 00:28:25,760 --> 00:28:29,620 Du bare si, på kommandolinje gjøre hei. 549 00:28:29,620 --> 00:28:31,060 >> Move er et annet eksempel. 550 00:28:31,060 --> 00:28:34,840 Denne ene vi skal flytte mario.c sende opp en katalog. 551 00:28:34,840 --> 00:28:38,060 Så nå vet vi med dette eksemplet vi virkelig passerer to argumenter. 552 00:28:38,060 --> 00:28:42,090 Det er mario.c som første argument, og dot dot er det andre argumentet. 553 00:28:42,090 --> 00:28:46,140 Og så når du kjører gjør, du se at veldig lang kommando line-- 554 00:28:46,140 --> 00:28:50,580 som virkelig lang kommando trykt på kommandolinjen. 555 00:28:50,580 --> 00:28:53,590 Så det lenge command-- dette er bare en kort del av den, 556 00:28:53,590 --> 00:28:56,090 men nå har vi tre kommandolinjeargumenter. 557 00:28:56,090 --> 00:28:59,750 Dot dash null, hei, og hello.c. 558 00:28:59,750 --> 00:29:03,497 >> Så disse er kommandolinje argumenter, argumenter 559 00:29:03,497 --> 00:29:05,580 at du passerer på kommandolinjen slik at det 560 00:29:05,580 --> 00:29:08,680 trenger ikke å bli spurt når du kjører programmet. 561 00:29:08,680 --> 00:29:13,090 Det ville være frustrerende hvis når du kjørte clang det sagt, "OK, 562 00:29:13,090 --> 00:29:15,630 som program-- som filen du kompilere? 563 00:29:15,630 --> 00:29:17,010 Hello.c. 564 00:29:17,010 --> 00:29:19,440 Hva flagg ville du liker å gå inn? dash o. 565 00:29:19,440 --> 00:29:21,190 Hva vil du ha filen til å bli kalt? 566 00:29:21,190 --> 00:29:21,690 Hallo. 567 00:29:21,690 --> 00:29:25,290 Nei, du bare kjøre klang dash o hallo hello.c. 568 00:29:25,290 --> 00:29:28,820 >> Så ser tilbake på dette. 569 00:29:28,820 --> 00:29:32,920 Nå argc-- argc er argumentet teller. 570 00:29:32,920 --> 00:29:36,620 Det er antall kommandolinje argumenter angitt på kommandolinjen. 571 00:29:36,620 --> 00:29:39,720 Vel, argv-- teknisk v står for vektor, 572 00:29:39,720 --> 00:29:41,460 som i utgangspunktet betyr array. 573 00:29:41,460 --> 00:29:42,680 Men du kan ignorere det. 574 00:29:42,680 --> 00:29:47,540 Argv-- vi har streng argv, så streng argv parentes. 575 00:29:47,540 --> 00:29:50,150 Så dette er en annen form for brak du ikke har sett før. 576 00:29:50,150 --> 00:29:52,300 Så vi har sett braketten notasjon når vi har sagt, 577 00:29:52,300 --> 00:29:53,970 lignende, string s tilsvarer Zamyla. 578 00:29:53,970 --> 00:29:56,910 s brakett 0 aksesserer karakter Z. 579 00:29:56,910 --> 00:30:00,720 >> Vi har også sett parentes når vi sa int aldre brakett 5. 580 00:30:00,720 --> 00:30:03,160 Det erklærte en rekke størrelse 5. 581 00:30:03,160 --> 00:30:06,280 Så her er en versjon av parentes vi ikke har sett før. 582 00:30:06,280 --> 00:30:09,630 Så denne typen streng argv som ville være helt fortrolig 583 00:30:09,630 --> 00:30:12,050 at det ville bare være en streng. 584 00:30:12,050 --> 00:30:14,520 Nå parentes angir at dette er en matrise. 585 00:30:14,520 --> 00:30:19,920 Så streng argv brak hjelp at argv er en rekke strenger. 586 00:30:19,920 --> 00:30:22,540 Nå teknisk en streng er en rekke tegn. 587 00:30:22,540 --> 00:30:26,400 Så dette er nå en matrise av en rekke tegn. 588 00:30:26,400 --> 00:30:31,490 Men det er mye lettere å tenke på dette som bare en rekke strenger. 589 00:30:31,490 --> 00:30:34,900 >> Så hvorfor kan parentes være tom? 590 00:30:34,900 --> 00:30:38,170 Liker, hvorfor kan ikke vi si, brakett 5, brakett 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 ikke hvor mange innganger der kommer til å være. 596 00:30:46,396 --> 00:30:53,560 Så hvis vi ser på klang eksempel vi sier clang dash o hallo hello.c. 597 00:30:53,560 --> 00:30:56,710 I dette spesielle tilfellet er det skje å være tre kommandolinjeargumenter. 598 00:30:56,710 --> 00:31:00,522 Og så brackets-- vi får se i en andre ville det ikke være tre. 599 00:31:00,522 --> 00:31:01,730 Det teknisk ville være fire. 600 00:31:01,730 --> 00:31:04,030 Men brakettene, ville vi si, det er tre. 601 00:31:04,030 --> 00:31:08,220 Men nå hvis vi så på farten mario.c dot dot, brakettene 602 00:31:08,220 --> 00:31:09,760 vi ønsker å sette to i dem. 603 00:31:09,760 --> 00:31:12,884 >> Og det er mange av kommandoene som har et variabelt antall kommandolinje 604 00:31:12,884 --> 00:31:13,620 argumenter. 605 00:31:13,620 --> 00:31:17,430 Hva denne versjonen av brakett notasjon indikerer 606 00:31:17,430 --> 00:31:20,820 er at argv er en rekke strenger. 607 00:31:20,820 --> 00:31:24,360 Men vi vet ikke hvor mange strenger er i denne matrisen. 608 00:31:24,360 --> 00:31:27,090 Og hvordan vet vi hvordan mange strenger er i rekken? 609 00:31:27,090 --> 00:31:28,870 Det er hele poenget argc. 610 00:31:28,870 --> 00:31:32,300 argc forteller oss hvor lenge argv er. 611 00:31:32,300 --> 00:31:36,500 >> Så det siste for å holde i tankene er at, teknisk, 612 00:31:36,500 --> 00:31:40,820 kommandoen selv teller som ett av kommandolinjeargumenter. 613 00:31:40,820 --> 00:31:45,330 Så cd pset1, er det to kommandolinjeargumenter. 614 00:31:45,330 --> 00:31:50,260 Programmet i seg selv, cd, og deretter selve argumentet del av det, pset1. 615 00:31:50,260 --> 00:31:54,490 Alle programmer som du har skrevet så langt har hatt et kommandolinje argument-- dot 616 00:31:54,490 --> 00:31:55,320 slash Mario. 617 00:31:55,320 --> 00:31:57,350 Det er den eneste kommandolinje argument. 618 00:31:57,350 --> 00:32:00,900 >> Så nå ser på klang dash o hallo hello.c. 619 00:32:00,900 --> 00:32:01,905 Så hva er 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 er 4. 623 00:32:08,140 --> 00:32:12,140 Klang, så argv braketten 0 er klang. 624 00:32:12,140 --> 00:32:15,630 argv braketten en er dash 0. 625 00:32:15,630 --> 00:32:21,870 argv brakett 2 er hei, og argv brakett 3 er hello.c. 626 00:32:21,870 --> 00:32:26,813 Ok, så spørsmål om dette, og så får vi se på noen programmatiske eksempler. 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å dette bør være kjent fra en av de første c eksemplene 631 00:32:41,890 --> 00:32:45,800 vi hadde der vi ville bare si hei verden, men nå er dette mer generelt. 632 00:32:45,800 --> 00:32:52,300 Så her er vi si hei % s backslash n argv braketten en. 633 00:32:52,300 --> 00:32:57,440 Notice-- så opp til dette punktet, er dette hva min malfil har sett ut. 634 00:32:57,440 --> 00:33:01,800 Jeg hadde int main (void), og så ville jeg gjøre noe i den viktigste funksjonen. 635 00:33:01,800 --> 00:33:05,100 Nå i stedet, når vi begynner å gjøre med kommandolinjeargumenter, 636 00:33:05,100 --> 00:33:07,890 vi trenger å oppgi en annen form for main. 637 00:33:07,890 --> 00:33:11,930 >> Så se på hello3 igjen, det viktigste som skjer 638 00:33:11,930 --> 00:33:15,990 å ta to argumenter now-- int argc, antall kommandolinjeargumenter, 639 00:33:15,990 --> 00:33:20,970 og streng argv parentes, selve strenger kom inn på kommandolinjen. 640 00:33:20,970 --> 00:33:26,560 Så jeg kommer til å endre det mal for å gjenspeile det faktum. 641 00:33:26,560 --> 00:33:29,060 Nå når du skriver et program, hvis du ikke gjør det 642 00:33:29,060 --> 00:33:33,720 trenger å ta noen kommandolinje argumenter, så bare bruker int main (void). 643 00:33:33,720 --> 00:33:37,070 Men nå når du skriver kommandolinje argument programmer, som 644 00:33:37,070 --> 00:33:40,350 du kommer til å gjøre for problem satt two-- så nå at du kjører 645 00:33:40,350 --> 00:33:42,630 programmer som må ta kommandolinjeargumenter, 646 00:33:42,630 --> 00:33:45,250 du må ha hoved av dette skjemaet. 647 00:33:45,250 --> 00:33:51,290 >> Så her-- dette er den store bruken av kommandolinje argument. 648 00:33:51,290 --> 00:33:54,100 Så skriver argv en. 649 00:33:54,100 --> 00:33:59,180 OK så la oss kompilere og kjøre dette programmet. 650 00:33:59,180 --> 00:34:02,440 Gjør hello3. 651 00:34:02,440 --> 00:34:03,570 Kompilerer. 652 00:34:03,570 --> 00:34:06,870 Dot slash hello3. 653 00:34:06,870 --> 00:34:08,920 Og la oss si, "Rob". 654 00:34:08,920 --> 00:34:10,760 Hei Rob. 655 00:34:10,760 --> 00:34:14,940 Hvis jeg sier, "Hei Maria," Hei Maria. 656 00:34:14,940 --> 00:34:15,719 Hei Maria. 657 00:34:15,719 --> 00:34:18,639 Hannah fortsatt sier "hei Maria, "fordi jeg ikke 658 00:34:18,639 --> 00:34:21,340 gjør noe med vår argv to. 659 00:34:21,340 --> 00:34:22,590 Argv to nå ville være "Hannah." 660 00:34:22,590 --> 00:34:25,030 Argc ville være tre. 661 00:34:25,030 --> 00:34:27,735 Hva om jeg gjorde dette? 662 00:34:27,735 --> 00:34:31,980 663 00:34:31,980 --> 00:34:34,679 Så hei null. 664 00:34:34,679 --> 00:34:38,760 >> Han såvidt det faktum at teknisk, GetString 665 00:34:38,760 --> 00:34:42,429 kan returnere null, men vi får en mye mer inn i hva null faktisk er. 666 00:34:42,429 --> 00:34:47,449 Men ta det som et spørsmål om faktum at ingen er generelt dårlig. 667 00:34:47,449 --> 00:34:50,179 Vi gjorde noe galt hvis det er å skrive "hallo null." 668 00:34:50,179 --> 00:34:52,179 Og grunnen til at vi gjorde noe galt er-- godt, 669 00:34:52,179 --> 00:34:56,179 når jeg kjørte dot slash hello3, argc var en. 670 00:34:56,179 --> 00:34:59,680 Så det betyr at lengden av argv var en. 671 00:34:59,680 --> 00:35:05,110 Hvis en matrise er av lengde 1, den eneste gyldige indeksen er lik null. 672 00:35:05,110 --> 00:35:08,550 Og så her argv en er utenfor omfanget av denne matrisen. 673 00:35:08,550 --> 00:35:13,410 Det var omtrent som før når jeg prøvde å lagre 6 utenfor enden av rekken. 674 00:35:13,410 --> 00:35:18,100 Så jeg prøver å få tilgang til noe utsiden av argv teller, 675 00:35:18,100 --> 00:35:21,340 og vi får null. 676 00:35:21,340 --> 00:35:24,360 >> Så en bedre versjon av dette er en forbedring, 677 00:35:24,360 --> 00:35:27,010 eksplisitt sjekker argc. 678 00:35:27,010 --> 00:35:33,580 Så hvis argc lik 2, betyr at vi kjørte noe som dot slash hello3 Rob. 679 00:35:33,580 --> 00:35:36,840 Og det vil skrive "hallo Rob." 680 00:35:36,840 --> 00:35:39,850 Hvis argc ikke lik 2, så er det bare å gå 681 00:35:39,850 --> 00:35:42,560 å ignorere hva du putter på kommandolinjeargument 682 00:35:42,560 --> 00:35:43,960 som kommandolinjeargumenter. 683 00:35:43,960 --> 00:35:47,168 Eller hvis du ikke har satt noen i det hele tatt, det er bare kommer til å ignorere det og bare si: 684 00:35:47,168 --> 00:35:47,960 "Hei du." 685 00:35:47,960 --> 00:35:51,490 >> Så kompilering dette. 686 00:35:51,490 --> 00:35:54,500 Gjør hello4. 687 00:35:54,500 --> 00:35:56,790 Og kjører hello4. 688 00:35:56,790 --> 00:36:00,010 Kjører det på denne måten, hva som skal skrives ut? 689 00:36:00,010 --> 00:36:01,330 "Hei du." 690 00:36:01,330 --> 00:36:02,810 Hei du. 691 00:36:02,810 --> 00:36:05,870 Hva om hello4 Rob? 692 00:36:05,870 --> 00:36:06,950 "Hello Rob." 693 00:36:06,950 --> 00:36:10,580 Og til slutt, hallo Rob Maria er bare "hei du" igjen, 694 00:36:10,580 --> 00:36:13,677 fordi du egentlig ikke inn noe som det forventes. 695 00:36:13,677 --> 00:36:15,510 Du kom inn flere navn enn det kunne håndtere, 696 00:36:15,510 --> 00:36:19,500 så det bare misligholdt til hallo du oppførsel. 697 00:36:19,500 --> 00:36:23,040 Så spørsmål om dette? 698 00:36:23,040 --> 00:36:26,290 Eller kommandolinjeargumenter? 699 00:36:26,290 --> 00:36:28,690 >> OK, så ta en titt på en par flere eksempler på bruk 700 00:36:28,690 --> 00:36:34,230 kommandolinje arguments-- først vi har argv dash en prikk c. 701 00:36:34,230 --> 00:36:38,510 Så kommentarene gi bort det dette programmet bør gjøre. 702 00:36:38,510 --> 00:36:42,460 Men legg merke til now-- dette for loop, Dette samsvarer nøyaktig mønster 703 00:36:42,460 --> 00:36:43,390 Jeg sa før. 704 00:36:43,390 --> 00:36:46,240 Vi bare måtte være hjelp argc stedet for n. 705 00:36:46,240 --> 00:36:48,880 Nå argc er virkelig n. 706 00:36:48,880 --> 00:36:51,260 Det er lengden av argv matrisen. 707 00:36:51,260 --> 00:36:59,600 Så er itera over argv matrise printf-ing hver argv verdi. 708 00:36:59,600 --> 00:37:04,730 >> Så hvis jeg gjør dette. 709 00:37:04,730 --> 00:37:08,232 Gjør argv en. 710 00:37:08,232 --> 00:37:09,940 Det kompilerer. 711 00:37:09,940 --> 00:37:11,620 Dot slash argv en. 712 00:37:11,620 --> 00:37:15,530 Bare å kjøre dette, det utskrifter dot slash argv 1 713 00:37:15,530 --> 00:37:18,500 siden det var den eneste kommandolinje argument-- programnavnet. 714 00:37:18,500 --> 00:37:22,080 Det vil alltid være på least-- argc kan ikke være mindre enn én, 715 00:37:22,080 --> 00:37:25,910 Siden det alltid vil minst være programnavnet for å kjøre. 716 00:37:25,910 --> 00:37:32,040 Så argv en Rob vil skrive argv 1 og deretter på den nye linjen "Rob". 717 00:37:32,040 --> 00:37:36,350 >> Så i første iterasjon av denne sløyfen, jeg er 0. 718 00:37:36,350 --> 00:37:39,090 Argv 0 er programnavnet. 719 00:37:39,090 --> 00:37:40,010 Dot slash argv en. 720 00:37:40,010 --> 00:37:43,770 Og så argv en er min første kommandolinje argument, som er Rob. 721 00:37:43,770 --> 00:37:45,920 På dette punktet, er vi lik argc. 722 00:37:45,920 --> 00:37:48,210 Vi bryte ut av loopen og vi er ferdige. 723 00:37:48,210 --> 00:37:53,940 Så dette vil fungere for en vilkårlig antall kommandolinjeargumenter. 724 00:37:53,940 --> 00:37:58,550 Legg merke til det skrives argv 0, argv 1, argv 2, argv 3, argv 4. 725 00:37:58,550 --> 00:38:00,150 Og det er ingen argv 5. 726 00:38:00,150 --> 00:38:01,460 argc er lik fem. 727 00:38:01,460 --> 00:38:06,960 Så på argc-- på jeg er lik 5, vi bryter ut av loopen. 728 00:38:06,960 --> 00:38:07,950 OK. 729 00:38:07,950 --> 00:38:11,315 Så spørsmål om det før vi se på et mer komplekst eksempel? 730 00:38:11,315 --> 00:38:14,190 731 00:38:14,190 --> 00:38:16,860 >> Så argv to. 732 00:38:16,860 --> 00:38:17,830 Greit. 733 00:38:17,830 --> 00:38:20,610 Så vi er fortsatt utskrift kommandolinjeargumenter. 734 00:38:20,610 --> 00:38:23,170 Men nå merker vi har en nestet for loop. 735 00:38:23,170 --> 00:38:24,670 Så hva er dette å gjøre? 736 00:38:24,670 --> 00:38:28,430 Så den første sløyfen gjør nøyaktig hva det gjorde før. 737 00:38:28,430 --> 00:38:30,950 Vi er fortsatt looping løpet hver kommandolinje argument, 738 00:38:30,950 --> 00:38:34,260 men nå er dette andre loop-- vi har også sett noe som dette før. 739 00:38:34,260 --> 00:38:38,600 Da han ble gjentar løpet Zamyla utskrift av Z-A-M-Y-L-A. 740 00:38:38,600 --> 00:38:44,816 Så denne andre sløyfen for int j lik 0, n er lik strlen av argv brakett i. 741 00:38:44,816 --> 00:38:49,170 >> Så la oss først tenke for the-- la oss gå gjennom. 742 00:38:49,170 --> 00:38:53,560 La oss tenke hva maskinen ville hvis jeg kjørte dette programmet som bare prikken 743 00:38:53,560 --> 00:38:56,030 slash argv dash 2. 744 00:38:56,030 --> 00:39:03,590 Så hvis jeg kjørte denne koden, og deretter argc kommer til å være lik 1. 745 00:39:03,590 --> 00:39:07,050 Og streng argv-- det er bare kommer til å være ett indeksen i argv, 746 00:39:07,050 --> 00:39:12,370 og som kommer til å være lik dot slash argv 2-- programnavnet. 747 00:39:12,370 --> 00:39:19,170 >> OK, så nå jeg er lik 0, i mindre enn 1, jeg pluss pluss for int j lik 0, 748 00:39:19,170 --> 00:39:23,880 n er lik strlen av argv braketten 0, så i den første iterasjon av denne sløyfen. argv 749 00:39:23,880 --> 00:39:27,250 braketten 0 er dot slash argv to. 750 00:39:27,250 --> 00:39:29,320 Så hva er lengden på denne strengen? 751 00:39:29,320 --> 00:39:32,480 Vel, dot slash A-R-G-V dash 2. 752 00:39:32,480 --> 00:39:35,020 Så strlen som vil være åtte. 753 00:39:35,020 --> 00:39:37,500 Så j lik 0, n er lik 8. 754 00:39:37,500 --> 00:39:39,530 Så lenge j er mindre enn 8, j ++. 755 00:39:39,530 --> 00:39:44,080 Og med det kommer vi til å være utskrift av en enkelt karakter, som 756 00:39:44,080 --> 00:39:47,350 er argv brakett i braketten j. 757 00:39:47,350 --> 00:39:49,826 >> Derfor er den eneste i er null. 758 00:39:49,826 --> 00:39:51,700 Vi har fortsatt bare har én kommandolinje argument. 759 00:39:51,700 --> 00:39:53,890 I den første iterasjon av for loop, vi er 760 00:39:53,890 --> 00:39:56,950 kommer til å være utskrift argv brakett 0 braketten 0. 761 00:39:56,950 --> 00:39:58,325 Og så j kommer til å øke. 762 00:39:58,325 --> 00:40:01,650 Og vi kommer til å skrive ut argv brakett 0 braketten en. 763 00:40:01,650 --> 00:40:04,150 Og så argv brakett 0 brakett 2. 764 00:40:04,150 --> 00:40:09,030 >> Så dette er vårt første møte av flerdimensjonale matriser. 765 00:40:09,030 --> 00:40:12,770 Husk tidligere at jeg sa at argv er teknisk 766 00:40:12,770 --> 00:40:15,950 en rekke matriser av tegn. 767 00:40:15,950 --> 00:40:24,360 Så her hvis jeg sa noe sånt string s tilsvarer argv brakett i, 768 00:40:24,360 --> 00:40:29,590 og så sa jeg, s braketten j, dette ville være å oppnå det samme. 769 00:40:29,590 --> 00:40:31,960 Nå har du før sett s braketten j. 770 00:40:31,960 --> 00:40:36,680 Det er bare å få tilgang til j-th karakteren av denne strengen. 771 00:40:36,680 --> 00:40:48,010 Så med dette, vi får det j-th karakter av i-te argv. 772 00:40:48,010 --> 00:40:51,450 >> Så hva bør dette til slutt utgang? 773 00:40:51,450 --> 00:40:53,210 Gjør argv to. 774 00:40:53,210 --> 00:40:54,730 Det kompilerer. 775 00:40:54,730 --> 00:40:56,340 Dot slash argv to. 776 00:40:56,340 --> 00:41:03,790 "Rob Maria Hannah," og gi oss noen rom. 777 00:41:03,790 --> 00:41:07,050 Så vi ser at dette er å gi ut prikk på en egen linje og slash 778 00:41:07,050 --> 00:41:08,920 på en egen linje og en på sin egen linje. 779 00:41:08,920 --> 00:41:11,260 Det å skrive ut hver individuell karakter 780 00:41:11,260 --> 00:41:12,950 av hver kommandolinje argument. 781 00:41:12,950 --> 00:41:15,960 Og deretter i mellom dem, på grunn av denne nye linje 782 00:41:15,960 --> 00:41:19,380 vi skal skrive ned her, i mellom dem vil det skrive ut en ny linje. 783 00:41:19,380 --> 00:41:24,540 >> Så dette er lik den tidligere argv dash 1, 784 00:41:24,540 --> 00:41:26,459 som skrives hver kommandolinje argument, 785 00:41:26,459 --> 00:41:28,500 men nå er vi skriver kommandolinjeargumenter 786 00:41:28,500 --> 00:41:31,950 og deretter gjentar gjennom hver karakter av hver kommandolinjeargument 787 00:41:31,950 --> 00:41:35,400 å få denne produksjonen. 788 00:41:35,400 --> 00:41:36,870 OK? 789 00:41:36,870 --> 00:41:40,570 Så spørsmål om dette? 790 00:41:40,570 --> 00:41:45,130 >> En ting å merke seg er at kommandolinje arguments-- 791 00:41:45,130 --> 00:41:49,990 slik at de er atskilt med mellomrom som du ville naturligvis forventer at de skal være. 792 00:41:49,990 --> 00:41:53,050 Så en streng kan ha mellomrom i den. 793 00:41:53,050 --> 00:41:57,380 Det er ikke super viktig, men hvis jeg ønsket tredje kommandolinjeargument 794 00:41:57,380 --> 00:42:01,226 å ha en plass i den, så jeg kunne si noe sånt som dette. 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å dette nå fortsatt bare har tre- kommandolinje arguments-- vel fire. 798 00:42:12,190 --> 00:42:17,620 Dot slash argv dash 2, Rob, Maria og Hannah Bloomberg. 799 00:42:17,620 --> 00:42:18,320 OK. 800 00:42:18,320 --> 00:42:19,310 Spørsmål om dette? 801 00:42:19,310 --> 00:42:22,700 802 00:42:22,700 --> 00:42:24,894 >> Det er ikke noe spesielt om plass karakter. 803 00:42:24,894 --> 00:42:27,810 Det bare skjer for å være at kommandolinje behandler mellomromstegnet 804 00:42:27,810 --> 00:42:29,226 som hvordan du skille hver argument. 805 00:42:29,226 --> 00:42:32,048 806 00:42:32,048 --> 00:42:33,000 Greit. 807 00:42:33,000 --> 00:42:39,950 Så da Problem sett two-- du kommer til å være 808 00:42:39,950 --> 00:42:43,240 ser på hemmelig nøkkel kryptografi. 809 00:42:43,240 --> 00:42:47,700 Så, i likhet med det eksempelet vi så fra A Christmas Story, 810 00:42:47,700 --> 00:42:52,840 du kommer til å bli å implementere noen algoritmer som, gitt en melding, 811 00:42:52,840 --> 00:42:55,560 du kommer til å være i stand å kryptere meldingen 812 00:42:55,560 --> 00:42:58,730 at bare noen med at hemmelig nøkkel, med det dekoder ring, 813 00:42:58,730 --> 00:43:01,090 skal være i stand til å dekryptere. 814 00:43:01,090 --> 00:43:04,839 >> Så det er standardutgaven. 815 00:43:04,839 --> 00:43:07,130 Du kommer til å implementere to forskjellige versjoner. 816 00:43:07,130 --> 00:43:09,620 Hvis du tilfeldigvis ta en titt på hacker utgave nå, 817 00:43:09,620 --> 00:43:12,600 vi kommer til å gi du en streng som dette, 818 00:43:12,600 --> 00:43:15,240 som representerer et kryptert passord. 819 00:43:15,240 --> 00:43:19,990 Så målet er å finne ut hva dekryptert passordet er. 820 00:43:19,990 --> 00:43:26,950 Nå er dette faktisk hvordan passord er lagret i en rekke datamaskiner, 821 00:43:26,950 --> 00:43:31,290 og det bare lagrer dette tilfeldig streng med tegn. 822 00:43:31,290 --> 00:43:34,440 Du må finne ut hvordan du får fra dette tilfeldig rekke med tegn 823 00:43:34,440 --> 00:43:36,140 til hva det opprinnelige passordet var. 824 00:43:36,140 --> 00:43:39,060 825 00:43:39,060 --> 00:43:43,290 >> Og til slutt, etter dette Problemet sett, bør du 826 00:43:43,290 --> 00:43:46,100 kunne forstå hva dette betyr. 827 00:43:46,100 --> 00:43:51,650 Så du vil lære å dekryptere denne typen tilfeldig streng. 828 00:43:51,650 --> 00:43:56,390 Tilsvarende, hvis du husker fra uke 0, har du kanskje sett denne nettadressen. 829 00:43:56,390 --> 00:44:00,210 Og du bør være i stand til å dekryptere dette til slutt. 830 00:44:00,210 --> 00:44:04,810 Du kan ikke være fornøyd når du dekryptere den, og klikk på linken. 831 00:44:04,810 --> 00:44:05,700 Greit. 832 00:44:05,700 --> 00:44:06,591 Det var det for i dag. 833 00:44:06,591 --> 00:44:12,095 Så se deg neste uke! 834 00:44:12,095 --> 00:44:18,315 >> [Elektronisk musikk SPILLE] 835 00:44:18,315 --> 00:47:15,619