1 00:00:00,000 --> 00:00:03,944 >> [RIPRODUZIONE DI BRANI MUSICALI] 2 00:00:03,944 --> 00:00:10,732 3 00:00:10,732 --> 00:00:11,690 DAVID MALAN: Va bene. 4 00:00:11,690 --> 00:00:14,674 Questo è CS50, e questo è la fine della settimana 2. 5 00:00:14,674 --> 00:00:16,840 Mi dispiace, non ho potuto essere lì con voi oggi, 6 00:00:16,840 --> 00:00:18,300 ma siete in buone mani. 7 00:00:18,300 --> 00:00:21,710 Permettetemi di presentarvi Di CS50 proprio Rob Bowden. 8 00:00:21,710 --> 00:00:29,106 9 00:00:29,106 --> 00:00:31,730 ROB BOWDEN: E, naturalmente, poi dobbiamo prendere in giro il fatto 10 00:00:31,730 --> 00:00:36,820 che ci ha inviato una verticale video e mostrare questo. 11 00:00:36,820 --> 00:00:38,320 >> [RIPRODUZIONE VIDEO] 12 00:00:38,320 --> 00:00:39,820 >> [RIPRODUZIONE DI BRANI MUSICALI] 13 00:00:39,820 --> 00:00:42,350 >> [PASSI] 14 00:00:42,350 --> 00:00:44,730 >> -Questo Video non ha fatto deve guardare in questo modo. 15 00:00:44,730 --> 00:00:46,570 E avrebbe potuto essere evitata. 16 00:00:46,570 --> 00:00:49,070 Dire di no a video verticali. 17 00:00:49,070 --> 00:00:53,310 >> Video -Verticale accadere quando si tenere la fotocamera nel modo sbagliato. 18 00:00:53,310 --> 00:00:55,880 Il tuo video finirà per assomigliare merda. 19 00:00:55,880 --> 00:00:57,650 >> - [GRUNT] 20 00:00:57,650 --> 00:01:02,240 >> -Ci Sono sempre più persone dipendenti per la realizzazione di video verticali ogni giorno. 21 00:01:02,240 --> 00:01:06,240 Non è crepa o niente, ma è ancora davvero male. 22 00:01:06,240 --> 00:01:10,410 Ci sono due diversi tipi di persone che sono affette da VVS. 23 00:01:10,410 --> 00:01:14,160 Il primo gruppo tratta la video sparano come immagini. 24 00:01:14,160 --> 00:01:15,850 Non significano alcun danno. 25 00:01:15,850 --> 00:01:19,180 Semplicemente non capiscono che mentre è possibile trasformare una foto, 26 00:01:19,180 --> 00:01:20,880 non si può trasformare in realtà un video. 27 00:01:20,880 --> 00:01:21,880 >> [CRASH] 28 00:01:21,880 --> 00:01:23,460 >> - [MONKEY SUONI] 29 00:01:23,460 --> 00:01:27,540 >> -Il Altro gruppo è la gente che non danno un [BLEEP]. 30 00:01:27,540 --> 00:01:31,090 >> Sindrome di video -Verticale è pericoloso. 31 00:01:31,090 --> 00:01:34,120 Le immagini in movimento hanno sempre orizzontale. 32 00:01:34,120 --> 00:01:35,990 I televisori sono orizzontali. 33 00:01:35,990 --> 00:01:38,380 Gli schermi di computer sono orizzontali. 34 00:01:38,380 --> 00:01:41,580 Gli occhi della gente sono orizzontali. 35 00:01:41,580 --> 00:01:45,170 Noi non siamo costruiti per guardare i video verticali. 36 00:01:45,170 --> 00:01:47,600 >> -Amo Video verticali. 37 00:01:47,600 --> 00:01:50,410 >> -Nessuno Prende cura di te. 38 00:01:50,410 --> 00:01:53,340 >> -Se Di questo problema lasciato incontrollato, anche tu 39 00:01:53,340 --> 00:01:57,650 inizierà mostrando quattro video in una volta solo per risparmiare larghezza di banda. 40 00:01:57,650 --> 00:02:02,400 >> Video verticali -Letterboxed sarebbe la dimensione di un francobollo. 41 00:02:02,400 --> 00:02:04,920 >> -E Si diffonderà in tutto il mondo. 42 00:02:04,920 --> 00:02:07,670 Schermi cinematografici hanno sempre orizzontale. 43 00:02:07,670 --> 00:02:11,200 Se i video verticali diventano , cinema accettate 44 00:02:11,200 --> 00:02:13,930 dovrà essere alto e magro. 45 00:02:13,930 --> 00:02:17,710 >> -E Tutti i cinema sarebbero devono ottenere demolita e ricostruita. 46 00:02:17,710 --> 00:02:22,090 E nel momento in cui sono stati ricostruiti, Mila Kunis sarebbe vecchia e brutta. 47 00:02:22,090 --> 00:02:24,342 >> -Birds Si crash in loro e morire. 48 00:02:24,342 --> 00:02:26,530 >> Ll del `tutto get rigido colli da guardare. 49 00:02:26,530 --> 00:02:29,800 >> -E Nessuno sedere prima fila mai più. 50 00:02:29,800 --> 00:02:37,170 >> -George Lucas riedizione stella Guerre again-- l'edizione magro. 51 00:02:37,170 --> 00:02:41,860 >> -Io Non è mai stato veramente in grado di dire la storia che volevo raccontare. 52 00:02:41,860 --> 00:02:46,030 Questa è stata una grande occasione per me di sperimentare una nuova tecnologia. 53 00:02:46,030 --> 00:02:48,150 >> -Sei un idiota. 54 00:02:48,150 --> 00:02:54,430 >> -Ogni Volta che un dispositivo mobile è utilizzato per registrare video, la tentazione è lì. 55 00:02:54,430 --> 00:02:56,370 Dì semplicemente di no. 56 00:02:56,370 --> 00:03:00,116 Dire di no a George Lucas. 57 00:03:00,116 --> 00:03:04,062 Dire di no a vecchio Mila Kunis. 58 00:03:04,062 --> 00:03:06,600 Dire di no a video verticali. 59 00:03:06,600 --> 00:03:12,511 >> -E Se vedete qualcuno farlo, dire, "tu non stai girando tale diritto manichino!" 60 00:03:12,511 --> 00:03:15,433 >> [RIPRODUZIONE DI BRANI MUSICALI] 61 00:03:15,433 --> 00:03:18,842 62 00:03:18,842 --> 00:03:19,830 >> [FINE RIPRODUZIONE] 63 00:03:19,830 --> 00:03:23,702 >> [Applausi] 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 forma di crittografia, 67 00:03:45,790 --> 00:03:49,500 che è fondamentalmente la crittografia e la decrittografia dei messaggi segreti. 68 00:03:49,500 --> 00:03:52,590 Quindi qui abbiamo una molto semplice giocattolo. 69 00:03:52,590 --> 00:03:56,900 E l'idea è l'anello esterno ruota intorno all'anello interno. 70 00:03:56,900 --> 00:04:01,610 E si può vedere, forse se lo zoom in, che-- è difficile da vedere. 71 00:04:01,610 --> 00:04:05,090 Ma, come, il numero di 1-- bene, che si muoveva. 72 00:04:05,090 --> 00:04:09,120 >> Il numero 1 associa alla lettera X, il numero 2 mappe alla lettera 73 00:04:09,120 --> 00:04:11,630 J. Incredibilmente difficile non saltare in avanti. 74 00:04:11,630 --> 00:04:16,100 Lettera 2 mappe da J. Numero 3 mappe del D. So 75 00:04:16,100 --> 00:04:20,140 con questo anello si può dare qualcuno un messaggio 1, 2, 3. 76 00:04:20,140 --> 00:04:22,624 Per qualche ragione voglio dire loro XJD. 77 00:04:22,624 --> 00:04:24,540 Ma si può dare loro qualche messaggio di numeri, 78 00:04:24,540 --> 00:04:28,460 e fintanto che hanno questo anello, essi può decifrare quello che stai cercando di dire. 79 00:04:28,460 --> 00:04:32,510 >> Così si può avere visto questo particolare esempio della crittografia 80 00:04:32,510 --> 00:04:36,640 prima se tutto il periodo natalizio hai guardato Una storia di Natale. 81 00:04:36,640 --> 00:04:38,520 Se non avete mai visto prima, poi basta 82 00:04:38,520 --> 00:04:41,060 accendere TBS a letteralmente in qualsiasi momento alla vigilia di Natale, 83 00:04:41,060 --> 00:04:44,510 perché hanno appena mostrano back to back to back to back to back l'intera giornata. 84 00:04:44,510 --> 00:04:46,744 E il video rilevante è questo. 85 00:04:46,744 --> 00:04:47,410 [RIPRODUZIONE VIDEO] 86 00:04:47,410 --> 00:04:50,020 -Essere Noto a tutti quanti che Ralph Parker è presente 87 00:04:50,020 --> 00:04:52,850 nominato membro del Piccolo Orphan Annie Secret Circle 88 00:04:52,850 --> 00:04:56,490 e ha diritto a tutti gli onori e benefici che si verificano ad essa. 89 00:04:56,490 --> 00:04:59,010 Firmato Little Orphan Annie. 90 00:04:59,010 --> 00:05:03,120 Controfirmato Pierre Andre in inchiostro! 91 00:05:03,120 --> 00:05:07,460 Onori e benefici già all'età di nove anni! 92 00:05:07,460 --> 00:05:12,530 >> [URLA DA RADIO] 93 00:05:12,530 --> 00:05:13,030 -Avanti. 94 00:05:13,030 --> 00:05:14,000 Andiamo avanti con lui. 95 00:05:14,000 --> 00:05:18,274 Non ho bisogno di tutto ciò che il jazz su contrabbandieri e pirati. 96 00:05:18,274 --> 00:05:20,440 Ascoltami domani sera con l'avventura conclusiva 97 00:05:20,440 --> 00:05:22,540 della nave pirata nero. 98 00:05:22,540 --> 00:05:25,460 Ora, è il momento per Messaggio segreto di Annie 99 00:05:25,460 --> 00:05:28,620 per voi i membri del Secret Circle. 100 00:05:28,620 --> 00:05:32,370 Ricordate figli, solo i membri di di Annie Secret Circle 101 00:05:32,370 --> 00:05:34,880 in grado di decodificare il messaggio segreto di Annie. 102 00:05:34,880 --> 00:05:39,100 Ricordate, Annie dipende da te. 103 00:05:39,100 --> 00:05:41,660 Impostare i perni per B2. 104 00:05:41,660 --> 00:05:43,960 Ecco il messaggio. 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 -Io Sono nel mio primo incontro segreto. 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, Pierre è in grande stasera voce. 115 00:05:54,570 --> 00:05:57,490 Potrei dire che stasera messaggio è stato davvero importante. 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 Questo è un messaggio da Annie se stessa. 119 00:06:01,580 --> 00:06:02,880 Ricordate, non dirlo a nessuno. 120 00:06:02,880 --> 00:06:07,840 121 00:06:07,840 --> 00:06:11,130 >> Secondi -Cinque più tardi, io sono l'unico a stanza della casa dove un ragazzo di nove anni 122 00:06:11,130 --> 00:06:15,830 potrebbe sedersi nel rispetto della privacy e decodifica. 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 Sono andato al prossimo. 126 00:06:20,210 --> 00:06:23,300 E. La prima parola è "essere". 127 00:06:23,300 --> 00:06:25,880 S. Veniva più facile ora. 128 00:06:25,880 --> 00:06:28,400 U. 25. 129 00:06:28,400 --> 00:06:30,528 Ecco R. 130 00:06:30,528 --> 00:06:31,278 -Dai, Ralphie! 131 00:06:31,278 --> 00:06:31,861 Devo andare! 132 00:06:31,861 --> 00:06:33,182 -Ti Essere proprio giù, Ma! 133 00:06:33,182 --> 00:06:36,038 Caspita. 134 00:06:36,038 --> 00:06:42,840 T. O. "Assicurarsi di" - essere sicuri di che cosa? 135 00:06:42,840 --> 00:06:44,770 Qual è stato Little Orphan Annie cercando di dire? 136 00:06:44,770 --> 00:06:46,381 Assicurati di che cosa? 137 00:06:46,381 --> 00:06:47,825 >> -Randy Ha avuto modo di andare! 138 00:06:47,825 --> 00:06:48,866 Vi prego di venire fuori? 139 00:06:48,866 --> 00:06:49,783 >> -Tutti Destra, mamma! 140 00:06:49,783 --> 00:06:51,786 Torno fuori! 141 00:06:51,786 --> 00:06:53,606 Mi è stato sempre più vicino ora. 142 00:06:53,606 --> 00:06:55,550 La tensione era terribile. 143 00:06:55,550 --> 00:06:57,050 Cos'era? 144 00:06:57,050 --> 00:06:59,905 Il destino del pianeta può in bilico! 145 00:06:59,905 --> 00:07:01,736 >> -Ralphie, Randy deve andare! 146 00:07:01,736 --> 00:07:05,680 >> -Ti Essere giusto fuori, per gridare forte! 147 00:07:05,680 --> 00:07:07,170 Quasi lì! 148 00:07:07,170 --> 00:07:08,150 Le mie dita volavano. 149 00:07:08,150 --> 00:07:09,980 La mia mente era una trappola d'acciaio. 150 00:07:09,980 --> 00:07:11,496 Ogni poro vibrava. 151 00:07:11,496 --> 00:07:13,268 Era quasi chiaro! 152 00:07:13,268 --> 00:07:13,767 Sì. 153 00:07:13,767 --> 00:07:14,609 Sì. 154 00:07:14,609 --> 00:07:15,108 Sì. 155 00:07:15,108 --> 00:07:16,449 Sì. 156 00:07:16,449 --> 00:07:20,240 Assicuratevi di bere il vostro 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 Uno spot scadente? 160 00:07:27,520 --> 00:07:32,040 161 00:07:32,040 --> 00:07:34,920 Figlio di puttana. 162 00:07:34,920 --> 00:07:35,890 >> [FINE RIPRODUZIONE] 163 00:07:35,890 --> 00:07:39,650 >> ROB BOWDEN: Allora è così che Ovaltine riferisce alla crittografia. 164 00:07:39,650 --> 00:07:42,290 Fondamentalmente CS50 appena pubblicizzato Ovaltine, così abbiamo potuto 165 00:07:42,290 --> 00:07:44,400 una commerciale scadente per Ovaltine. 166 00:07:44,400 --> 00:07:44,900 Tutto ok. 167 00:07:44,900 --> 00:07:47,120 Così ora attuale informatica. 168 00:07:47,120 --> 00:07:50,670 Ricordate il Lunedi abbiamo lasciato immersione profonda in stringhe. 169 00:07:50,670 --> 00:07:52,820 Così avevamo a che fare con la stringa "Zamyla." 170 00:07:52,820 --> 00:07:55,130 E siamo stati riconoscendo il fatto che siamo in grado di trattare 171 00:07:55,130 --> 00:07:57,510 "Zamyla" come una sequenza di caratteri. 172 00:07:57,510 --> 00:07:59,740 E ricordate che abbiamo imparato la notazione staffa. 173 00:07:59,740 --> 00:08:01,995 Quindi, se questo fosse conservato in una stringa "s", quindi 174 00:08:01,995 --> 00:08:05,860 se abbiamo detto s staffa 0, che sarebbe indicare la Z maiuscola lettera 175 00:08:05,860 --> 00:08:09,790 E se dicessimo staffa s 1, che indicherebbe il primo a minuscola, 176 00:08:09,790 --> 00:08:14,220 e così via fino a staffa s 5, che indicherebbe l'ultimo a. 177 00:08:14,220 --> 00:08:17,090 >> Ora ricordare che la la lunghezza di questa stringa è di 6, 178 00:08:17,090 --> 00:08:23,220 ma gli indici nella stringa sono Da 0 a 5, Z attraverso che durano una. 179 00:08:23,220 --> 00:08:28,650 Così questo ora si inserisce in un quadro più ampio della memoria del computer, la RAM. 180 00:08:28,650 --> 00:08:32,020 Così qualche programma che si sta eseguendo il computer 181 00:08:32,020 --> 00:08:34,780 ha bisogno di ricordare Zamyla trattenuti nella memoria. 182 00:08:34,780 --> 00:08:36,029 Così posso avere un volontario? 183 00:08:36,029 --> 00:08:38,840 184 00:08:38,840 --> 00:08:40,181 Si per favore. 185 00:08:40,181 --> 00:08:50,120 186 00:08:50,120 --> 00:08:51,500 E come ti chiami? 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 Piacere di conoscerti, Dean. 190 00:08:54,910 --> 00:08:58,240 Allora vieni qui, e stiamo andando ad avere di disegnare 191 00:08:58,240 --> 00:09:00,740 sulla nostra bella disposizione elegante di memoria. 192 00:09:00,740 --> 00:09:05,950 Ora mi piace pensare di memoria come una lunga striscia di byte, 193 00:09:05,950 --> 00:09:11,090 ma solo per scopi di visualizzazione faremo solo che da sinistra a destra, dall'alto verso il basso. 194 00:09:11,090 --> 00:09:11,590 ok? 195 00:09:11,590 --> 00:09:22,030 >> Quindi ho intenzione di mostrare una program-- Getstrings.c. 196 00:09:22,030 --> 00:09:25,760 E così tutto questo programma è facendo sta chiedendo quattro corde 197 00:09:25,760 --> 00:09:28,830 dall'utente con GetString e poi la stampa 198 00:09:28,830 --> 00:09:30,950 qualunque cosa che prima stringa inserita è stato. 199 00:09:30,950 --> 00:09:32,840 Stiamo ignorando due a quattro. 200 00:09:32,840 --> 00:09:33,610 OK. 201 00:09:33,610 --> 00:09:38,210 Così qui now-- quando Ho s1 richiesta. 202 00:09:38,210 --> 00:09:39,740 Dunque tu sei il computer. 203 00:09:39,740 --> 00:09:41,680 E si implementa GetString. 204 00:09:41,680 --> 00:09:46,710 Quindi si richiede una stringa da me, e dico, ok, Dean. 205 00:09:46,710 --> 00:09:47,900 Dare la stringa "Dean". 206 00:09:47,900 --> 00:09:50,300 >> Quindi, da qualche parte nella memoria bisogno di ricordare "Dean". 207 00:09:50,300 --> 00:09:52,160 Quindi scrivere in memoria da qualche parte. 208 00:09:52,160 --> 00:09:58,270 209 00:09:58,270 --> 00:09:59,210 Perfetto. 210 00:09:59,210 --> 00:09:59,880 OK. 211 00:09:59,880 --> 00:10:01,740 Così ora abbiamo s2. 212 00:10:01,740 --> 00:10:03,869 E S2 sarà una richiesta di GetString. 213 00:10:03,869 --> 00:10:05,160 Quindi ho intenzione di inserire una stringa. 214 00:10:05,160 --> 00:10:08,720 Ho intenzione di inserire "Hannah". 215 00:10:08,720 --> 00:10:10,586 Quindi immettere "Hannah" da qualche parte nella memoria. 216 00:10:10,586 --> 00:10:18,860 217 00:10:18,860 --> 00:10:19,360 Già. 218 00:10:19,360 --> 00:10:23,000 A-H. 219 00:10:23,000 --> 00:10:25,550 >> OK, ora s3. 220 00:10:25,550 --> 00:10:28,380 E sarà un altro chiedere di GetString. 221 00:10:28,380 --> 00:10:37,020 E così ora inserire "Maria". 222 00:10:37,020 --> 00:10:37,520 Tutto ok. 223 00:10:37,520 --> 00:10:40,980 E poi c'è un ultimo richiesta di GetString, s4. 224 00:10:40,980 --> 00:10:42,580 Quindi, io non lo so. 225 00:10:42,580 --> 00:10:45,640 Come su andiamo con antidisestablishmentarianism. 226 00:10:45,640 --> 00:10:49,460 Quindi immetterlo in memoria. 227 00:10:49,460 --> 00:10:50,400 Già. 228 00:10:50,400 --> 00:10:53,970 Quindi basta fare "Rob". 229 00:10:53,970 --> 00:10:54,560 >> OK. 230 00:10:54,560 --> 00:10:58,410 Così ora explain-- perché ha fatto si lascia questi spazi? 231 00:10:58,410 --> 00:11:01,340 Perché hai questo vuoto spazio qui, qui, e qui? 232 00:11:01,340 --> 00:11:05,170 233 00:11:05,170 --> 00:11:05,670 Sì. 234 00:11:05,670 --> 00:11:09,450 Così notare quando vado stampare s1-- quindi se 235 00:11:09,450 --> 00:11:11,890 che mentre sta funzionando "Hannah" proprio accanto a "Dean," 236 00:11:11,890 --> 00:11:14,360 come facciamo a sapere quando la stringa "Dean" chiude? 237 00:11:14,360 --> 00:11:19,470 Così la stampa del s1 stringa può avere appena stampato "DeanHannahMariaRob" 238 00:11:19,470 --> 00:11:22,720 se non ha alcun indizio di quando "Dean" si conclude effettivamente. 239 00:11:22,720 --> 00:11:23,240 >> Tutto ok. 240 00:11:23,240 --> 00:11:27,650 Così nella memoria del nostro modo di realtà rappresentare questo fine di una stringa 241 00:11:27,650 --> 00:11:29,940 è con backslash zero. 242 00:11:29,940 --> 00:11:32,620 Quindi questo spazio è esattamente quello che volevamo. 243 00:11:32,620 --> 00:11:34,040 Dovrebbe essere una barra rovesciata zero. 244 00:11:34,040 --> 00:11:37,690 Questo sarà un backslash pari a zero, e questo sarà un backslash pari a zero. 245 00:11:37,690 --> 00:11:41,585 E si può avere un premio favoloso per essere un volontario perfetto. 246 00:11:41,585 --> 00:11:44,910 247 00:11:44,910 --> 00:11:45,860 Prendete una palla di stress! 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 Quindi questo carattere di backslash zero è come si indica la fine di una stringa. 251 00:11:54,420 --> 00:11:57,120 E 'come quando un determinato programma vuole stampare una stringa, 252 00:11:57,120 --> 00:11:59,760 è how-- ricordiamo che abbiamo imparato la funzione strlen la settimana scorsa? 253 00:11:59,760 --> 00:12:00,940 Lunghezza della stringa? 254 00:12:00,940 --> 00:12:03,770 E 'come lunghezza della stringa è in grado di determinare per quanto tempo una stringa è. 255 00:12:03,770 --> 00:12:05,810 Mantiene solo iterare sui caratteri 256 00:12:05,810 --> 00:12:08,217 fino a trovare la backslash carattere zero. 257 00:12:08,217 --> 00:12:11,050 Quindi la cosa importante da realizzare circa il carattere backslash di zero 258 00:12:11,050 --> 00:12:14,950 si è rappresentato da parte di tutti gli zeri nei bit. 259 00:12:14,950 --> 00:12:18,980 Quindi si noti che questo è diverso dal carattere zero. 260 00:12:18,980 --> 00:12:23,010 Così il carattere zero, se ti ricordi nell'esempio che ha dato alla fine 261 00:12:23,010 --> 00:12:27,360 di conferenza dove i personaggi mappa a-- come mappe capitale A a 65. 262 00:12:27,360 --> 00:12:29,130 Minuscola mappe per 97. 263 00:12:29,130 --> 00:12:30,890 Minuscole b sarebbe 98. 264 00:12:30,890 --> 00:12:35,220 Così il numero 0 mappe a-- non lo faccio conoscere la parte superiore della mia testa. 265 00:12:35,220 --> 00:12:36,400 44 o 45. 266 00:12:36,400 --> 00:12:37,890 Da qualche parte in quella regione. 267 00:12:37,890 --> 00:12:40,850 >> Così il personaggio 0 è un numero reale. 268 00:12:40,850 --> 00:12:44,350 Ma lo zero backslash mappe per tutti i bit a zero. 269 00:12:44,350 --> 00:12:46,380 Quindi c'è una differenza tra backslash lo zero, 270 00:12:46,380 --> 00:12:48,450 che chiameremo il terminatore null. 271 00:12:48,450 --> 00:12:53,210 C'è una distinzione tra backslash zero e il carattere zero. 272 00:12:53,210 --> 00:12:54,350 >> Tutto ok. 273 00:12:54,350 --> 00:12:57,520 Così parla un po 'di più sulle stringhe. 274 00:12:57,520 --> 00:13:01,470 Allora che vediamo qui è così sarebbe disposto in memoria. 275 00:13:01,470 --> 00:13:07,940 Quindi questa idea di stringhe come una sequenza di modo che il computer characters-- ufficiale 276 00:13:07,940 --> 00:13:10,750 termine sciency per la sequenza è un array. 277 00:13:10,750 --> 00:13:13,790 Quindi noi chiameremmo una stringa un array di caratteri. 278 00:13:13,790 --> 00:13:17,770 E ci sono in realtà altri dati tipi che possiamo fare gli array fuori. 279 00:13:17,770 --> 00:13:19,975 >> Quindi, per motivare questo, guardare un esempio. 280 00:13:19,975 --> 00:13:22,810 281 00:13:22,810 --> 00:13:29,812 Lo chiameremo ages0.c io sarò copia e incolla il nostro modello. 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 Quindi, in questo programma di quello che abbiamo voglio fare è prendere l'età 285 00:13:39,378 --> 00:13:45,160 di tre studenti del corso. 286 00:13:45,160 --> 00:13:49,240 Così sappiamo che la int age-- e ora ho intenzione di dire 0. 287 00:13:49,240 --> 00:13:53,140 Così si potrebbe desiderare di dire age1, ma per scopi vedremo molto presto, 288 00:13:53,140 --> 00:13:57,187 Dirò int age0 uguale GetInt. 289 00:13:57,187 --> 00:13:59,270 Così la stessa chiamata a GetInt che abbiamo usato io 290 00:13:59,270 --> 00:14:01,561 non capita di essere la richiesta dicendo: "dammi l'età." 291 00:14:01,561 --> 00:14:03,120 Ma appena lo richiede. 292 00:14:03,120 --> 00:14:06,510 >> E age1 uguale GetInt. 293 00:14:06,510 --> 00:14:09,600 E int Age2 uguale GetInt. 294 00:14:09,600 --> 00:14:14,070 Così, ancora una volta, tre studenti, ma in ultima analisi, gli indici variabili 295 00:14:14,070 --> 00:14:16,890 sono age0 attraverso Age2. 296 00:14:16,890 --> 00:14:17,550 OK. 297 00:14:17,550 --> 00:14:23,960 Quindi questo programma farà tutto ciò che vogliamo con age0, age1, e Age2, 298 00:14:23,960 --> 00:14:27,670 ma questo programma alla fine funziona per tre studenti. 299 00:14:27,670 --> 00:14:28,380 >> OK. 300 00:14:28,380 --> 00:14:32,110 Così ora che cosa se voglio quattro studenti? 301 00:14:32,110 --> 00:14:36,000 Beh, ho intenzione di tornare indietro nel mio codice, modificare il commento, 302 00:14:36,000 --> 00:14:39,840 e ora abbiamo un int Age3 uguale GetInt. 303 00:14:39,840 --> 00:14:40,610 OK. 304 00:14:40,610 --> 00:14:43,660 Allora, chi vede il problema qui? 305 00:14:43,660 --> 00:14:47,310 Qual è il problema con questo tipo di impostazione? 306 00:14:47,310 --> 00:14:47,810 Già. 307 00:14:47,810 --> 00:14:53,110 308 00:14:53,110 --> 00:14:53,610 Già. 309 00:14:53,610 --> 00:14:56,360 Così stiamo creando un variabile per ogni studente. 310 00:14:56,360 --> 00:15:00,140 Ora che funziona, ma in ultima analisi, quello che se io ora 311 00:15:00,140 --> 00:15:06,500 Dico, "Voglio prendere l'età di otto studenti o 16 studenti 312 00:15:06,500 --> 00:15:11,340 oi comunque molti studenti di le centinaia di studenti in CS50 313 00:15:11,340 --> 00:15:16,750 o le migliaia di studenti del campus o i miliardi di persone nel mondo? 314 00:15:16,750 --> 00:15:19,130 Quindi alla fine questo non è sostenibile. 315 00:15:19,130 --> 00:15:21,990 Ogni volta che vedi la copia e incollare il codice come questo, 316 00:15:21,990 --> 00:15:25,050 si dovrebbe sentire in generale che vi è un modo migliore. 317 00:15:25,050 --> 00:15:31,290 >> Quindi questo è dove introduciamo una dichiarazione di matrice. 318 00:15:31,290 --> 00:15:34,564 Così, quando si dichiara un array, questo è ciò che il formato generale 319 00:15:34,564 --> 00:15:35,480 è andare a guardare come. 320 00:15:35,480 --> 00:15:36,664 Stiamo andando a dire il tipo. 321 00:15:36,664 --> 00:15:38,830 e poi andremo a dare il nome di quella matrice, 322 00:15:38,830 --> 00:15:41,150 proprio come noi definiamo un dato variabile. 323 00:15:41,150 --> 00:15:43,980 E poi finalmente stiamo utilizzando di nuovo questa notazione staffa 324 00:15:43,980 --> 00:15:47,480 ma in un contesto diverso da come lo usavamo in precedenza. 325 00:15:47,480 --> 00:15:51,860 >> Ecco quindi questo sembra un normale dichiarazione di variabile che abbiamo visto. 326 00:15:51,860 --> 00:15:54,890 Così abbiamo visto int x virgola prima. 327 00:15:54,890 --> 00:16:00,020 Bene, ora potremmo vedere qualcosa come int x staffe 5. 328 00:16:00,020 --> 00:16:04,020 E questa idea di mettere in Programma GetInt che have-- 329 00:16:04,020 --> 00:16:08,850 in modo che possiamo implementare questo nello stesso modo. 330 00:16:08,850 --> 00:16:13,630 >> Diciamo che in CS tendiamo ad usare n come il numero di qualcosa. 331 00:16:13,630 --> 00:16:16,150 Quindi qui stiamo andando a memorizzare quattro studenti. 332 00:16:16,150 --> 00:16:25,960 Ed ora possiamo dire int età staffa non n-- abbastanza get it yet-- 333 00:16:25,960 --> 00:16:32,210 per dichiarare un array di quattro studenti. 334 00:16:32,210 --> 00:16:38,050 Così come questo apparirà in memoria sarà simile a questo. 335 00:16:38,050 --> 00:16:39,570 Eliminare questo. 336 00:16:39,570 --> 00:16:46,606 E stiamo andando ad avere da qualche parte in memory-- metterò questo lassù. 337 00:16:46,606 --> 00:16:52,690 338 00:16:52,690 --> 00:16:53,808 >> Così qualche parte in memoria. 339 00:16:53,808 --> 00:16:58,760 340 00:16:58,760 --> 00:16:59,727 Uno due tre quattro. 341 00:16:59,727 --> 00:17:03,383 342 00:17:03,383 --> 00:17:09,849 Abbiamo quattro interi di fila per questo array di quattro interi. 343 00:17:09,849 --> 00:17:13,820 Quindi, attualmente, qual è la dimensioni di una di queste caselle? 344 00:17:13,820 --> 00:17:17,190 345 00:17:17,190 --> 00:17:17,690 Già. 346 00:17:17,690 --> 00:17:18,390 E 'quattro byte. 347 00:17:18,390 --> 00:17:19,690 È 32 bit. 348 00:17:19,690 --> 00:17:22,310 Così ora questo è diverso dalla matrice che 349 00:17:22,310 --> 00:17:24,020 ha visto in precedenza, l'array di caratteri. 350 00:17:24,020 --> 00:17:28,540 In una stringa ogni scatola era un solo byte, perché un carattere è solo byte. 351 00:17:28,540 --> 00:17:32,170 Ma con una serie di numeri interi, ogni scatola deve essere di quattro byte in ordine 352 00:17:32,170 --> 00:17:34,060 per adattare un intero intero. 353 00:17:34,060 --> 00:17:37,197 Quindi questo è quello che una serie di quattro interi sarà simile. 354 00:17:37,197 --> 00:17:40,510 355 00:17:40,510 --> 00:17:43,870 >> E poi di nuovo codice. 356 00:17:43,870 --> 00:17:47,460 Ora vogliamo realmente negozio interi in tale matrice. 357 00:17:47,460 --> 00:17:53,470 Così ora questo è molto, molto, molto modello comune che ad un certo punto 358 00:17:53,470 --> 00:17:54,680 diventare memoria muscolare. 359 00:17:54,680 --> 00:17:56,710 Così int i è uguale a 0. 360 00:17:56,710 --> 00:17:57,940 i meno di n. 361 00:17:57,940 --> 00:18:01,850 i plus plus. 362 00:18:01,850 --> 00:18:05,790 Fascia di età i è uguale a GetInt. 363 00:18:05,790 --> 00:18:15,100 >> Quindi questo ciclo for, questo formato, si dovrebbe ottenere molto abituati. 364 00:18:15,100 --> 00:18:20,010 Quindi questo è il modo in cui sarà generalmente iterare su quasi qualsiasi array. 365 00:18:20,010 --> 00:18:23,690 Ora notare questo tipo di spiega perché dall'inizio 366 00:18:23,690 --> 00:18:29,870 non abbiamo avuto per i cicli di andare per int i è uguale a 1, i minore o uguale a 10. 367 00:18:29,870 --> 00:18:34,200 Il motivo è che a partire dal pari a zero rende questo lavoro bene con gli array. 368 00:18:34,200 --> 00:18:36,270 Così gli array indicizzati sono pari a zero. 369 00:18:36,270 --> 00:18:40,360 Se questa matrice è di lunghezza 4, gli indici vanno da 0 a 3. 370 00:18:40,360 --> 00:18:42,880 >> Così, attraverso la prima iterazione di questo ciclo for 371 00:18:42,880 --> 00:18:49,930 stiamo andando a essere la creazione età Staffa 0 pari ad una chiamata a GetInt. 372 00:18:49,930 --> 00:18:52,440 Quindi, qualsiasi Mi è capitato per inserire la tastiera. 373 00:18:52,440 --> 00:18:56,970 Nel secondo passaggio, siamo impostazione age1 pari a GetInt. 374 00:18:56,970 --> 00:18:58,230 Terzo passaggio, Age2. 375 00:18:58,230 --> 00:18:59,880 Ultimo passaggio Age3. 376 00:18:59,880 --> 00:19:05,750 Quindi, se nel primo passaggio del ciclo Entro il numero 4 sulla tastiera, 377 00:19:05,750 --> 00:19:07,740 poi ci inseriamo un 4 qui. 378 00:19:07,740 --> 00:19:11,470 Se al secondo passaggio inserisco 50, metteremo un 50 qui. 379 00:19:11,470 --> 00:19:15,180 Il terzo passo potrei inserire negativo 1, negativo 1, 380 00:19:15,180 --> 00:19:21,810 e poi finalmente se entro 0-- e ora ricordare che questo era indice di tre. 381 00:19:21,810 --> 00:19:25,350 >> Dopo che noi loop back, i è andare da incrementare a 4. 382 00:19:25,350 --> 00:19:27,770 Non ho più è minore di n, che è 4. 383 00:19:27,770 --> 00:19:29,840 E noi spezziamo fuori dal giro. 384 00:19:29,840 --> 00:19:32,578 Quindi, che cosa sarebbe di sbagliato in questo? 385 00:19:32,578 --> 00:19:38,140 386 00:19:38,140 --> 00:19:38,729 [Incomprensibile]? 387 00:19:38,729 --> 00:19:39,604 PUBBLICO: [incomprensibile] 388 00:19:39,604 --> 00:19:45,880 389 00:19:45,880 --> 00:19:46,400 >> Sì. 390 00:19:46,400 --> 00:19:51,550 Così l'array ha solo quattro posti, il che significa che gli indici da 0 a 3. 391 00:19:51,550 --> 00:19:55,630 Quindi, se questo fosse il caso, vorrei assumere il valore di 4 ad un certo punto. 392 00:19:55,630 --> 00:20:00,910 fascia di età 4 sarà la creazione qualunque cosa accada di essere qui 393 00:20:00,910 --> 00:20:02,920 per quello che ho da dire, digitare 6. 394 00:20:02,920 --> 00:20:05,010 Che sarà l'impostazione di questo a 6. 395 00:20:05,010 --> 00:20:06,560 >> Ma noi non sappiamo cosa sia finita qui. 396 00:20:06,560 --> 00:20:08,836 Questo non è memoria che abbiamo avuto accesso a. 397 00:20:08,836 --> 00:20:10,710 Quindi, se vi ricordate da la lezione precedente, 398 00:20:10,710 --> 00:20:14,350 stava stampando i valori di Zamyla e a un certo punto ha colpito questa segmentazione 399 00:20:14,350 --> 00:20:17,990 colpa. Quindi, si sarà probabilmente vedendo molti difetti di segmentazione, come si 400 00:20:17,990 --> 00:20:20,530 attuare alcuni dei set di problemi. 401 00:20:20,530 --> 00:20:24,950 Ma questo è uno dei modi in cui si può incontrare una segmentazione 402 00:20:24,950 --> 00:20:28,540 colpa, quando si avvia l'accesso memoria in modi che non si dovrebbe essere. 403 00:20:28,540 --> 00:20:34,117 Quindi non abbiamo avuto accesso a questa posizione e questo è un bug. 404 00:20:34,117 --> 00:20:37,760 405 00:20:37,760 --> 00:20:40,190 >> Quindi questo è meglio. 406 00:20:40,190 --> 00:20:45,820 Ora c'è ancora un piccolo problema con questo codice. 407 00:20:45,820 --> 00:20:50,720 E questo è in fondo che siamo ancora bloccato a quattro studenti. 408 00:20:50,720 --> 00:20:52,940 Ora, se voglio usare otto studenti, OK. 409 00:20:52,940 --> 00:20:54,350 Non è un grosso problema. 410 00:20:54,350 --> 00:20:58,120 Posso andare in, cambiare il commentare, e cambiare n. 411 00:20:58,120 --> 00:20:59,760 Ora, questo funzionerà con otto studenti. 412 00:20:59,760 --> 00:21:02,190 Se compilo questo ed eseguire questo, mostrerà me-- 413 00:21:02,190 --> 00:21:07,870 esso richiederà interi per otto studenti e sarà solo di lavoro. 414 00:21:07,870 --> 00:21:11,850 Ma è tutt'altro che ideale per necessità di ricompilare il programma ogni volta 415 00:21:11,850 --> 00:21:15,960 Voglio cambiare il numero di studenti che voglio entrare nei secoli per. 416 00:21:15,960 --> 00:21:22,990 >> Così il miglioramento finale sulla questo, come vedremo qui-- siamo 417 00:21:22,990 --> 00:21:26,177 andando a chiedere il numero di persone. 418 00:21:26,177 --> 00:21:28,010 Qui abbiamo un numero delle persone nelle camere 419 00:21:28,010 --> 00:21:29,880 o qualsiasi età delle persone nella stanza. 420 00:21:29,880 --> 00:21:33,300 Ma stiamo andando a chiedere il numero di di persone nella stanza da parte dell'utente. 421 00:21:33,300 --> 00:21:36,171 Quindi questa è la stessa esatta do-while ciclo che abbiamo visto prima. 422 00:21:36,171 --> 00:21:37,920 E 'la stessa identica do-while che si 423 00:21:37,920 --> 00:21:40,050 possono essere attuazione sul problema insieme. 424 00:21:40,050 --> 00:21:43,102 Quindi, fintanto che sono immissione di un n inferiore a 1, 425 00:21:43,102 --> 00:21:45,310 quindi ci deve essere a almeno una persona nella stanza. 426 00:21:45,310 --> 00:21:47,407 Finché sono immissione di un n inferiore a 1, 427 00:21:47,407 --> 00:21:48,990 allora stiamo andando a continuare a chiedere di nuovo. 428 00:21:48,990 --> 00:21:50,906 Si prega di inserire il numero di persone nella stanza. 429 00:21:50,906 --> 00:21:53,550 Ora, una volta che abbiamo il numero di persone nel camera-- 430 00:21:53,550 --> 00:21:58,020 così potrei entrare in quella lì sono 200 persone in questa stanza. 431 00:21:58,020 --> 00:22:05,480 Poi qui stiamo andando a venire e dichiarare un array di dimensione 200. 432 00:22:05,480 --> 00:22:10,220 Stiamo dichiarando array che è abbastanza grande per contenere 200 secoli. 433 00:22:10,220 --> 00:22:15,370 Scendendo, è il ciclo for che otterrete molto abituati. 434 00:22:15,370 --> 00:22:19,490 Così l'iterazione di questa matrice, assegnando ad ogni posizione 435 00:22:19,490 --> 00:22:23,020 in tale matrice un numero intero, e quindi in ultima analisi qui siamo 436 00:22:23,020 --> 00:22:28,340 solo ottenere un esempio di iterare su tale matrice, non assegnare i valori, 437 00:22:28,340 --> 00:22:30,150 ma per accedere ai valori. 438 00:22:30,150 --> 00:22:33,810 >> Quindi, qui vediamo che siamo hanno da dire, un anno da oggi, 439 00:22:33,810 --> 00:22:40,470 persona% i sarà% i anni, dove il primo% i è i più 1. 440 00:22:40,470 --> 00:22:43,010 Così i è questa variabile indice. 441 00:22:43,010 --> 00:22:49,420 E il secondo% i è intenzione di essere il valore memorizzato nella matrice epoche più 1. 442 00:22:49,420 --> 00:22:54,217 Quindi questo più 1 è solo perché siamo saying-- questo più 1, età i più 1. 443 00:22:54,217 --> 00:22:57,050 Questo più 1 è solo perché siamo dicendo: un anno da oggi la persona 444 00:22:57,050 --> 00:22:58,280 sarà questo vecchio. 445 00:22:58,280 --> 00:23:01,080 >> Allora, perché è questo che più 1? 446 00:23:01,080 --> 00:23:04,064 Perché abbiamo un più 1 lì? 447 00:23:04,064 --> 00:23:04,564 Già. 448 00:23:04,564 --> 00:23:07,410 449 00:23:07,410 --> 00:23:07,930 Sì. 450 00:23:07,930 --> 00:23:10,510 Quindi ricorda array sono pari a zero indicizzati. 451 00:23:10,510 --> 00:23:14,840 Quindi, se noi stampiamo questo per qualcuno di leggere solo l'uscita, 452 00:23:14,840 --> 00:23:19,380 allora probabilmente vogliono vedere qualcosa come persona, persona il numero uno, 453 00:23:19,380 --> 00:23:21,160 sarà di 20 anni. 454 00:23:21,160 --> 00:23:23,570 Numero due sarà di 15 anni. 455 00:23:23,570 --> 00:23:27,420 Non Preferisco vedere persona numero zero è di 15 anni. 456 00:23:27,420 --> 00:23:36,460 >> Così compilazione di questo e solo vedere cosa sembra like-- Crea un pò di spazio. 457 00:23:36,460 --> 00:23:43,560 Fai età compilazioni. 458 00:23:43,560 --> 00:23:45,080 Esecuzione di età. 459 00:23:45,080 --> 00:23:46,580 Vediamo numero di persone nella stanza. 460 00:23:46,580 --> 00:23:48,850 Quindi io dico ci sono tre persone in camera. 461 00:23:48,850 --> 00:23:54,000 Età di persona il numero uno, diciamo 15, 20, 25. 462 00:23:54,000 --> 00:23:59,680 Ed ora mi dico tra un anno ora saranno 16, 21, 26. 463 00:23:59,680 --> 00:24:02,900 Vediamo che questo funziona con un n non è uguale a 3. 464 00:24:02,900 --> 00:24:07,940 Quindi, se io dico numero di persone che è 5, uno, due, tre, due, uno, fra un anno 465 00:24:07,940 --> 00:24:11,170 essi saranno due, tre, quattro, tre, due anni. 466 00:24:11,170 --> 00:24:16,500 Così ho potuto altrettanto facilmente essere n essere 10.000. 467 00:24:16,500 --> 00:24:21,270 Ora sarò seduto qui per un bel una durante l'immissione le età, ma questo funziona. 468 00:24:21,270 --> 00:24:26,000 >> Così ora in memoria da qualche parte ci avere un array di dimensione 10.000, 469 00:24:26,000 --> 00:24:28,830 così alla fine 40.000 bytes, perché ci sono 470 00:24:28,830 --> 00:24:31,222 quattro byte per ciascuno di tali numeri interi. 471 00:24:31,222 --> 00:24:33,180 Quindi c'è una serie di Dimensioni 10.000 dove possiamo 472 00:24:33,180 --> 00:24:36,201 memorizzare le età di quelle 10.000 persone. 473 00:24:36,201 --> 00:24:36,700 Tutto ok. 474 00:24:36,700 --> 00:24:40,070 Domande su tutto questo? 475 00:24:40,070 --> 00:24:41,892 Già. 476 00:24:41,892 --> 00:24:43,350 Che cosa succede se ti ha dato un numero negativo? 477 00:24:43,350 --> 00:24:44,870 Vediamo cosa succede. 478 00:24:44,870 --> 00:24:49,320 Quindi, in questo particolare numero case-- di persone nella stanza, quello negativo. 479 00:24:49,320 --> 00:24:52,580 Essa ha respinto tale, perché qui ci capita 480 00:24:52,580 --> 00:24:57,180 essere la manipolazione del fatto che, se n è meno di quello che stiamo andando a chiedere di nuovo. 481 00:24:57,180 --> 00:25:01,780 Se si tenta di dichiarare un array di dimensione negativa, 482 00:25:01,780 --> 00:25:03,950 generalmente non funziona. 483 00:25:03,950 --> 00:25:05,570 >> Così proviamo. 484 00:25:05,570 --> 00:25:08,000 Ignoriamo qualunque valore che di ingresso per n 485 00:25:08,000 --> 00:25:10,571 e dire le età int negativo. 486 00:25:10,571 --> 00:25:12,410 Vediamo se si compila anche. 487 00:25:12,410 --> 00:25:14,100 Non sono sicuro. 488 00:25:14,100 --> 00:25:14,920 No. 489 00:25:14,920 --> 00:25:18,280 Quindi età è dichiarata come array con una dimensione negativa. 490 00:25:18,280 --> 00:25:22,540 Così in anticipo si riconosce una matrice non può essere di dimensioni negativo e respinge. 491 00:25:22,540 --> 00:25:26,840 Ora, se noi non gestiamo questo ciclo do-while correttamente, 492 00:25:26,840 --> 00:25:28,810 se non siamo registrati se n è minore di 1-- 493 00:25:28,810 --> 00:25:32,690 diciamo che solo non ha avuto questo a tutti 494 00:25:32,690 --> 00:25:35,940 e invece abbiamo appena afferrare un intero. 495 00:25:35,940 --> 00:25:40,710 Non importa quale che sia intero, dichiariamo un array di quelle dimensioni. 496 00:25:40,710 --> 00:25:44,250 >> Quindi il compilatore non può forse lamentarsi ora. 497 00:25:44,250 --> 00:25:48,780 Se compilo questo-- quindi non può lamentarsi, 498 00:25:48,780 --> 00:25:51,480 perché non può sapere che sono andando ad inserire un numero negativo, 499 00:25:51,480 --> 00:25:52,550 che potrebbe non essere valido. 500 00:25:52,550 --> 00:25:54,633 Per tutto quello che sa, potrei inserire un numero positivo, 501 00:25:54,633 --> 00:25:56,000 che è perfettamente valido. 502 00:25:56,000 --> 00:26:01,090 Quindi immagino che se entro negativo 1 persone nella stanza, Segmentation Fault. 503 00:26:01,090 --> 00:26:06,040 >> Va bene allora. 504 00:26:06,040 --> 00:26:13,160 Quindi aggiungiamo questo nuovo solo tenere quello che era in origine. 505 00:26:13,160 --> 00:26:15,640 Quindi, fare le età. 506 00:26:15,640 --> 00:26:18,120 Ora, se voglio provare una negativo age-- quindi cerchiamo di 507 00:26:18,120 --> 00:26:19,710 dicono che ci sono cinque persone nella stanza. 508 00:26:19,710 --> 00:26:23,180 Età di persona il numero uno è negativo 4, tre persone 509 00:26:23,180 --> 00:26:26,500 è zero, persona sulle tre ruote OK. 510 00:26:26,500 --> 00:26:29,850 Così qui, tra un anno, il numero di persone uno sarà negativo 3 anni. 511 00:26:29,850 --> 00:26:32,830 Quindi probabilmente non ha senso. 512 00:26:32,830 --> 00:26:37,220 Ma questo è solo perché guardando il codice che stiamo facendo tutto 513 00:26:37,220 --> 00:26:40,260 sta richiedendo GetInt. 514 00:26:40,260 --> 00:26:44,110 >> Ora, se avessimo avuto la Funzione GetPositiveInt 515 00:26:44,110 --> 00:26:49,690 o avevamo fatto semplicemente questo sorta di stesso ciclo while laggiù, 516 00:26:49,690 --> 00:26:52,340 allora questo avrebbe funzionato perfettamente bene. 517 00:26:52,340 --> 00:26:54,200 Ma in questo particolare caso, proprio non ci siamo 518 00:26:54,200 --> 00:26:57,772 capita di essere la gestione dei valori negativi. 519 00:26:57,772 --> 00:26:59,147 Tutte le altre domande su array? 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 >> Così ora abbiamo visto array. 523 00:27:09,380 --> 00:27:12,500 E stiamo andando ad avere bisogno di utilizzare questo per gli argomenti della riga di comando. 524 00:27:12,500 --> 00:27:14,680 Così nel problema impostare two-- So che molti di voi 525 00:27:14,680 --> 00:27:18,040 potrebbe ancora essere al lavoro sul set problema uno, ma il problema impostare due sta arrivando. 526 00:27:18,040 --> 00:27:22,260 Nel problema impostare due, si sta andando a necessario avere a che fare con le stringhe, array, 527 00:27:22,260 --> 00:27:23,950 e gli argomenti della riga di comando. 528 00:27:23,950 --> 00:27:26,270 >> Ma quali sono gli argomenti della riga di comando? 529 00:27:26,270 --> 00:27:29,570 Ora, si può vedere qui un piccolo teaser per esattamente ciò che è 530 00:27:29,570 --> 00:27:30,950 andando ad accadere. 531 00:27:30,950 --> 00:27:32,950 Vediamo int main, argc inc, Staffe corda argv. 532 00:27:32,950 --> 00:27:34,560 533 00:27:34,560 --> 00:27:38,130 Quindi, prima cerchiamo di interpretare cosa che sta cercando di dire. 534 00:27:38,130 --> 00:27:40,800 Ora ok. 535 00:27:40,800 --> 00:27:44,637 >> Così, alla riga di comando si dovrebbe essere abituarsi ad alcuni di questi comandi 536 00:27:44,637 --> 00:27:48,580 ora, e probabilmente avete eseguito cd nel terminale prima. 537 00:27:48,580 --> 00:27:52,100 Quindi, se diciamo cd pset1, si sa che che dovrebbe 538 00:27:52,100 --> 00:27:55,050 essere la modifica nella directory pset1. 539 00:27:55,050 --> 00:27:59,120 >> Ora nota che non hai mai scritto un programma come questo prima. 540 00:27:59,120 --> 00:28:03,120 Ogni programma che hai scritto, si dovrebbe eseguire, per esempio, Dot tagliare Mario, 541 00:28:03,120 --> 00:28:06,779 dot taglio su avidi, e poi potrebbe richiedere per l'input. 542 00:28:06,779 --> 00:28:08,570 Ora, questo non è quello che cambia directory fa. 543 00:28:08,570 --> 00:28:12,770 Quando si esegue cd, non poi dire, che directory vuoi cd in? 544 00:28:12,770 --> 00:28:17,200 Invece, basta dire, cd pset1, e si va solo nella directory pset1. 545 00:28:17,200 --> 00:28:20,430 >> Così allo stesso modo abbiamo altri esempi. 546 00:28:20,430 --> 00:28:21,540 fare ciao. 547 00:28:21,540 --> 00:28:25,760 Quando si esegue fare, non poi dire, quale programma ti piacerebbe fare? 548 00:28:25,760 --> 00:28:29,620 Basta dire, al riga di comando fanno ciao. 549 00:28:29,620 --> 00:28:31,060 >> Move è un altro esempio. 550 00:28:31,060 --> 00:28:34,840 Questo ci stiamo muovendo il mario.c archiviare su una directory. 551 00:28:34,840 --> 00:28:38,060 Così ora sappiamo con questo esempio siamo davvero passando due argomenti. 552 00:28:38,060 --> 00:28:42,090 C'è mario.c come primo argomento, e punto punto è il secondo argomento. 553 00:28:42,090 --> 00:28:46,140 E poi, quando si esegue fate, voi vedere che il comando davvero lunga line-- 554 00:28:46,140 --> 00:28:50,580 tale comando davvero lunga stampato nella riga di comando. 555 00:28:50,580 --> 00:28:53,590 In modo che questo lungo command-- è solo una breve parte di esso, 556 00:28:53,590 --> 00:28:56,090 ma ora abbiamo tre argomenti della riga di comando. 557 00:28:56,090 --> 00:28:59,750 Dot precipitare a zero, ciao, e hello.c. 558 00:28:59,750 --> 00:29:03,497 >> Quindi questi sono da riga di comando argomenti, argomenti 559 00:29:03,497 --> 00:29:05,580 che si sta passando al riga di comando in modo che 560 00:29:05,580 --> 00:29:08,680 non deve essere richiesto quando si esegue il programma. 561 00:29:08,680 --> 00:29:13,090 Sarebbe frustrante se quando è stato eseguito Clang ha detto, "OK, 562 00:29:13,090 --> 00:29:15,630 che program-- che lima stai compilazione? 563 00:29:15,630 --> 00:29:17,010 Ciao C. 564 00:29:17,010 --> 00:29:19,440 Che cosa faresti bandiere inserisci? dash o. 565 00:29:19,440 --> 00:29:21,190 Cosa ti piacerebbe il file di essere chiamato? 566 00:29:21,190 --> 00:29:21,690 Ciao. 567 00:29:21,690 --> 00:29:25,290 No, basta eseguire clang dash o ciao hello.c. 568 00:29:25,290 --> 00:29:28,820 >> Quindi, guardando indietro a questo. 569 00:29:28,820 --> 00:29:32,920 Ora argc argc-- è i conteggi argomento. 570 00:29:32,920 --> 00:29:36,620 E 'il numero di riga di comando argomenti inseriti nella riga di comando. 571 00:29:36,620 --> 00:29:39,720 Beh, tecnicamente argv-- la V sta per il vettore, 572 00:29:39,720 --> 00:29:41,460 il che significa fondamentalmente array. 573 00:29:41,460 --> 00:29:42,680 Ma si può ignorarlo. 574 00:29:42,680 --> 00:29:47,540 Argv-- abbiamo corda argv, così parentesi corda argv. 575 00:29:47,540 --> 00:29:50,150 Quindi questa è un'altra forma di parentesi, non avete mai visto prima. 576 00:29:50,150 --> 00:29:52,300 Staffa in modo che abbiamo visto notazione quando abbiamo detto, 577 00:29:52,300 --> 00:29:53,970 come, stringa s è uguale Zamyla. 578 00:29:53,970 --> 00:29:56,910 s staffa 0 accede alla Z. carattere 579 00:29:56,910 --> 00:30:00,720 >> Abbiamo visto anche le staffe quando abbiamo detto int età staffa 5. 580 00:30:00,720 --> 00:30:03,160 Che ha dichiarato un array di dimensioni 5. 581 00:30:03,160 --> 00:30:06,280 Così qui è una versione del staffe noi non hanno mai visto prima. 582 00:30:06,280 --> 00:30:09,630 Quindi questo tipo di corda che argv sarebbe del tutto familiare 583 00:30:09,630 --> 00:30:12,050 che sarebbe solo una stringa. 584 00:30:12,050 --> 00:30:14,520 Ora le parentesi indicano che questo è un array. 585 00:30:14,520 --> 00:30:19,920 Così staffe corda argv mezzi che argv è un array di stringhe. 586 00:30:19,920 --> 00:30:22,540 Ora tecnicamente una stringa è un array di caratteri. 587 00:30:22,540 --> 00:30:26,400 Quindi, questo è ora un array di un array di caratteri. 588 00:30:26,400 --> 00:30:31,490 Ma è molto più facile da pensare questo come solo un array di stringhe. 589 00:30:31,490 --> 00:30:34,900 >> Allora, perché potrebbero le staffe essere vuoto? 590 00:30:34,900 --> 00:30:38,170 Come, perché non possiamo dire, Staffa 5, staffa n? 591 00:30:38,170 --> 00:30:40,700 592 00:30:40,700 --> 00:30:41,200 Già. 593 00:30:41,200 --> 00:30:43,731 594 00:30:43,731 --> 00:30:44,230 Già. 595 00:30:44,230 --> 00:30:46,396 Non sappiamo quanti ingressi ci saranno. 596 00:30:46,396 --> 00:30:53,560 Quindi, se guardiamo l'esempio clang, diciamo Clang trattino o ciao hello.c. 597 00:30:53,560 --> 00:30:56,710 In questo caso particolare, ci capita essere tre argomenti della riga di comando. 598 00:30:56,710 --> 00:31:00,522 E così la brackets-- vedremo in un secondo non sarebbe tre. 599 00:31:00,522 --> 00:31:01,730 Tecnicamente sarebbe quattro. 600 00:31:01,730 --> 00:31:04,030 Ma le staffe, avremmo per esempio, ci sono tre. 601 00:31:04,030 --> 00:31:08,220 Ma ora, se abbiamo guardato mossa mario.c dot dot, le staffe 602 00:31:08,220 --> 00:31:09,760 vorremmo mettere due in loro. 603 00:31:09,760 --> 00:31:12,884 >> E ci sono un sacco di comandi che avere un numero variabile di riga di comando 604 00:31:12,884 --> 00:31:13,620 argomenti. 605 00:31:13,620 --> 00:31:17,430 Allora, cosa questa versione del notazione di parentesi indica 606 00:31:17,430 --> 00:31:20,820 è che argv è un array di stringhe. 607 00:31:20,820 --> 00:31:24,360 Ma noi non sappiamo quanti stringhe sono in tale matrice. 608 00:31:24,360 --> 00:31:27,090 E come facciamo poi sappiamo come molte stringhe sono nella matrice? 609 00:31:27,090 --> 00:31:28,870 Questo è il punto argc. 610 00:31:28,870 --> 00:31:32,300 argc ci dice quanto tempo è argv. 611 00:31:32,300 --> 00:31:36,500 >> Quindi l'ultima cosa da tenere a mente è che, tecnicamente, 612 00:31:36,500 --> 00:31:40,820 il comando stesso conta come uno degli argomenti della riga di comando. 613 00:31:40,820 --> 00:31:45,330 Così cd pset1, ci sono due argomenti della riga di comando. 614 00:31:45,330 --> 00:31:50,260 Il programma in sé, cd, e poi la parte tesi reale di esso, pset1. 615 00:31:50,260 --> 00:31:54,490 Qualsiasi programma che hai scritto finora ha avuto un puntino riga di comando argument-- 616 00:31:54,490 --> 00:31:55,320 tagliare Mario. 617 00:31:55,320 --> 00:31:57,350 Questo è l'unico argomento della riga di comando. 618 00:31:57,350 --> 00:32:00,900 >> Così ora guardando clang dash o ciao hello.c. 619 00:32:00,900 --> 00:32:01,905 Allora, qual è 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 Così argc è 4. 623 00:32:08,140 --> 00:32:12,140 Clang, così argv staffa 0 è clang. 624 00:32:12,140 --> 00:32:15,630 Staffa argv 1 è dash 0. 625 00:32:15,630 --> 00:32:21,870 Staffa argv 2 è ciao, e Staffa argv 3 è hello.c. 626 00:32:21,870 --> 00:32:26,813 Ok, quindi domande su questo, e poi ci vedere alcuni esempi programmatiche. 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 Quindi daremo uno sguardo a hello3.c. 630 00:32:36,260 --> 00:32:41,890 Quindi questo dovrebbe essere familiare da uno dei primi esempi c 631 00:32:41,890 --> 00:32:45,800 abbiamo avuto dove ci sarebbe solo dire, ciao mondo, ma ora è più generale. 632 00:32:45,800 --> 00:32:52,300 Quindi qui stiamo dicendo ciao % s backslash n staffa argv 1. 633 00:32:52,300 --> 00:32:57,440 Notice-- così fino a questo punto, si tratta di ciò che il mio file di modello ha guardato come. 634 00:32:57,440 --> 00:33:01,800 Ho avuto int main (void), e quindi vorrei fare qualcosa nella funzione principale. 635 00:33:01,800 --> 00:33:05,100 Ora, invece, una volta che iniziare a trattare con gli argomenti della riga di comando, 636 00:33:05,100 --> 00:33:07,890 abbiamo bisogno di affermare un diversa forma di principale. 637 00:33:07,890 --> 00:33:11,930 >> Così guardando hello3 di nuovo, la principale sta 638 00:33:11,930 --> 00:33:15,990 di prendere due argomenti now-- int argc, il numero di argomenti della riga di comando, 639 00:33:15,990 --> 00:33:20,970 e la stringa argv parentesi, l'attuale stringhe inserite nella riga di comando. 640 00:33:20,970 --> 00:33:26,560 Quindi ho intenzione di cambiare la situazione modello per riflettere questo fatto. 641 00:33:26,560 --> 00:33:29,060 Ora ogni volta che si scrive un programma, se non lo fai 642 00:33:29,060 --> 00:33:33,720 devono intraprendere alcuna riga di comando argomenti, allora basta usare int main (void). 643 00:33:33,720 --> 00:33:37,070 Ma ora, quando si sta scrivendo programmi di argomenti della riga di comando, che 644 00:33:37,070 --> 00:33:40,350 hai intenzione di fare per il problema set two-- ora che si sta eseguendo 645 00:33:40,350 --> 00:33:42,630 programmi che devono prendere gli argomenti della riga di comando, 646 00:33:42,630 --> 00:33:45,250 è necessario avere principale di questa forma. 647 00:33:45,250 --> 00:33:51,290 >> Quindi qui-- questo è il grande utilizzo dell'argomento della riga di comando. 648 00:33:51,290 --> 00:33:54,100 Così la stampa argv 1. 649 00:33:54,100 --> 00:33:59,180 OK quindi cerchiamo di compilazione ed eseguire questo programma. 650 00:33:59,180 --> 00:34:02,440 Fai hello3. 651 00:34:02,440 --> 00:34:03,570 Compila. 652 00:34:03,570 --> 00:34:06,870 Dot taglio su hello3. 653 00:34:06,870 --> 00:34:08,920 E diciamo, "Rob". 654 00:34:08,920 --> 00:34:10,760 Ciao Rob. 655 00:34:10,760 --> 00:34:14,940 Se dico, "ciao Maria," ciao Maria. 656 00:34:14,940 --> 00:34:15,719 Ciao Maria. 657 00:34:15,719 --> 00:34:18,639 Hannah dice ancora, "ciao Maria, "perché non sono 658 00:34:18,639 --> 00:34:21,340 di fare qualsiasi cosa con il nostro argv 2. 659 00:34:21,340 --> 00:34:22,590 Argv 2 ora sarebbe "Hannah". 660 00:34:22,590 --> 00:34:25,030 Argc sarebbe 3. 661 00:34:25,030 --> 00:34:27,735 Che cosa succede se ho fatto questo? 662 00:34:27,735 --> 00:34:31,980 663 00:34:31,980 --> 00:34:34,679 Quindi ciao nullo. 664 00:34:34,679 --> 00:34:38,760 >> Ha accennato brevemente sul fatto che, tecnicamente, GetString 665 00:34:38,760 --> 00:34:42,429 potrebbe restituire null, ma staremo a ottenere un molto più in quello che è in realtà nullo. 666 00:34:42,429 --> 00:34:47,449 Ma prendere come una questione di fatto che non è generalmente male. 667 00:34:47,449 --> 00:34:50,179 Abbiamo fatto qualcosa di sbagliato se è la stampa "ciao nullo." 668 00:34:50,179 --> 00:34:52,179 E il motivo per cui abbiamo fatto qualcosa che non va è-- bene, 669 00:34:52,179 --> 00:34:56,179 quando mi sono imbattuto puntino barra hello3, argc era 1. 670 00:34:56,179 --> 00:34:59,680 Così che indica la lunghezza di argv era 1. 671 00:34:59,680 --> 00:35:05,110 Se un array è di lunghezza 1, l'unico indice valido è zero. 672 00:35:05,110 --> 00:35:08,550 Ed ecco argv 1 è al di fuori la gamma di questa matrice. 673 00:35:08,550 --> 00:35:13,410 E 'stato simile a prima, quando ho provato memorizzare 6 all'esterno dell'estremità della matrice. 674 00:35:13,410 --> 00:35:18,100 Così sto cercando di accedere a qualcosa al di fuori dei conti argv, 675 00:35:18,100 --> 00:35:21,340 e stiamo ottenendo nulla. 676 00:35:21,340 --> 00:35:24,360 >> Così una versione migliore di questo, un miglioramento, 677 00:35:24,360 --> 00:35:27,010 sta controllando in modo esplicito argc. 678 00:35:27,010 --> 00:35:33,580 Quindi, se argc è uguale a 2, questo significa che abbiamo corso qualcosa di simile a puntino barra hello3 Rob. 679 00:35:33,580 --> 00:35:36,840 E stamperà "ciao Rob." 680 00:35:36,840 --> 00:35:39,850 Se argc non è uguale 2, allora è solo andare 681 00:35:39,850 --> 00:35:42,560 di ignorare ciò che si mette presso l'argomento della riga di comando 682 00:35:42,560 --> 00:35:43,960 come argomenti della riga di comando. 683 00:35:43,960 --> 00:35:47,168 Oppure, se non avete messo non del tutto, è solo andando a ignorare che e dire, 684 00:35:47,168 --> 00:35:47,960 "ciao te." 685 00:35:47,960 --> 00:35:51,490 >> Quindi compilazione di questo. 686 00:35:51,490 --> 00:35:54,500 Fai hello4. 687 00:35:54,500 --> 00:35:56,790 E correndo hello4. 688 00:35:56,790 --> 00:36:00,010 L'esecuzione in questo modo, quello che dovrebbe essere stampato? 689 00:36:00,010 --> 00:36:01,330 "Ciao tu". 690 00:36:01,330 --> 00:36:02,810 Ciao voi. 691 00:36:02,810 --> 00:36:05,870 Che dire hello4 Rob? 692 00:36:05,870 --> 00:36:06,950 "Ciao Rob." 693 00:36:06,950 --> 00:36:10,580 E, infine, ciao Rob Maria è solo "ciao You" di nuovo, 694 00:36:10,580 --> 00:36:13,677 perché non hai realmente immesso qualcosa che si aspettava. 695 00:36:13,677 --> 00:36:15,510 Hai inserito più nomi quello che poteva gestire, 696 00:36:15,510 --> 00:36:19,500 quindi è solo impostazione predefinita: il ciao voi comportamento. 697 00:36:19,500 --> 00:36:23,040 Così domande su questo? 698 00:36:23,040 --> 00:36:26,290 O gli argomenti della riga di comando? 699 00:36:26,290 --> 00:36:28,690 >> OK, allora dare un'occhiata a un altro paio di esempi di utilizzo 700 00:36:28,690 --> 00:36:34,230 da riga di comando arguments-- primo abbiamo argv trattino 1 punto c. 701 00:36:34,230 --> 00:36:38,510 Così i commenti dare via ciò che questo programma dovrebbe fare. 702 00:36:38,510 --> 00:36:42,460 Ma bando now-- questo ciclo for, questo corrisponde al modello esatto 703 00:36:42,460 --> 00:36:43,390 Dicevo prima. 704 00:36:43,390 --> 00:36:46,240 Siamo appena capita di essere utilizzando argc anziché n. 705 00:36:46,240 --> 00:36:48,880 Ora argc è davvero il n. 706 00:36:48,880 --> 00:36:51,260 E 'la lunghezza dell'array argv. 707 00:36:51,260 --> 00:36:59,600 Così sono iterare su il argv matrice printf-ing ogni valore argv. 708 00:36:59,600 --> 00:37:04,730 >> Quindi, se faccio questo. 709 00:37:04,730 --> 00:37:08,232 Fai argv 1. 710 00:37:08,232 --> 00:37:09,940 Si compila. 711 00:37:09,940 --> 00:37:11,620 Dot taglio su argv 1. 712 00:37:11,620 --> 00:37:15,530 Solo in esecuzione questo, stampe punteggiano barra argv 1 713 00:37:15,530 --> 00:37:18,500 dal momento che era l'unica linea di comando argument-- il nome del programma. 714 00:37:18,500 --> 00:37:22,080 Ci sarà sempre almeno: argc non può essere inferiore a uno, 715 00:37:22,080 --> 00:37:25,910 dal momento che ci sarà sempre almeno essere il nome del programma da eseguire. 716 00:37:25,910 --> 00:37:32,040 Così argv 1 Rob stamperà argv 1 e poi sulla nuova linea "Rob". 717 00:37:32,040 --> 00:37:36,350 >> Così nella prima iterazione di questo ciclo, i è 0. 718 00:37:36,350 --> 00:37:39,090 Argv 0 è il nome del programma. 719 00:37:39,090 --> 00:37:40,010 Dot taglio su argv 1. 720 00:37:40,010 --> 00:37:43,770 E poi argv 1 è il mio primo argomento della riga di comando, che è Rob. 721 00:37:43,770 --> 00:37:45,920 A questo punto, siamo uguali a argc. 722 00:37:45,920 --> 00:37:48,210 Rompiamo fuori dal giro e abbiamo finito. 723 00:37:48,210 --> 00:37:53,940 Quindi questo lavoro per un arbitrario numero di argomenti della riga di comando. 724 00:37:53,940 --> 00:37:58,550 Notate la stampa argv 0, argv 1, argv 2, argv 3, argv 4. 725 00:37:58,550 --> 00:38:00,150 E non c'è argv 5. 726 00:38:00,150 --> 00:38:01,460 argc è pari a 5. 727 00:38:01,460 --> 00:38:06,960 Così a argc-- a i è uguale a 5, rompiamo fuori dal giro. 728 00:38:06,960 --> 00:38:07,950 OK. 729 00:38:07,950 --> 00:38:11,315 Così domande su che prima di noi guardare un esempio più complesso? 730 00:38:11,315 --> 00:38:14,190 731 00:38:14,190 --> 00:38:16,860 >> Così argv 2. 732 00:38:16,860 --> 00:38:17,830 Tutto ok. 733 00:38:17,830 --> 00:38:20,610 Quindi stiamo ancora la stampa gli argomenti della riga di comando. 734 00:38:20,610 --> 00:38:23,170 Ma ora noti che ci sono una annidata ciclo for. 735 00:38:23,170 --> 00:38:24,670 Allora, cosa sta facendo questo? 736 00:38:24,670 --> 00:38:28,430 Quindi il primo ciclo sta facendo esattamente quello che ha fatto prima. 737 00:38:28,430 --> 00:38:30,950 Stiamo ancora looping sopra ogni argomento della riga di comando, 738 00:38:30,950 --> 00:38:34,260 ma ora questa seconda loop-- abbiamo anche visto qualcosa di simile prima. 739 00:38:34,260 --> 00:38:38,600 Quando è stato iterazione su Zamyla stampando Z-A-M-Y-L-A. 740 00:38:38,600 --> 00:38:44,816 Quindi questo secondo ciclo di int j uguale 0, n uguale strlen della staffa argv i. 741 00:38:44,816 --> 00:38:49,170 >> Quindi cerchiamo di pensare per prima the-- camminiamo attraverso. 742 00:38:49,170 --> 00:38:53,560 Pensiamo ciò che il computer sarebbe fare se ho eseguito questo programma come solo dot 743 00:38:53,560 --> 00:38:56,030 tagliare argv trattino 2. 744 00:38:56,030 --> 00:39:03,590 Quindi, se ho eseguito questo codice, poi argc sta per essere uguale a 1. 745 00:39:03,590 --> 00:39:07,050 E stringa argv-- c'è solo sta per essere un indice in argv, 746 00:39:07,050 --> 00:39:12,370 e che sta per essere uguale a dot tagliare argv 2-- il nome del programma. 747 00:39:12,370 --> 00:39:19,170 >> OK, ora mi è uguale a 0, i meno 1, i plus plus per int j è uguale a 0, 748 00:39:19,170 --> 00:39:23,880 n uguale strlen della staffa argv 0, quindi in la prima iterazione di questo ciclo. argv 749 00:39:23,880 --> 00:39:27,250 Staffa 0 è barra puntino argv 2. 750 00:39:27,250 --> 00:39:29,320 Allora, qual è la lunghezza della stringa? 751 00:39:29,320 --> 00:39:32,480 Beh, dot tagliare A-R-G-V tratto 2. 752 00:39:32,480 --> 00:39:35,020 Così strlen di che sarà di 8. 753 00:39:35,020 --> 00:39:37,500 Così j è uguale a 0, n è uguale a 8. 754 00:39:37,500 --> 00:39:39,530 Finché j è minore di 8, j ++. 755 00:39:39,530 --> 00:39:44,080 E con questo abbiamo intenzione di essere la stampa di un singolo carattere, che 756 00:39:44,080 --> 00:39:47,350 è argv staffa i staffa j. 757 00:39:47,350 --> 00:39:49,826 >> Quindi l'unica i è zero. 758 00:39:49,826 --> 00:39:51,700 Abbiamo ancora un solo argomento della riga di comando. 759 00:39:51,700 --> 00:39:53,890 In tale prima iterazione del ciclo for, siamo 760 00:39:53,890 --> 00:39:56,950 sta per essere la stampa Staffa argv 0 0 staffa. 761 00:39:56,950 --> 00:39:58,325 E poi j sta per incrementare. 762 00:39:58,325 --> 00:40:01,650 E stiamo andando a stampa Staffa argv 0 staffa 1. 763 00:40:01,650 --> 00:40:04,150 E poi argv staffa 0 staffa 2. 764 00:40:04,150 --> 00:40:09,030 >> Quindi questo è il nostro primo incontro di array multidimensionali. 765 00:40:09,030 --> 00:40:12,770 Ricordo in precedenza che ho detto che argv è tecnicamente 766 00:40:12,770 --> 00:40:15,950 un array di array di caratteri. 767 00:40:15,950 --> 00:40:24,360 Così qui se ho detto qualcosa di simile stringa s è uguale a staffa argv i, 768 00:40:24,360 --> 00:40:29,590 e poi ho detto, s j staffa, questo sarebbe realizzare la stessa cosa. 769 00:40:29,590 --> 00:40:31,960 Ora, avete staffa j visto s prima. 770 00:40:31,960 --> 00:40:36,680 Questo è solo accedere al j-esimo carattere di questa stringa. 771 00:40:36,680 --> 00:40:48,010 Quindi, con questo, stiamo ottenendo il carattere j-esimo del argv i-esimo. 772 00:40:48,010 --> 00:40:51,450 >> Così che cosa dovrebbe in ultima analisi questo uscita? 773 00:40:51,450 --> 00:40:53,210 Fai argv 2. 774 00:40:53,210 --> 00:40:54,730 Si compila. 775 00:40:54,730 --> 00:40:56,340 Dot taglio su argv 2. 776 00:40:56,340 --> 00:41:03,790 "Rob Maria Hannah," e ci dà un certo spazio. 777 00:41:03,790 --> 00:41:07,050 Così vediamo che questa è in uscita puntino su una riga separata e barra 778 00:41:07,050 --> 00:41:08,920 su una riga e sulla propria riga. 779 00:41:08,920 --> 00:41:11,260 E 'la stampa di ogni carattere individuale 780 00:41:11,260 --> 00:41:12,950 di ogni argomento della riga di comando. 781 00:41:12,950 --> 00:41:15,960 E poi tra di loro, a causa di questa nuova linea 782 00:41:15,960 --> 00:41:19,380 stiamo stampando qui, in tra di loro che sarà stampare una nuova linea. 783 00:41:19,380 --> 00:41:24,540 >> Quindi questo è simile il priore trattino argv 1, 784 00:41:24,540 --> 00:41:26,459 che stampa ogni argomento della riga di comando, 785 00:41:26,459 --> 00:41:28,500 ma ora stiamo stampa gli argomenti della riga di comando 786 00:41:28,500 --> 00:41:31,950 e poi iterazione attraverso ogni carattere di ogni argomento della riga di comando 787 00:41:31,950 --> 00:41:35,400 per ottenere questo risultato. 788 00:41:35,400 --> 00:41:36,870 ok? 789 00:41:36,870 --> 00:41:40,570 Così domande su questo? 790 00:41:40,570 --> 00:41:45,130 >> Una cosa da notare è che da riga di comando arguments-- 791 00:41:45,130 --> 00:41:49,990 in modo che siano separati da spazi come si sarebbe naturalmente aspetta che siano. 792 00:41:49,990 --> 00:41:53,050 Quindi una stringa può avere spazi in esso. 793 00:41:53,050 --> 00:41:57,380 Non è super importante, ma se io voleva che il terzo argomento della riga di comando 794 00:41:57,380 --> 00:42:01,226 di avere uno spazio in esso, allora io potrebbe dire qualcosa di simile. 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 Così questo ora ha ancora solo tre da riga di comando ben arguments-- 4. 798 00:42:12,190 --> 00:42:17,620 Dot taglio su argv tratto 2, Rob, Maria, e Hannah Bloomberg. 799 00:42:17,620 --> 00:42:18,320 OK. 800 00:42:18,320 --> 00:42:19,310 Domande su questo? 801 00:42:19,310 --> 00:42:22,700 802 00:42:22,700 --> 00:42:24,894 >> Non c'è niente di speciale circa il carattere di spazio. 803 00:42:24,894 --> 00:42:27,810 Succede solo essere che il da riga di comando considera il carattere di spazio 804 00:42:27,810 --> 00:42:29,226 come come separare ciascun argomento. 805 00:42:29,226 --> 00:42:32,048 806 00:42:32,048 --> 00:42:33,000 Tutto ok. 807 00:42:33,000 --> 00:42:39,950 Allora insieme Problema two-- si sta andando ad essere 808 00:42:39,950 --> 00:42:43,240 guardando la crittografia a chiave segreta. 809 00:42:43,240 --> 00:42:47,700 Quindi, simile a quell'esempio abbiamo visto da Una storia di Natale, 810 00:42:47,700 --> 00:42:52,840 si sta andando ad essere l'attuazione di alcune algoritmi che, dato un messaggio, 811 00:42:52,840 --> 00:42:55,560 si sta andando ad essere in grado per cifrare il messaggio 812 00:42:55,560 --> 00:42:58,730 che solo qualcuno con quel segreto chiave, con quell'anello decoder, 813 00:42:58,730 --> 00:43:01,090 dovrebbe essere in grado di decifrare. 814 00:43:01,090 --> 00:43:04,839 >> In modo che sia l'edizione standard. 815 00:43:04,839 --> 00:43:07,130 Si sta andando ad essere attuare due differenti versioni. 816 00:43:07,130 --> 00:43:09,620 Se vi capita di dare un'occhiata presso l'hacker edition-- ora, 817 00:43:09,620 --> 00:43:12,600 stiamo andando a dare una stringa come questo, 818 00:43:12,600 --> 00:43:15,240 che rappresenta una password crittografata. 819 00:43:15,240 --> 00:43:19,990 Così il vostro obiettivo è quello di capire ciò che la password è decifrato. 820 00:43:19,990 --> 00:43:26,950 Ora, questo è in realtà come le password sono memorizzati in un sacco di computer, 821 00:43:26,950 --> 00:43:31,290 e memorizza solo questo stringa casuale di caratteri. 822 00:43:31,290 --> 00:43:34,440 Dovete capire come ottenere da questa stringa casuale di caratteri 823 00:43:34,440 --> 00:43:36,140 a ciò che la password originale è stato. 824 00:43:36,140 --> 00:43:39,060 825 00:43:39,060 --> 00:43:43,290 >> E finalmente, dopo questo set problema, si dovrebbe 826 00:43:43,290 --> 00:43:46,100 essere in grado di capire ciò che questo significa. 827 00:43:46,100 --> 00:43:51,650 Così si imparerà a decifrare questo tipo di stringa casuale. 828 00:43:51,650 --> 00:43:56,390 Allo stesso modo, se vi ricordate di settimana 0, si potrebbe avere visto questo URL. 829 00:43:56,390 --> 00:44:00,210 E si dovrebbe essere in grado di decifrare questo alla fine. 830 00:44:00,210 --> 00:44:04,810 Potrebbe non essere felici quando si decifrare e fare clic sul link. 831 00:44:04,810 --> 00:44:05,700 Tutto ok. 832 00:44:05,700 --> 00:44:06,591 Questo è tutto per oggi. 833 00:44:06,591 --> 00:44:12,095 Così vediamo la prossima settimana! 834 00:44:12,095 --> 00:44:18,315 >> [RIPRODUZIONE MUSICA ELETTRONICA] 835 00:44:18,315 --> 00:47:15,619