1 00:00:00,000 --> 00:00:03,944 >> [Música tocando] 2 00:00:03,944 --> 00:00:10,732 3 00:00:10,732 --> 00:00:11,690 DAVID MALAN: Tudo bem. 4 00:00:11,690 --> 00:00:14,674 Este é CS50, e este é o fim de semana dois. 5 00:00:14,674 --> 00:00:16,840 Eu sinto muito Eu não poderia estar lá com todos vocês hoje, 6 00:00:16,840 --> 00:00:18,300 mas você está em muito boas mãos. 7 00:00:18,300 --> 00:00:21,710 Permita-me apresentar Própria Rob Bowden do CS50. 8 00:00:21,710 --> 00:00:29,106 9 00:00:29,106 --> 00:00:31,730 ROB BOWDEN: E, claro, em seguida, nós temos que fazer o divertimento do fato 10 00:00:31,730 --> 00:00:36,820 que ele nos enviou um verticais vídeo e mostrar isso. 11 00:00:36,820 --> 00:00:38,320 >> [REPRODUÇÃO DE VÍDEO] 12 00:00:38,320 --> 00:00:39,820 >> [Música tocando] 13 00:00:39,820 --> 00:00:42,350 >> PASSO A PASSO [] 14 00:00:42,350 --> 00:00:44,730 >> -Este Vídeo não fez tem que olhar dessa forma. 15 00:00:44,730 --> 00:00:46,570 Ele poderia ter sido evitada. 16 00:00:46,570 --> 00:00:49,070 Diga não aos vídeos verticais. 17 00:00:49,070 --> 00:00:53,310 >> Vídeos -Vertical acontecer quando você segurar a câmera na direção errada. 18 00:00:53,310 --> 00:00:55,880 O vídeo vai acabar acima de olhar como porcaria. 19 00:00:55,880 --> 00:00:57,650 >> - [GRUNHIDO] 20 00:00:57,650 --> 00:01:02,240 >> -Há Mais e mais pessoas viciadas para fazer vídeos verticais a cada dia. 21 00:01:02,240 --> 00:01:06,240 Não é rachar ou nada, mas ainda é muito ruim. 22 00:01:06,240 --> 00:01:10,410 Existem dois tipos diferentes de pessoas que estão aflitos com VVS. 23 00:01:10,410 --> 00:01:14,160 O primeiro grupo trata o vídeos de atirar como imagens. 24 00:01:14,160 --> 00:01:15,850 Elas não significam nenhum dano. 25 00:01:15,850 --> 00:01:19,180 Eles simplesmente não entendem que enquanto você pode girar uma imagem, 26 00:01:19,180 --> 00:01:20,880 você não pode realmente transformar um vídeo. 27 00:01:20,880 --> 00:01:21,880 >> [CRASH] 28 00:01:21,880 --> 00:01:23,460 >> - [MACACO SOUNDS] 29 00:01:23,460 --> 00:01:27,540 >> -O Outro grupo é de pessoas que não dar uma [BLEEP]. 30 00:01:27,540 --> 00:01:31,090 >> Síndrome de Vídeo -Vertical é perigoso. 31 00:01:31,090 --> 00:01:34,120 As imagens de vídeo têm sempre foi horizontal. 32 00:01:34,120 --> 00:01:35,990 As televisões estão horizontal. 33 00:01:35,990 --> 00:01:38,380 Os ecrãs de computador são horizontais. 34 00:01:38,380 --> 00:01:41,580 Os olhos das pessoas são horizontais. 35 00:01:41,580 --> 00:01:45,170 Nós não são construídos para assistir a vídeos verticais. 36 00:01:45,170 --> 00:01:47,600 >> -Eu Amo vídeos verticais. 37 00:01:47,600 --> 00:01:50,410 >> -Ninguém Se preocupa com você. 38 00:01:50,410 --> 00:01:53,340 >> -Se Deste problema não for controlada, você também 39 00:01:53,340 --> 00:01:57,650 começará mostrando quatro vídeos de uma vez só para economizar largura de banda. 40 00:01:57,650 --> 00:02:02,400 >> Vídeos verticais -Letterboxed faria ser do tamanho de um selo postal. 41 00:02:02,400 --> 00:02:04,920 >> -E Ele vai se espalhar por toda parte. 42 00:02:04,920 --> 00:02:07,670 Telas de cinema têm sempre foi horizontal. 43 00:02:07,670 --> 00:02:11,200 Se verticais vídeos tornam-se aceitos, cinemas 44 00:02:11,200 --> 00:02:13,930 terá que ser alto e magro. 45 00:02:13,930 --> 00:02:17,710 >> -E Todas as salas de cinema faria tem que se demolida e reconstruída. 46 00:02:17,710 --> 00:02:22,090 E no momento em que foram reconstruídas, Mila Kunis seria velho e feio. 47 00:02:22,090 --> 00:02:24,342 >> -birds Irá colidir com eles e morrer. 48 00:02:24,342 --> 00:02:26,530 >> -Vamos Tudo ficar duro pescoços de olhar para cima. 49 00:02:26,530 --> 00:02:29,800 >> -E Ninguém vai sentar-se no a linha da frente mais uma vez. 50 00:02:29,800 --> 00:02:37,170 >> -George Lucas irá re-lançamento Estrela Guerras novamente-- a edição magro. 51 00:02:37,170 --> 00:02:41,860 >> -Eu Nunca foi realmente capaz de dizer a história que eu queria contar. 52 00:02:41,860 --> 00:02:46,030 Esta foi uma grande oportunidade para mim experimentar com uma nova tecnologia. 53 00:02:46,030 --> 00:02:48,150 >> -Você é um idiota. 54 00:02:48,150 --> 00:02:54,430 >> -Toda Vez que um dispositivo móvel é usado para gravar vídeo, a tentação é lá. 55 00:02:54,430 --> 00:02:56,370 Apenas diga não. 56 00:02:56,370 --> 00:03:00,116 Diga não ao George Lucas. 57 00:03:00,116 --> 00:03:04,062 Diga não ao velho Mila Kunis. 58 00:03:04,062 --> 00:03:06,600 Diga não aos vídeos verticais. 59 00:03:06,600 --> 00:03:12,511 >> -E Se você vê alguém fazendo isso, dizem, "você não está filmando a manequim certo!" 60 00:03:12,511 --> 00:03:15,433 >> [Música tocando] 61 00:03:15,433 --> 00:03:18,842 62 00:03:18,842 --> 00:03:19,830 >> [FIM DE REPRODUÇÃO] 63 00:03:19,830 --> 00:03:23,702 >> [Aplausos] 64 00:03:23,702 --> 00:03:27,598 >> [SAÍDA DE ÁUDIO] 65 00:03:27,598 --> 00:03:44,041 66 00:03:44,041 --> 00:03:45,790 ROB BOWDEN: --simple forma de criptografia, 67 00:03:45,790 --> 00:03:49,500 que é, basicamente, a criptografia e decodificação de mensagens secretas. 68 00:03:49,500 --> 00:03:52,590 Portanto, temos aqui um brinquedo muito simples. 69 00:03:52,590 --> 00:03:56,900 E a idéia é o anel externo gira em torno do anel interno. 70 00:03:56,900 --> 00:04:01,610 E você pode ver, talvez se eu aumentar em, isso-- é difícil de ver. 71 00:04:01,610 --> 00:04:05,090 Mas, assim como, o número 1-- bem, isso mudou. 72 00:04:05,090 --> 00:04:09,120 >> O número 1 mapeia para a letra X, número 2 mapas para a letra 73 00:04:09,120 --> 00:04:11,630 J. incrivelmente difícil não saltar para a frente. 74 00:04:11,630 --> 00:04:16,100 Carta 2 mapeia para J. Número 3 mapeia para D. Assim, 75 00:04:16,100 --> 00:04:20,140 com este anel que você pode dar- alguém uma mensagem 1, 2, 3. 76 00:04:20,140 --> 00:04:22,624 Por alguma razão você quero dizer-lhes XJD. 77 00:04:22,624 --> 00:04:24,540 Mas você pode dar-lhes alguma mensagem de números, 78 00:04:24,540 --> 00:04:28,460 e contanto que eles têm este anel, eles pode decifrar o que você está tentando dizer. 79 00:04:28,460 --> 00:04:32,510 >> Então você pode ter visto este em particular exemplo de criptografia 80 00:04:32,510 --> 00:04:36,640 antes se em torno da época do Natal você assistiu Uma História de Natal. 81 00:04:36,640 --> 00:04:38,520 Se você nunca viu isso antes, então apenas 82 00:04:38,520 --> 00:04:41,060 ligar TBS em literalmente qualquer momento na véspera de Natal, 83 00:04:41,060 --> 00:04:44,510 porque eles simplesmente mostrá-lo de volta para trás a volta para trás para fazer o dia inteiro. 84 00:04:44,510 --> 00:04:46,744 E o vídeo é relevante esta. 85 00:04:46,744 --> 00:04:47,410 [REPRODUÇÃO DE VÍDEO] 86 00:04:47,410 --> 00:04:50,020 -Seja Sabe-a toda a gente que Ralph Parker é por este meio 87 00:04:50,020 --> 00:04:52,850 nomeado membro da Pequena Orphan Annie Círculo Secreto 88 00:04:52,850 --> 00:04:56,490 e tem direito a todas as honras e benefícios ocorrendo ao mesmo. 89 00:04:56,490 --> 00:04:59,010 Assinado Little Orphan Annie. 90 00:04:59,010 --> 00:05:03,120 Referendado Pierre Andre em tinta! 91 00:05:03,120 --> 00:05:07,460 Honras e benefícios já com a idade de nove! 92 00:05:07,460 --> 00:05:12,530 >> [GRITAR DE RADIO] 93 00:05:12,530 --> 00:05:13,030 -Vamos. 94 00:05:13,030 --> 00:05:14,000 Vamos começar com ele. 95 00:05:14,000 --> 00:05:18,274 Eu não preciso de todo esse jazz sobre contrabandistas e piratas. 96 00:05:18,274 --> 00:05:20,440 -listen Amanhã à noite com a aventura final 97 00:05:20,440 --> 00:05:22,540 do Navio de pirata preto. 98 00:05:22,540 --> 00:05:25,460 Agora, é hora de Mensagem secreta de Annie 99 00:05:25,460 --> 00:05:28,620 para vocês, membros da Secret Circle. 100 00:05:28,620 --> 00:05:32,370 Lembre-se dos miúdos, apenas os membros do Círculo Secreto de Annie 101 00:05:32,370 --> 00:05:34,880 pode decodificar a mensagem secreta de Annie. 102 00:05:34,880 --> 00:05:39,100 Lembre-se, Annie está dependendo de você. 103 00:05:39,100 --> 00:05:41,660 Defina seus pinos para B2. 104 00:05:41,660 --> 00:05:43,960 Aqui está a mensagem. 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 -Eu Estou em minha primeira reunião secreta. 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 está em grande esta noite voz. 115 00:05:54,570 --> 00:05:57,490 Eu poderia dizer que hoje à noite mensagem era realmente 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 Essa é uma mensagem de Annie si mesma. 119 00:06:01,580 --> 00:06:02,880 Lembre-se, não diga a ninguém. 120 00:06:02,880 --> 00:06:07,840 121 00:06:07,840 --> 00:06:11,130 >> -Cinco Segundos mais tarde, eu estou no único quarto na casa onde um menino de nove anos 122 00:06:11,130 --> 00:06:15,830 poderia sentar em privacidade e decodificar. 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 Eu fui para o próximo. 126 00:06:20,210 --> 00:06:23,300 E. A primeira palavra é "ser". 127 00:06:23,300 --> 00:06:25,880 S. Ele estava vindo mais fácil agora. 128 00:06:25,880 --> 00:06:28,400 U. 25. 129 00:06:28,400 --> 00:06:30,528 Isso é R. 130 00:06:30,528 --> 00:06:31,278 Vamos, Ralphie! 131 00:06:31,278 --> 00:06:31,861 Eu tenho que ir! 132 00:06:31,861 --> 00:06:33,182 -Vou Ser direito para baixo, Ma! 133 00:06:33,182 --> 00:06:36,038 Gee Whiz. 134 00:06:36,038 --> 00:06:42,840 T. O. "Seja certo" - certifique-se de quê? 135 00:06:42,840 --> 00:06:44,770 Qual foi Little Orphan Annie está tentando dizer? 136 00:06:44,770 --> 00:06:46,381 Certifique-se de quê? 137 00:06:46,381 --> 00:06:47,825 >> -Randy Tem que ir! 138 00:06:47,825 --> 00:06:48,866 Será que você poderia sair? 139 00:06:48,866 --> 00:06:49,783 >> -Todos Certo, mãe! 140 00:06:49,783 --> 00:06:51,786 Estarei fora para a direita! 141 00:06:51,786 --> 00:06:53,606 Eu estava ficando mais perto agora. 142 00:06:53,606 --> 00:06:55,550 A tensão era terrível. 143 00:06:55,550 --> 00:06:57,050 O que era? 144 00:06:57,050 --> 00:06:59,905 O destino do planeta pode pendurar na balança! 145 00:06:59,905 --> 00:07:01,736 >> -Ralphie, Randy tem que ir! 146 00:07:01,736 --> 00:07:05,680 >> -Vou Ser direito para fora, pelo amor de Deus! 147 00:07:05,680 --> 00:07:07,170 Quase lá! 148 00:07:07,170 --> 00:07:08,150 Meus dedos voaram. 149 00:07:08,150 --> 00:07:09,980 Minha mente era uma armadilha de aço. 150 00:07:09,980 --> 00:07:11,496 Todos os poros vibrou. 151 00:07:11,496 --> 00:07:13,268 Era quase claro! 152 00:07:13,268 --> 00:07:13,767 Sim. 153 00:07:13,767 --> 00:07:14,609 Sim. 154 00:07:14,609 --> 00:07:15,108 Sim. 155 00:07:15,108 --> 00:07:16,449 Sim. 156 00:07:16,449 --> 00:07:20,240 Certifique-se de beber o seu Ovomaltine. 157 00:07:20,240 --> 00:07:20,740 Ovomaltine? 158 00:07:20,740 --> 00:07:26,687 159 00:07:26,687 --> 00:07:27,520 Um comercial miserável? 160 00:07:27,520 --> 00:07:32,040 161 00:07:32,040 --> 00:07:34,920 Filho da puta. 162 00:07:34,920 --> 00:07:35,890 >> [FIM DE REPRODUÇÃO] 163 00:07:35,890 --> 00:07:39,650 >> ROB BOWDEN: Então é assim que Ovaltine refere-se a criptografia. 164 00:07:39,650 --> 00:07:42,290 Basicamente CS50 apenas anunciado Ovomaltine, para que pudéssemos 165 00:07:42,290 --> 00:07:44,400 ser um comercial crummy para Ovomaltine. 166 00:07:44,400 --> 00:07:44,900 Tudo certo. 167 00:07:44,900 --> 00:07:47,120 Então, agora a ciência da computação real. 168 00:07:47,120 --> 00:07:50,670 Lembre-se na segunda-feira paramos mergulho mais profundo em strings. 169 00:07:50,670 --> 00:07:52,820 Então, estávamos lidando com a cadeia "Zamyla." 170 00:07:52,820 --> 00:07:55,130 E nós estávamos reconhecendo o fato de que nós podemos tratar 171 00:07:55,130 --> 00:07:57,510 "Zamyla" como uma seqüência de caracteres. 172 00:07:57,510 --> 00:07:59,740 E lembre-se de que nós aprendemos a notação de suporte. 173 00:07:59,740 --> 00:08:01,995 Assim, se este foram armazenadas em uma string "s", depois 174 00:08:01,995 --> 00:08:05,860 se disséssemos s suporte 0, que faria indicar a capital letra 'Z' 175 00:08:05,860 --> 00:08:09,790 E se nós dissemos s suporte 1, que iria indicar a primeira letra minúscula um, 176 00:08:09,790 --> 00:08:14,220 e assim por diante até s suporte 5, o que indicaria a última a. 177 00:08:14,220 --> 00:08:17,090 >> Agora lembre-se que o comprimento dessa seqüência é 6, 178 00:08:17,090 --> 00:08:23,220 mas os índices na cadeia são 0 a 5, Z por aquele durar um. 179 00:08:23,220 --> 00:08:28,650 Portanto, este agora se encaixa em um quadro maior da memória do seu computador, o seu RAM. 180 00:08:28,650 --> 00:08:32,020 Então, o programa que algures você está executando o seu computador 181 00:08:32,020 --> 00:08:34,780 precisa lembrar Zamyla algures na memória. 182 00:08:34,780 --> 00:08:36,029 Então eu posso ter um voluntário? 183 00:08:36,029 --> 00:08:38,840 184 00:08:38,840 --> 00:08:40,181 Sim por favor. 185 00:08:40,181 --> 00:08:50,120 186 00:08:50,120 --> 00:08:51,500 E qual é seu nome? 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 Prazer em conhecê-lo, Dean. 190 00:08:54,910 --> 00:08:58,240 Então venha aqui, e nós vamos ter de desenhar 191 00:08:58,240 --> 00:09:00,740 em nosso layout agradável bacana de memória. 192 00:09:00,740 --> 00:09:05,950 Agora eu gosto de pensar de memória como uma longa faixa de bytes, 193 00:09:05,950 --> 00:09:11,090 mas apenas para fins de exibição nós vamos simplesmente esquerda para a direita, de cima para baixo. 194 00:09:11,090 --> 00:09:11,590 ok? 195 00:09:11,590 --> 00:09:22,030 >> Então eu vou lhe mostrar uma program-- Getstrings.c. 196 00:09:22,030 --> 00:09:25,760 E assim todo este programa é fazendo é solicitando quatro cordas 197 00:09:25,760 --> 00:09:28,830 do utilizador com E, em seguida, a impressão GetString 198 00:09:28,830 --> 00:09:30,950 o que quer que a primeira cadeia introduzida era. 199 00:09:30,950 --> 00:09:32,840 Nós estamos ignorando dois a quatro. 200 00:09:32,840 --> 00:09:33,610 ESTÁ BEM. 201 00:09:33,610 --> 00:09:38,210 Então aqui agora- quando I primeiro s1 pedido. 202 00:09:38,210 --> 00:09:39,740 Então você está no computador. 203 00:09:39,740 --> 00:09:41,680 E você está implementando GetString. 204 00:09:41,680 --> 00:09:46,710 Então você solicitar uma seqüência de me, e eu digo: OK, Dean. 205 00:09:46,710 --> 00:09:47,900 Dê a cadeia "Dean". 206 00:09:47,900 --> 00:09:50,300 >> Então, em algum lugar na memória você precisa se lembrar "Dean". 207 00:09:50,300 --> 00:09:52,160 Então escreva-o em memória de algum lugar. 208 00:09:52,160 --> 00:09:58,270 209 00:09:58,270 --> 00:09:59,210 Perfeito. 210 00:09:59,210 --> 00:09:59,880 ESTÁ BEM. 211 00:09:59,880 --> 00:10:01,740 Então, agora temos S2. 212 00:10:01,740 --> 00:10:03,869 E s2 vai ser um pedido para GetString. 213 00:10:03,869 --> 00:10:05,160 Então, eu estou indo para introduzir uma cadeia. 214 00:10:05,160 --> 00:10:08,720 Eu vou entrar "Hannah". 215 00:10:08,720 --> 00:10:10,586 Então digite "Hannah" em algum lugar na memória. 216 00:10:10,586 --> 00:10:18,860 217 00:10:18,860 --> 00:10:19,360 Sim. 218 00:10:19,360 --> 00:10:23,000 A-H. 219 00:10:23,000 --> 00:10:25,550 >> OK, então agora s3. 220 00:10:25,550 --> 00:10:28,380 E vai ser outro solicitar a GetString. 221 00:10:28,380 --> 00:10:37,020 E então agora digite "Maria." 222 00:10:37,020 --> 00:10:37,520 Tudo certo. 223 00:10:37,520 --> 00:10:40,980 E depois há uma última pedido para GetString, S4. 224 00:10:40,980 --> 00:10:42,580 Então, eu não sei. 225 00:10:42,580 --> 00:10:45,640 Que tal irmos com antidisestablishmentarianism. 226 00:10:45,640 --> 00:10:49,460 Assim que entrar na memória. 227 00:10:49,460 --> 00:10:50,400 Sim. 228 00:10:50,400 --> 00:10:53,970 Então, basta fazer "Rob". 229 00:10:53,970 --> 00:10:54,560 >> ESTÁ BEM. 230 00:10:54,560 --> 00:10:58,410 Então, por que agora explain-- você deixar esses espaços? 231 00:10:58,410 --> 00:11:01,340 Por que você tem isto em branco espaço aqui, aqui, e aqui em cima? 232 00:11:01,340 --> 00:11:05,170 233 00:11:05,170 --> 00:11:05,670 Sim. 234 00:11:05,670 --> 00:11:09,450 Então, observe quando eu vou imprimir s1-- por isso, se nós 235 00:11:09,450 --> 00:11:11,890 teve running "Hannah" direito ao lado de "Dean", 236 00:11:11,890 --> 00:11:14,360 como sabemos quando a cadeia "Dean" termina? 237 00:11:14,360 --> 00:11:19,470 Então, a impressão do s1 corda pode ter apenas impresso "DeanHannahMariaRob" 238 00:11:19,470 --> 00:11:22,720 Se ele não tem qualquer indício de quando "Dean", na verdade, termina. 239 00:11:22,720 --> 00:11:23,240 >> Tudo certo. 240 00:11:23,240 --> 00:11:27,650 Assim, em memória a maneira que nós, na verdade, representa esse final de uma string 241 00:11:27,650 --> 00:11:29,940 É com barra invertida zero. 242 00:11:29,940 --> 00:11:32,620 Portanto, este espaço é exatamente o que queríamos. 243 00:11:32,620 --> 00:11:34,040 Deve ser uma barra invertida zero. 244 00:11:34,040 --> 00:11:37,690 Esta será uma barra invertida zero, e esta será uma barra invertida zero. 245 00:11:37,690 --> 00:11:41,585 E você pode ter um prêmio fabuloso por ser um voluntário perfeito. 246 00:11:41,585 --> 00:11:44,910 247 00:11:44,910 --> 00:11:45,860 Pegue uma bola de stress! 248 00:11:45,860 --> 00:11:49,040 249 00:11:49,040 --> 00:11:49,700 >> ESTÁ BEM. 250 00:11:49,700 --> 00:11:54,420 Portanto, este caractere de barra invertida zero é como podemos indicar o fim de uma seqüência de caracteres. 251 00:11:54,420 --> 00:11:57,120 É como quando um determinado programa quer imprimir uma seqüência de caracteres, 252 00:11:57,120 --> 00:11:59,760 é how-- lembro de nós aprendemos a função strlen na semana passada? 253 00:11:59,760 --> 00:12:00,940 Comprimento da corda? 254 00:12:00,940 --> 00:12:03,770 É como comprimento da corda é capaz de determinar quanto tempo uma string é. 255 00:12:03,770 --> 00:12:05,810 Ele apenas continua a iteração ao longo dos personagens 256 00:12:05,810 --> 00:12:08,217 até encontrar o caractere de barra invertida zero. 257 00:12:08,217 --> 00:12:11,050 Assim, o que é importante perceber sobre o carácter barra invertida de zero 258 00:12:11,050 --> 00:12:14,950 é que é representado por todos os zeros em bits. 259 00:12:14,950 --> 00:12:18,980 Então, observe que este é distinta desde o zero. 260 00:12:18,980 --> 00:12:23,010 Assim, o carácter zero, se você se lembra no exemplo que ele deu no final 261 00:12:23,010 --> 00:12:27,360 de conferência onde os personagens mapear a-- como mapas maiúsculas de A a 65. 262 00:12:27,360 --> 00:12:29,130 Minúsculas uma mapas para 97. 263 00:12:29,130 --> 00:12:30,890 B minúsculas seria 98. 264 00:12:30,890 --> 00:12:35,220 Assim, o número 0 mapas para-- Eu não fazer sei fora do topo da minha cabeça. 265 00:12:35,220 --> 00:12:36,400 44 ou 45. 266 00:12:36,400 --> 00:12:37,890 Em algum lugar na região. 267 00:12:37,890 --> 00:12:40,850 >> Assim, o caractere 0 é um número real. 268 00:12:40,850 --> 00:12:44,350 Mas de zero barra invertida mapas para todos os bits zero. 269 00:12:44,350 --> 00:12:46,380 Portanto, há uma distinção entre barra invertida zero, 270 00:12:46,380 --> 00:12:48,450 que chamaremos o terminador nulo. 271 00:12:48,450 --> 00:12:53,210 Há uma distinção entre barra invertida zero eo caráter zero. 272 00:12:53,210 --> 00:12:54,350 >> Tudo certo. 273 00:12:54,350 --> 00:12:57,520 Então, falando um pouco mais sobre strings. 274 00:12:57,520 --> 00:13:01,470 Então nós vemos aqui é assim seria colocado para fora na memória. 275 00:13:01,470 --> 00:13:07,940 Então, essa idéia de cadeias como uma seqüência de modo que o computador de caráteres oficial 276 00:13:07,940 --> 00:13:10,750 sciency prazo para a sequência é uma matriz. 277 00:13:10,750 --> 00:13:13,790 Então, nós chamaríamos uma string um conjunto de caracteres. 278 00:13:13,790 --> 00:13:17,770 E na verdade existem outros dados tipos que podemos fazer matrizes de fora. 279 00:13:17,770 --> 00:13:19,975 >> Então, para motivar isso, olhar um exemplo. 280 00:13:19,975 --> 00:13:22,810 281 00:13:22,810 --> 00:13:29,812 Vamos chamá-lo eu vou ages0.c copie e cole o nosso modelo. 282 00:13:29,812 --> 00:13:32,470 283 00:13:32,470 --> 00:13:33,410 ESTÁ BEM. 284 00:13:33,410 --> 00:13:39,378 Portanto, neste programa que nós quero fazer é pegar a idade 285 00:13:39,378 --> 00:13:45,160 de três alunos do curso. 286 00:13:45,160 --> 00:13:49,240 Então, nós sabemos o int age-- e agora eu vou dizer 0. 287 00:13:49,240 --> 00:13:53,140 Então você pode querer dizer idade1, mas para fins veremos muito em breve, 288 00:13:53,140 --> 00:13:57,187 Eu vou dizer int age0 igual GetInt. 289 00:13:57,187 --> 00:13:59,270 Assim, a mesma chamada para GetInt que temos vindo a utilizar I 290 00:13:59,270 --> 00:14:01,561 não acontecer de ser alertando dizendo: "dá-me a idade." 291 00:14:01,561 --> 00:14:03,120 Mas, assim o solicite. 292 00:14:03,120 --> 00:14:06,510 >> E idade1 igual GetInt. 293 00:14:06,510 --> 00:14:09,600 E int idade2 igual GetInt. 294 00:14:09,600 --> 00:14:14,070 Então, novamente, três estudantes, mas finalmente, os índices variáveis 295 00:14:14,070 --> 00:14:16,890 são age0 através de idade2. 296 00:14:16,890 --> 00:14:17,550 ESTÁ BEM. 297 00:14:17,550 --> 00:14:23,960 Portanto, este programa vai fazer o que for queremos com age0, idade1, e idade2, 298 00:14:23,960 --> 00:14:27,670 mas este programa, em última análise trabalha para três estudantes. 299 00:14:27,670 --> 00:14:28,380 >> ESTÁ BEM. 300 00:14:28,380 --> 00:14:32,110 Então agora o que se eu quiser quatro estudantes? 301 00:14:32,110 --> 00:14:36,000 Bem, eu vou ter que voltar no meu código, alterar o comentário, 302 00:14:36,000 --> 00:14:39,840 e agora temos um int idade3 igual GetInt. 303 00:14:39,840 --> 00:14:40,610 ESTÁ BEM. 304 00:14:40,610 --> 00:14:43,660 Então, quem vê o problema aqui? 305 00:14:43,660 --> 00:14:47,310 Qual é o problema com este tipo de configuração? 306 00:14:47,310 --> 00:14:47,810 Sim. 307 00:14:47,810 --> 00:14:53,110 308 00:14:53,110 --> 00:14:53,610 Sim. 309 00:14:53,610 --> 00:14:56,360 Então, nós estamos criando uma variável para cada aluno. 310 00:14:56,360 --> 00:15:00,140 Agora que funciona, mas em última análise, o que se eu agora 311 00:15:00,140 --> 00:15:06,500 dizer: "Eu quero pegar a idade de oito estudantes ou 16 alunos 312 00:15:06,500 --> 00:15:11,340 ou os porém muitos estudantes de as centenas de estudantes em CS50 313 00:15:11,340 --> 00:15:16,750 ou os milhares de estudantes no campus ou os bilhões de pessoas no mundo? 314 00:15:16,750 --> 00:15:19,130 Então, em última análise, isso não é sustentável. 315 00:15:19,130 --> 00:15:21,990 Toda vez que você vê a si mesmo copiando e colar o código como este, 316 00:15:21,990 --> 00:15:25,050 você deve geralmente se sentem que há uma maneira melhor. 317 00:15:25,050 --> 00:15:31,290 >> Portanto, este é o lugar onde nós introduzimos uma declaração de matriz. 318 00:15:31,290 --> 00:15:34,564 Então, quando você declarar uma matriz, isto é o que o formato geral 319 00:15:34,564 --> 00:15:35,480 está indo olhar como. 320 00:15:35,480 --> 00:15:36,664 Nós estamos indo para dizer o tipo. 321 00:15:36,664 --> 00:15:38,830 e, em seguida, vamos dar o nome dessa matriz, 322 00:15:38,830 --> 00:15:41,150 assim como nós definir qualquer variável dada. 323 00:15:41,150 --> 00:15:43,980 E então, finalmente, nós estamos usando esta notação suporte novamente 324 00:15:43,980 --> 00:15:47,480 mas num contexto diferente como estávamos a usá-lo mais cedo. 325 00:15:47,480 --> 00:15:51,860 >> Então, aqui isso parece um normal, declaração da variável que temos visto. 326 00:15:51,860 --> 00:15:54,890 Então nós vimos int x-e-vírgula antes. 327 00:15:54,890 --> 00:16:00,020 Bem, agora podemos ver algo como int x 5 suportes. 328 00:16:00,020 --> 00:16:04,020 E colocar essa idéia em o GetInt programa que have-- 329 00:16:04,020 --> 00:16:08,850 para que possamos implementar este da mesma forma. 330 00:16:08,850 --> 00:16:13,630 >> Vamos dizer que em CS nós tendemos a usar n como o número de algo. 331 00:16:13,630 --> 00:16:16,150 Então aqui nós vamos armazenar quatro estudantes. 332 00:16:16,150 --> 00:16:25,960 E agora podemos dizer idade int suporte não n-- bastante obtê-lo yet-- 333 00:16:25,960 --> 00:16:32,210 para declarar uma matriz de quatro alunos. 334 00:16:32,210 --> 00:16:38,050 Então, como isso irá olhar em memória será semelhante a esta. 335 00:16:38,050 --> 00:16:39,570 Desmarque esta. 336 00:16:39,570 --> 00:16:46,606 E nós vamos ter um lugar em memory-- eu vou colocar isso lá em cima. 337 00:16:46,606 --> 00:16:52,690 338 00:16:52,690 --> 00:16:53,808 >> Assim, em algum lugar na memória. 339 00:16:53,808 --> 00:16:58,760 340 00:16:58,760 --> 00:16:59,727 Um dois três quatro. 341 00:16:59,727 --> 00:17:03,383 342 00:17:03,383 --> 00:17:09,849 Temos quatro inteiros em uma fileira para este conjunto de quatro números inteiros. 343 00:17:09,849 --> 00:17:13,820 Assim, actualmente, o que é a tamanho de uma destas caixas? 344 00:17:13,820 --> 00:17:17,190 345 00:17:17,190 --> 00:17:17,690 Sim. 346 00:17:17,690 --> 00:17:18,390 É quatro bytes. 347 00:17:18,390 --> 00:17:19,690 É 32 bits. 348 00:17:19,690 --> 00:17:22,310 Então, agora isso é diferente a partir da matriz que nós 349 00:17:22,310 --> 00:17:24,020 vimos anteriormente, a matriz de caracteres. 350 00:17:24,020 --> 00:17:28,540 Em uma seqüência de cada caixa era apenas um byte, porque um personagem é apenas um byte. 351 00:17:28,540 --> 00:17:32,170 Mas, com uma matriz de números inteiros, cada caixa tem que ser quatro bytes em ordem 352 00:17:32,170 --> 00:17:34,060 para encaixar um número inteiro inteiro. 353 00:17:34,060 --> 00:17:37,197 Então é isso que uma matriz de quatro ints seria semelhante. 354 00:17:37,197 --> 00:17:40,510 355 00:17:40,510 --> 00:17:43,870 >> E depois voltar para o código. 356 00:17:43,870 --> 00:17:47,460 Agora queremos realmente loja inteiros para essa matriz. 357 00:17:47,460 --> 00:17:53,470 Então, agora este é um muito, muito, muito padrão comum que, em algum momento 358 00:17:53,470 --> 00:17:54,680 tornar-se a memória muscular. 359 00:17:54,680 --> 00:17:56,710 Então int i é igual a 0. 360 00:17:56,710 --> 00:17:57,940 i menos de n. 361 00:17:57,940 --> 00:18:01,850 i plus plus. 362 00:18:01,850 --> 00:18:05,790 Faixa etária i é igual a GetInt. 363 00:18:05,790 --> 00:18:15,100 >> Portanto, este loop for, este formato, você deve ficar muito acostumado. 364 00:18:15,100 --> 00:18:20,010 Portanto, esta é geralmente a forma como vamos iterar sobre praticamente qualquer matriz. 365 00:18:20,010 --> 00:18:23,690 Agora, observe este tipo de explica por que, desde o início 366 00:18:23,690 --> 00:18:29,870 nós não temos para loops indo para int i é igual a 1, i menor ou igual a 10. 367 00:18:29,870 --> 00:18:34,200 A razão é que a partir de de zero faz bem esse trabalho com arrays. 368 00:18:34,200 --> 00:18:36,270 Então matrizes são zero indexado. 369 00:18:36,270 --> 00:18:40,360 Se essa matriz é de comprimento 4, os índices são de 0 a 3. 370 00:18:40,360 --> 00:18:42,880 >> Então, através do primeiro iteração deste laço for 371 00:18:42,880 --> 00:18:49,930 vamos estar definindo idade 0 suporte igual a uma chamada para GetInt. 372 00:18:49,930 --> 00:18:52,440 Então o que me aconteceu para entrar no teclado. 373 00:18:52,440 --> 00:18:56,970 Na segunda passagem, nós somos definindo idade1 igual a GetInt. 374 00:18:56,970 --> 00:18:58,230 Terceira passagem, idade2. 375 00:18:58,230 --> 00:18:59,880 Idade3 passe final. 376 00:18:59,880 --> 00:19:05,750 Portanto, se na primeira passagem do loop Eu digitar o número 4 no teclado, 377 00:19:05,750 --> 00:19:07,740 então vamos inserir um 4 aqui. 378 00:19:07,740 --> 00:19:11,470 Se na segunda passagem entro 50, nós vamos colocar um 50 aqui. 379 00:19:11,470 --> 00:19:15,180 Na terceira passagem eu poderia digite 1 negativo, negativo 1, 380 00:19:15,180 --> 00:19:21,810 e, finalmente, se eu entrar e 0-- Agora, lembre-se que este foi o índice de três. 381 00:19:21,810 --> 00:19:25,350 >> Depois que nós loop de volta, eu é vai ser incrementado para 4. 382 00:19:25,350 --> 00:19:27,770 Já não é menos do que n, o qual é 4. 383 00:19:27,770 --> 00:19:29,840 E nós sair do loop. 384 00:19:29,840 --> 00:19:32,578 Então, o que estaria errado com isso? 385 00:19:32,578 --> 00:19:38,140 386 00:19:38,140 --> 00:19:38,729 [Inaudível]? 387 00:19:38,729 --> 00:19:39,604 AUDIÊNCIA: [inaudível] 388 00:19:39,604 --> 00:19:45,880 389 00:19:45,880 --> 00:19:46,400 >> Sim. 390 00:19:46,400 --> 00:19:51,550 Assim, a matriz tem apenas quatro locais, o que significa que os índices de 0 a 3. 391 00:19:51,550 --> 00:19:55,630 Portanto, se esse fosse o caso, eu o faria assumir o valor de 4 em algum ponto. 392 00:19:55,630 --> 00:20:00,910 faixa etária 4 será a criação aconteça o que acontecer a ser mais aqui 393 00:20:00,910 --> 00:20:02,920 o que eu tenho a dizer, entrar 6. 394 00:20:02,920 --> 00:20:05,010 Isso vai ser a criação dessa a 6. 395 00:20:05,010 --> 00:20:06,560 >> Mas nós não sabemos o que está por aqui. 396 00:20:06,560 --> 00:20:08,836 Esta não é a memória que tivemos acesso. 397 00:20:08,836 --> 00:20:10,710 Então, se você se lembrar de a palestra anterior, 398 00:20:10,710 --> 00:20:14,350 ele estava imprimindo valores de Zamyla e em algum momento ele bateu esta segmentação 399 00:20:14,350 --> 00:20:17,990 falha. Então, provavelmente você vai estar vendo muitas falhas de segmentação como você 400 00:20:17,990 --> 00:20:20,530 implementar alguns dos conjuntos de problemas. 401 00:20:20,530 --> 00:20:24,950 Mas esta é uma das maneiras pelas quais você pode encontrar uma segmentação 402 00:20:24,950 --> 00:20:28,540 falha, quando você começar a acessar memória de maneiras que você não deve ser. 403 00:20:28,540 --> 00:20:34,117 Por isso, não tem acesso a este local e este é um bug. 404 00:20:34,117 --> 00:20:37,760 405 00:20:37,760 --> 00:20:40,190 >> Portanto, este é melhor. 406 00:20:40,190 --> 00:20:45,820 Agora, ainda há um pequeno problema com este código. 407 00:20:45,820 --> 00:20:50,720 E isso é basicamente que nós somos ainda preso em quatro alunos. 408 00:20:50,720 --> 00:20:52,940 Agora, se eu quiser usar oito estudantes, OK. 409 00:20:52,940 --> 00:20:54,350 Não é um grande negócio. 410 00:20:54,350 --> 00:20:58,120 Eu posso entrar, alterar a comentar e altere n. 411 00:20:58,120 --> 00:20:59,760 Agora isso vai funcionar com oito alunos. 412 00:20:59,760 --> 00:21:02,190 Se eu compilar e executar este isso, ele vai mostrar me-- 413 00:21:02,190 --> 00:21:07,870 ele irá solicitar inteiros para oito estudantes e ele vai funcionar. 414 00:21:07,870 --> 00:21:11,850 Mas é menos do que ideal para precisar recompilar o programa de cada vez 415 00:21:11,850 --> 00:21:15,960 Eu quero mudar o número de alunos que eu quero entrar para a idade. 416 00:21:15,960 --> 00:21:22,990 >> Assim, o melhoramento final sobre este, como veremos aqui-- estamos 417 00:21:22,990 --> 00:21:26,177 vai solicitar o número de pessoas. 418 00:21:26,177 --> 00:21:28,010 Aqui nós temos um número de pessoas nos quartos 419 00:21:28,010 --> 00:21:29,880 ou quaisquer idades de pessoas na sala. 420 00:21:29,880 --> 00:21:33,300 Mas nós estamos indo para solicitar o número de pessoas na sala do usuário. 421 00:21:33,300 --> 00:21:36,171 Portanto, este é exatamente o mesmo do-while loop que nós vimos antes. 422 00:21:36,171 --> 00:21:37,920 É exatamente o mesmo do-while loop que você 423 00:21:37,920 --> 00:21:40,050 pode ser implementando no set problema. 424 00:21:40,050 --> 00:21:43,102 Então, enquanto eles são entrando em uma n inferior a 1, 425 00:21:43,102 --> 00:21:45,310 por isso não tem que ser de pelo menos uma pessoa no quarto. 426 00:21:45,310 --> 00:21:47,407 Enquanto eles são entrando em uma n inferior a 1, 427 00:21:47,407 --> 00:21:48,990 então vamos continuar pedindo novamente. 428 00:21:48,990 --> 00:21:50,906 Por favor, indique o número de pessoas na sala. 429 00:21:50,906 --> 00:21:53,550 Agora, uma vez que temos o número de pessoas no quarto-- 430 00:21:53,550 --> 00:21:58,020 para que eu possa entrar que não São 200 pessoas nesta sala. 431 00:21:58,020 --> 00:22:05,480 Então aqui nós estamos indo para vir e declarar uma matriz de tamanho 200. 432 00:22:05,480 --> 00:22:10,220 Estamos declarando matriz que é grande o suficiente para armazenar 200 idades. 433 00:22:10,220 --> 00:22:15,370 Vindo para baixo, é o loop que você vai ficar muito acostumado. 434 00:22:15,370 --> 00:22:19,490 Então iteração sobre essa matriz, atribuindo a cada localização 435 00:22:19,490 --> 00:22:23,020 dessa matriz um inteiro, e em seguida, em última análise, aqui estamos 436 00:22:23,020 --> 00:22:28,340 ficando apenas um exemplo de iteração sobre essa matriz, para não atribuir valores, 437 00:22:28,340 --> 00:22:30,150 mas para acessar os valores. 438 00:22:30,150 --> 00:22:33,810 >> Então aqui nós vemos que nós está dizendo, daqui a um ano, 439 00:22:33,810 --> 00:22:40,470 % i pessoa estará% i anos, onde o primeiro% i é i + 1. 440 00:22:40,470 --> 00:22:43,010 Então eu é essa variável índice. 441 00:22:43,010 --> 00:22:49,420 E o segundo% i vai ser o valor armazenado na matriz idades mais 1. 442 00:22:49,420 --> 00:22:54,217 Portanto, este mais 1 é só porque somos dizendo-- esta mais 1, as idades i mais 1. 443 00:22:54,217 --> 00:22:57,050 Este é apenas mais um porque somos dizendo, daqui a um ano a pessoa 444 00:22:57,050 --> 00:22:58,280 será esta idade. 445 00:22:58,280 --> 00:23:01,080 >> Então porque é que esta i + 1? 446 00:23:01,080 --> 00:23:04,064 Porque nós temos um plus um lá? 447 00:23:04,064 --> 00:23:04,564 Sim. 448 00:23:04,564 --> 00:23:07,410 449 00:23:07,410 --> 00:23:07,930 Sim. 450 00:23:07,930 --> 00:23:10,510 Então lembre-se de zero matrizes são indexados. 451 00:23:10,510 --> 00:23:14,840 Então, se estamos imprimindo isso para alguém para ler apenas a saída, 452 00:23:14,840 --> 00:23:19,380 então provavelmente eles querem ver algo como uma pessoa, a pessoa número um, 453 00:23:19,380 --> 00:23:21,160 será de 20 anos de idade. 454 00:23:21,160 --> 00:23:23,570 Número dois pessoa será de 15 anos de idade. 455 00:23:23,570 --> 00:23:27,420 Eles prefiro não ver pessoa número zero é de 15 anos de idade. 456 00:23:27,420 --> 00:23:36,460 >> Então, compilar esta e apenas vendo o que parece como-- criar algum espaço. 457 00:23:36,460 --> 00:23:43,560 Faça idades compila. 458 00:23:43,560 --> 00:23:45,080 Executando as idades. 459 00:23:45,080 --> 00:23:46,580 Vemos número de pessoas na sala. 460 00:23:46,580 --> 00:23:48,850 Então, eu vou dizer que há três pessoas na sala. 461 00:23:48,850 --> 00:23:54,000 Idade da pessoa número um, digamos 15, 20, 25. 462 00:23:54,000 --> 00:23:59,680 E agora eu vou dizer daqui a um ano agora eles vão ser 16, 21, 26. 463 00:23:59,680 --> 00:24:02,900 Vamos ver o que isso funciona com um que n não é igual a 3. 464 00:24:02,900 --> 00:24:07,940 Então, se eu disser número de pessoas é 5, um, dois, três, dois, um, um ano a partir de agora 465 00:24:07,940 --> 00:24:11,170 eles vão ser dois, três, quatro, três, dois anos de idade. 466 00:24:11,170 --> 00:24:16,500 Então, eu poderia apenas como facilmente se n ser 10.000. 467 00:24:16,500 --> 00:24:21,270 Agora vou ficar sentado aqui por um bom um tempo de entrar idades, mas isso funciona. 468 00:24:21,270 --> 00:24:26,000 >> Então, agora na memória em algum lugar nós tem uma matriz de tamanho 10,000, 469 00:24:26,000 --> 00:24:28,830 Então, finalmente 40.000 bytes, porque há 470 00:24:28,830 --> 00:24:31,222 quatro bytes para cada um desses números inteiros. 471 00:24:31,222 --> 00:24:33,180 Portanto, há uma série de tamanho 10.000 onde pudermos 472 00:24:33,180 --> 00:24:36,201 armazenar as idades dessas 10.000 pessoas. 473 00:24:36,201 --> 00:24:36,700 Tudo certo. 474 00:24:36,700 --> 00:24:40,070 Perguntas sobre nada disso? 475 00:24:40,070 --> 00:24:41,892 Sim. 476 00:24:41,892 --> 00:24:43,350 O que se você deu um número negativo? 477 00:24:43,350 --> 00:24:44,870 Vamos ver o que acontece. 478 00:24:44,870 --> 00:24:49,320 Assim, neste número especial case-- de pessoas na sala, um negativo. 479 00:24:49,320 --> 00:24:52,580 Rejeitou que, porque aqui nós acontecer 480 00:24:52,580 --> 00:24:57,180 para ser manusear o facto de que se n é menos de um nós vamos pedir novamente. 481 00:24:57,180 --> 00:25:01,780 Se você tentar declarar um matriz de tamanho negativo, 482 00:25:01,780 --> 00:25:03,950 que, geralmente, não funciona. 483 00:25:03,950 --> 00:25:05,570 >> Então, vamos tentar. 484 00:25:05,570 --> 00:25:08,000 Vamos ignorar o que quer valor que eles entrada para n 485 00:25:08,000 --> 00:25:10,571 e apenas dizer as idades int negativa. 486 00:25:10,571 --> 00:25:12,410 Vamos ver se ele ainda compila. 487 00:25:12,410 --> 00:25:14,100 Unknown. 488 00:25:14,100 --> 00:25:14,920 Não. 489 00:25:14,920 --> 00:25:18,280 Então as idades é declarado como um matriz com um tamanho negativo. 490 00:25:18,280 --> 00:25:22,540 Então upfront reconhece uma matriz não pode ser de tamanho negativo e rejeita. 491 00:25:22,540 --> 00:25:26,840 Agora, se nós não lidar com esse loop do-while corretamente, 492 00:25:26,840 --> 00:25:28,810 se não estivéssemos a verificação Se n for menor do que 1-- 493 00:25:28,810 --> 00:25:32,690 vamos dizer que apenas não tinha isso em tudo 494 00:25:32,690 --> 00:25:35,940 e em vez disso, basta pegar um inteiro. 495 00:25:35,940 --> 00:25:40,710 Não importa o que é inteiro, declaramos uma matriz desse tamanho. 496 00:25:40,710 --> 00:25:44,250 >> Assim, o compilador não pode possivelmente Reclamar agora. 497 00:25:44,250 --> 00:25:48,780 Se eu compilar isto-- por isso não posso reclamar, 498 00:25:48,780 --> 00:25:51,480 porque ele não pode saber que eu sou vai introduzir um número negativo, 499 00:25:51,480 --> 00:25:52,550 que pode ser inválido. 500 00:25:52,550 --> 00:25:54,633 Por tudo o que sabe, eu poderia digite um número positivo, 501 00:25:54,633 --> 00:25:56,000 que é perfeitamente válida. 502 00:25:56,000 --> 00:26:01,090 Então eu imagino se eu entrar negativo 1 pessoas na sala, falha de segmentação. 503 00:26:01,090 --> 00:26:06,040 >> Então tá. 504 00:26:06,040 --> 00:26:13,160 Então, vamos adicionar isso para trás apenas mantê-lo que era originalmente. 505 00:26:13,160 --> 00:26:15,640 Então, faça as idades. 506 00:26:15,640 --> 00:26:18,120 Agora, se eu quero tentar um negativo age-- então vamos 507 00:26:18,120 --> 00:26:19,710 dizem que há cinco pessoas na sala. 508 00:26:19,710 --> 00:26:23,180 Idade da pessoa número um é negativo 4, três pessoas 509 00:26:23,180 --> 00:26:26,500 é zero, pessoa three-- OK. 510 00:26:26,500 --> 00:26:29,850 Então, aqui, daqui a um ano, o número de pessoas uma será negativo 3 anos de idade. 511 00:26:29,850 --> 00:26:32,830 Então, provavelmente não faz sentido. 512 00:26:32,830 --> 00:26:37,220 Mas isso é apenas porque procura no código tudo que estamos fazendo 513 00:26:37,220 --> 00:26:40,260 está solicitando GetInt. 514 00:26:40,260 --> 00:26:44,110 >> Agora, se tivéssemos tido a Função GetPositiveInt 515 00:26:44,110 --> 00:26:49,690 ou que tinha simplesmente feito isso mesmo tipo de loop while lá em baixo, 516 00:26:49,690 --> 00:26:52,340 então isso iria funcionar perfeitamente bem. 517 00:26:52,340 --> 00:26:54,200 Mas, neste particular, caso, nós apenas não fazer 518 00:26:54,200 --> 00:26:57,772 acontecerá a ser lidar com valores negativos. 519 00:26:57,772 --> 00:26:59,147 Quaisquer outras perguntas sobre matrizes? 520 00:26:59,147 --> 00:27:02,290 521 00:27:02,290 --> 00:27:03,250 ESTÁ BEM. 522 00:27:03,250 --> 00:27:09,380 >> Então, nós temos visto agora arrays. 523 00:27:09,380 --> 00:27:12,500 E nós vamos precisar de usar isso por linha de comando argumentos. 524 00:27:12,500 --> 00:27:14,680 Assim, no conjunto de problemas dois-- Eu sei que muitos de vocês 525 00:27:14,680 --> 00:27:18,040 ainda pode estar trabalhando em conjunto problema um, mas dois conjunto de problemas está chegando. 526 00:27:18,040 --> 00:27:22,260 No conjunto de problemas dois, você vai precisa estar lidando com strings, arrays, 527 00:27:22,260 --> 00:27:23,950 e linha de comando argumentos. 528 00:27:23,950 --> 00:27:26,270 >> Então, quais são os argumentos da linha de comando? 529 00:27:26,270 --> 00:27:29,570 Agora, você pode ver aqui um pouco de provocação para exatamente o que está 530 00:27:29,570 --> 00:27:30,950 vai acontecer. 531 00:27:30,950 --> 00:27:32,950 Vemos int main, argc inc, suportes de corda argv. 532 00:27:32,950 --> 00:27:34,560 533 00:27:34,560 --> 00:27:38,130 Então, primeiro vamos tentar interpretar o que está tentando dizer. 534 00:27:38,130 --> 00:27:40,800 Agora ok. 535 00:27:40,800 --> 00:27:44,637 >> Assim, na linha de comando, você deve ser se acostumando com alguns desses comandos 536 00:27:44,637 --> 00:27:48,580 agora, e você provavelmente executado cd no terminal antes. 537 00:27:48,580 --> 00:27:52,100 Então, se nós dizemos cd pset1, você sabe que isso deva 538 00:27:52,100 --> 00:27:55,050 estar mudando para o diretório pset1. 539 00:27:55,050 --> 00:27:59,120 >> Agora note que você nunca escrito um programa como este antes. 540 00:27:59,120 --> 00:28:03,120 Cada programa que você escreveu, você seria executado, digamos, dot cortar Mario, 541 00:28:03,120 --> 00:28:06,779 dot cortar ganancioso, e, em seguida, pode solicitar entrada. 542 00:28:06,779 --> 00:28:08,570 Agora, isso não é o que Diretório alteração faz. 543 00:28:08,570 --> 00:28:12,770 Quando você executar cd, não dirás: qual diretório que você quer em cd? 544 00:28:12,770 --> 00:28:17,200 Em vez disso, você acabou de dizer, cd pset1, e ele só vai para o diretório pset1. 545 00:28:17,200 --> 00:28:20,430 >> Então, da mesma forma que temos outros exemplos. 546 00:28:20,430 --> 00:28:21,540 Olá fazer. 547 00:28:21,540 --> 00:28:25,760 Quando você executar o make, não dirás: qual o programa que você gostaria de fazer? 548 00:28:25,760 --> 00:28:29,620 Você acabou de dizer, no linha de comando fazem Olá. 549 00:28:29,620 --> 00:28:31,060 >> Move é outro exemplo. 550 00:28:31,060 --> 00:28:34,840 Este estamos nos movendo o mario.c arquivar até um diretório. 551 00:28:34,840 --> 00:28:38,060 Portanto, agora sabemos com este exemplo nós realmente estamos passando dois argumentos. 552 00:28:38,060 --> 00:28:42,090 Há mario.c como o primeiro argumento, e dot dot é o segundo argumento. 553 00:28:42,090 --> 00:28:46,140 E então, quando você executar o make, você ver que realmente comando longo linha-- 554 00:28:46,140 --> 00:28:50,580 que realmente longa de comando impresso na linha de comando. 555 00:28:50,580 --> 00:28:53,590 Para que este longo command-- é apenas uma pequena parte dela, 556 00:28:53,590 --> 00:28:56,090 mas agora temos três linha de comando argumentos. 557 00:28:56,090 --> 00:28:59,750 Dot traço zero, Olá, e hello.c. 558 00:28:59,750 --> 00:29:03,497 >> Então, essas são de linha de comando argumentos, argumentos 559 00:29:03,497 --> 00:29:05,580 que você está passando no linha de comando para que ele 560 00:29:05,580 --> 00:29:08,680 não tem de ser solicitado quando você executar o programa. 561 00:29:08,680 --> 00:29:13,090 Seria frustrante se quando você correu clang ele disse, "OK, 562 00:29:13,090 --> 00:29:15,630 que program-- que arquivo que você está compilando? 563 00:29:15,630 --> 00:29:17,010 Hello.c. 564 00:29:17,010 --> 00:29:19,440 O que você faria bandeiras gostaria de entrar? traço o. 565 00:29:19,440 --> 00:29:21,190 O que você gostaria o arquivo a ser chamado? 566 00:29:21,190 --> 00:29:21,690 Olá. 567 00:29:21,690 --> 00:29:25,290 Não, você só correr clang traço o Olá hello.c. 568 00:29:25,290 --> 00:29:28,820 >> Então, olhando para isso. 569 00:29:28,820 --> 00:29:32,920 Agora argc argc-- é a contagem de argumentos. 570 00:29:32,920 --> 00:29:36,620 É o número de linha de comando argumentos entrou na linha de comando. 571 00:29:36,620 --> 00:29:39,720 Bem, tecnicamente argv-- o v significa vetor, 572 00:29:39,720 --> 00:29:41,460 que basicamente significa matriz. 573 00:29:41,460 --> 00:29:42,680 Mas você pode ignorar isso. 574 00:29:42,680 --> 00:29:47,540 Argv-- temos seqüência argv, assim suportes seqüência argv. 575 00:29:47,540 --> 00:29:50,150 Portanto, esta é uma outra forma de Suportes você não tenha visto antes. 576 00:29:50,150 --> 00:29:52,300 Suporte de forma que vimos notação quando temos dito, 577 00:29:52,300 --> 00:29:53,970 como, string s é igual a Zamyla. 578 00:29:53,970 --> 00:29:56,910 s suporte 0 acessa a Z. personagem 579 00:29:56,910 --> 00:30:00,720 >> Também vimos colchetes quando dissemos int idades entre parênteses 5. 580 00:30:00,720 --> 00:30:03,160 Que declarou uma matriz de tamanho 5. 581 00:30:03,160 --> 00:30:06,280 Então aqui está uma versão do suportes que não vimos antes. 582 00:30:06,280 --> 00:30:09,630 Portanto, este tipo de corda que argv seria completamente familiarizado 583 00:30:09,630 --> 00:30:12,050 que seria apenas uma string. 584 00:30:12,050 --> 00:30:14,520 Agora, os parênteses indicam que se trata de uma matriz. 585 00:30:14,520 --> 00:30:19,920 Assim suportes seqüência argv meios argv que é uma matriz de cadeias. 586 00:30:19,920 --> 00:30:22,540 Agora tecnicamente uma string é um array de caracteres. 587 00:30:22,540 --> 00:30:26,400 Portanto, esta é agora uma matriz de uma matriz de caracteres. 588 00:30:26,400 --> 00:30:31,490 Mas é muito mais fácil pensar sobre isso como apenas uma matriz de cadeias. 589 00:30:31,490 --> 00:30:34,900 >> Então, por que os suportes pode estar vazio? 590 00:30:34,900 --> 00:30:38,170 Como, por que não podemos dizer, suporte 5, suporte n? 591 00:30:38,170 --> 00:30:40,700 592 00:30:40,700 --> 00:30:41,200 Sim. 593 00:30:41,200 --> 00:30:43,731 594 00:30:43,731 --> 00:30:44,230 Sim. 595 00:30:44,230 --> 00:30:46,396 Nós não sabemos quantas inputs lá vão ser. 596 00:30:46,396 --> 00:30:53,560 Portanto, se olharmos para o exemplo clang, dizemos clang traço o Olá hello.c. 597 00:30:53,560 --> 00:30:56,710 Neste caso em particular, não acontecer ser três argumentos de linha de comando. 598 00:30:56,710 --> 00:31:00,522 E assim o brackets-- vamos ver em um segundo que não seria três. 599 00:31:00,522 --> 00:31:01,730 É tecnicamente seria quatro. 600 00:31:01,730 --> 00:31:04,030 Mas os suportes, faríamos digamos, há três. 601 00:31:04,030 --> 00:31:08,220 Mas agora, se nós olhamos movimento mario.c ponto ponto, os colchetes 602 00:31:08,220 --> 00:31:09,760 nós gostaria de colocar duas neles. 603 00:31:09,760 --> 00:31:12,884 >> E há uma série de comandos que tem um número variável de linha de comando 604 00:31:12,884 --> 00:31:13,620 argumentos. 605 00:31:13,620 --> 00:31:17,430 Então, o que esta versão do notação de colchetes indica 606 00:31:17,430 --> 00:31:20,820 argv é que é uma matriz de cadeias. 607 00:31:20,820 --> 00:31:24,360 Mas nós não sabemos quantas cordas estão nessa matriz. 608 00:31:24,360 --> 00:31:27,090 E como nós, então sabe como muitas cordas estão na matriz? 609 00:31:27,090 --> 00:31:28,870 Esse é o ponto inteiro argc. 610 00:31:28,870 --> 00:31:32,300 argc nos diz quanto tempo é argv. 611 00:31:32,300 --> 00:31:36,500 >> Assim, a última coisa a ter em mente é que, tecnicamente, 612 00:31:36,500 --> 00:31:40,820 o próprio comando conta como um dos argumentos de linha de comando. 613 00:31:40,820 --> 00:31:45,330 Assim pset1 CD, existem dois linha de comando argumentos. 614 00:31:45,330 --> 00:31:50,260 O programa em si, cd e, em seguida a parte de argumento real dele, pset1. 615 00:31:50,260 --> 00:31:54,490 Qualquer programa que você escreveu até agora teve uma linha de comando argument-- dot 616 00:31:54,490 --> 00:31:55,320 cortar Mario. 617 00:31:55,320 --> 00:31:57,350 Esse é o único argumento de linha de comando. 618 00:31:57,350 --> 00:32:00,900 >> Então, agora olhando para clang traço o Olá hello.c. 619 00:32:00,900 --> 00:32:01,905 Então, 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 Então argc é 4. 623 00:32:08,140 --> 00:32:12,140 Clang, então argv 0 suporte é clang. 624 00:32:12,140 --> 00:32:15,630 argv suporte 1 é traço 0. 625 00:32:15,630 --> 00:32:21,870 argv suporte 2 é Olá, e argv suporte 3 é hello.c. 626 00:32:21,870 --> 00:32:26,813 Ok, então perguntas sobre este, e então nós vamos olhar para alguns exemplos programáticos. 627 00:32:26,813 --> 00:32:29,460 628 00:32:29,460 --> 00:32:30,480 >> ESTÁ BEM. 629 00:32:30,480 --> 00:32:36,260 Então, vamos dar uma olhada em hello3.c. 630 00:32:36,260 --> 00:32:41,890 Portanto, este deve ser familiar a partir de um dos primeiros exemplos de c 631 00:32:41,890 --> 00:32:45,800 tivemos onde nós gostaria apenas de dizer, Olá mundo, mas agora isso é mais geral. 632 00:32:45,800 --> 00:32:52,300 Então, aqui estamos dizendo Olá % s barra invertida n suporte argv 1. 633 00:32:52,300 --> 00:32:57,440 Notice-- assim, até este ponto, este é o que o meu arquivo de modelo tem parecia. 634 00:32:57,440 --> 00:33:01,800 Eu tinha int main (void), e então eu faria fazer alguma coisa na função principal. 635 00:33:01,800 --> 00:33:05,100 Agora, ao invés, uma vez que começar a lidar com argumentos de linha de comando, 636 00:33:05,100 --> 00:33:07,890 precisamos declarar um forma diferente de principal. 637 00:33:07,890 --> 00:33:11,930 >> Então, olhando para hello3 novamente, o principal vai 638 00:33:11,930 --> 00:33:15,990 para levar dois argumentos agora-- int argc, o número de argumentos de linha de comando, 639 00:33:15,990 --> 00:33:20,970 e argv seqüência entre parênteses, o real cordas entrou na linha de comando. 640 00:33:20,970 --> 00:33:26,560 Então, eu vou mudar isso template para refletir esse fato. 641 00:33:26,560 --> 00:33:29,060 Agora, sempre que você escreve um programa, se não o fizer 642 00:33:29,060 --> 00:33:33,720 precisa tomar nenhuma de linha de comando argumentos, então é só usar int main (void). 643 00:33:33,720 --> 00:33:37,070 Mas agora, quando você está escrevendo programas argumento de linha de comando, que 644 00:33:37,070 --> 00:33:40,350 você está indo fazer para problema definir dois-- então agora que você está executando 645 00:33:40,350 --> 00:33:42,630 programas que precisam de tomar argumentos de linha de comando, 646 00:33:42,630 --> 00:33:45,250 você precisa ter principal deste formulário. 647 00:33:45,250 --> 00:33:51,290 >> Então aqui-- este é o grande uso do argumento de linha de comando. 648 00:33:51,290 --> 00:33:54,100 Então, a impressão argv 1. 649 00:33:54,100 --> 00:33:59,180 OK então vamos compilar e executar este programa. 650 00:33:59,180 --> 00:34:02,440 Faça hello3. 651 00:34:02,440 --> 00:34:03,570 Compila. 652 00:34:03,570 --> 00:34:06,870 Dot cortar hello3. 653 00:34:06,870 --> 00:34:08,920 E vamos dizer, "Rob". 654 00:34:08,920 --> 00:34:10,760 Olá Rob. 655 00:34:10,760 --> 00:34:14,940 Se eu disser: "Olá Maria," Olá Maria. 656 00:34:14,940 --> 00:34:15,719 Ola Maria. 657 00:34:15,719 --> 00:34:18,639 Hannah ainda diz: "Olá Maria, "porque eu não sou 658 00:34:18,639 --> 00:34:21,340 fazer qualquer coisa com o nosso argv 2. 659 00:34:21,340 --> 00:34:22,590 Argv 2 agora seria "Hannah". 660 00:34:22,590 --> 00:34:25,030 Argc seria 3. 661 00:34:25,030 --> 00:34:27,735 E se eu fiz isso? 662 00:34:27,735 --> 00:34:31,980 663 00:34:31,980 --> 00:34:34,679 Então Olá nulo. 664 00:34:34,679 --> 00:34:38,760 >> Ele brevemente sobre o fato que, tecnicamente, GetString 665 00:34:38,760 --> 00:34:42,429 pode retornar nulo, mas nós vamos chegar a muito mais sobre o que realmente é nulo. 666 00:34:42,429 --> 00:34:47,449 Mas tomá-lo como uma questão de fato que não é geralmente ruim. 667 00:34:47,449 --> 00:34:50,179 Nós fizemos algo de errado se é imprimir "Olá nulo." 668 00:34:50,179 --> 00:34:52,179 E a razão que fizemos algo errado é-- bem, 669 00:34:52,179 --> 00:34:56,179 quando eu corri dot hello3 barra, argc foi de 1. 670 00:34:56,179 --> 00:34:59,680 Então isso significa que o comprimento de argv foi de 1. 671 00:34:59,680 --> 00:35:05,110 Se uma matriz é de comprimento de 1, o único índice válido é zero. 672 00:35:05,110 --> 00:35:08,550 E assim aqui argv 1 está fora a faixa deste array. 673 00:35:08,550 --> 00:35:13,410 Era semelhante a antes quando eu tentei para armazenar 6 fora da extremidade da matriz. 674 00:35:13,410 --> 00:35:18,100 Então, eu estou tentando acessar algo fora das contagens argv, 675 00:35:18,100 --> 00:35:21,340 e nós estamos ficando nulo. 676 00:35:21,340 --> 00:35:24,360 >> Então uma versão melhor de isso, uma melhoria, 677 00:35:24,360 --> 00:35:27,010 é explicitamente verificando argc. 678 00:35:27,010 --> 00:35:33,580 Então, se argc é igual a 2, isso significa que nós funcionamos algo como barra dot hello3 Rob. 679 00:35:33,580 --> 00:35:36,840 E ele irá imprimir "Olá Rob." 680 00:35:36,840 --> 00:35:39,850 Se argc não é igual 2, então ele só vai 681 00:35:39,850 --> 00:35:42,560 a ignorar o que você colocar no argumento de linha de comando 682 00:35:42,560 --> 00:35:43,960 como argumentos de linha de comando. 683 00:35:43,960 --> 00:35:47,168 Ou se você não colocar qualquer um em tudo, é só vai ignorar isso e simplesmente dizer: 684 00:35:47,168 --> 00:35:47,960 "Olá." 685 00:35:47,960 --> 00:35:51,490 >> Então, compilar isso. 686 00:35:51,490 --> 00:35:54,500 Faça hello4. 687 00:35:54,500 --> 00:35:56,790 E, correndo hello4. 688 00:35:56,790 --> 00:36:00,010 Executá-lo desta forma, o que deve ser impresso? 689 00:36:00,010 --> 00:36:01,330 "Olá." 690 00:36:01,330 --> 00:36:02,810 Olá. 691 00:36:02,810 --> 00:36:05,870 E sobre hello4 Rob? 692 00:36:05,870 --> 00:36:06,950 "Olá Rob." 693 00:36:06,950 --> 00:36:10,580 E, finalmente, Olá Rob Maria é apenas "Olá você" novamente, 694 00:36:10,580 --> 00:36:13,677 porque você realmente não entrar algo que o esperado. 695 00:36:13,677 --> 00:36:15,510 Você entrou mais nomes do que poderia segurar, 696 00:36:15,510 --> 00:36:19,500 por isso só a omissão Olá você o comportamento. 697 00:36:19,500 --> 00:36:23,040 Assim perguntas sobre isso? 698 00:36:23,040 --> 00:36:26,290 Ou argumentos de linha de comando? 699 00:36:26,290 --> 00:36:28,690 >> OK, assim que tomar uma olhada em um mais alguns exemplos de como usar 700 00:36:28,690 --> 00:36:34,230 de linha de comando arguments-- primeiro temos argv traço 1 ponto c. 701 00:36:34,230 --> 00:36:38,510 Portanto, os comentários dar o que este programa deveria estar fazendo. 702 00:36:38,510 --> 00:36:42,460 Mas note agora-- este loop for, este corresponde ao padrão exato 703 00:36:42,460 --> 00:36:43,390 Eu estava dizendo antes. 704 00:36:43,390 --> 00:36:46,240 Nós só acontecerá a ser argc usando em vez de n. 705 00:36:46,240 --> 00:36:48,880 Agora argc é realmente o n. 706 00:36:48,880 --> 00:36:51,260 É o comprimento da matriz argv. 707 00:36:51,260 --> 00:36:59,600 Então está interagindo sobre o argv matriz de printf ing cada valor de argv. 708 00:36:59,600 --> 00:37:04,730 >> Então se eu fizer isso. 709 00:37:04,730 --> 00:37:08,232 Faça argv 1. 710 00:37:08,232 --> 00:37:09,940 Ele compila. 711 00:37:09,940 --> 00:37:11,620 Dot cortar argv 1. 712 00:37:11,620 --> 00:37:15,530 Apenas correndo isto, impressões dot barra argv 1 713 00:37:15,530 --> 00:37:18,500 uma vez que essa era a única linha de comando argument-- o nome do programa. 714 00:37:18,500 --> 00:37:22,080 Haverá sempre a least-- argc não pode ser inferior a um, 715 00:37:22,080 --> 00:37:25,910 uma vez que não será sempre, pelo menos, ser o nome do programa para ser executado. 716 00:37:25,910 --> 00:37:32,040 Então argv 1 Rob irá imprimir argv 1 e, em seguida, na nova linha "Rob". 717 00:37:32,040 --> 00:37:36,350 >> Assim, na primeira iteração deste circuito, i é 0. 718 00:37:36,350 --> 00:37:39,090 Argv 0 é o nome do programa. 719 00:37:39,090 --> 00:37:40,010 Dot cortar argv 1. 720 00:37:40,010 --> 00:37:43,770 E então argv 1 é o meu primeiro argumento de linha de comando, que é Rob. 721 00:37:43,770 --> 00:37:45,920 Neste ponto, somos iguais a ARGC. 722 00:37:45,920 --> 00:37:48,210 Nós quebramos fora do circuito e estamos a fazer. 723 00:37:48,210 --> 00:37:53,940 Então, isso vai trabalhar para uma arbitrária número de argumentos de linha de comando. 724 00:37:53,940 --> 00:37:58,550 Observe que imprime argv 0, argv 1, 2 argv, argv 3, 4 argv. 725 00:37:58,550 --> 00:38:00,150 E não há argv 5. 726 00:38:00,150 --> 00:38:01,460 argc é igual a 5. 727 00:38:01,460 --> 00:38:06,960 Assim, no argc-- no i é igual a 5, nós sair do loop. 728 00:38:06,960 --> 00:38:07,950 ESTÁ BEM. 729 00:38:07,950 --> 00:38:11,315 Assim perguntas sobre que antes de nós olhar para um exemplo mais complexo? 730 00:38:11,315 --> 00:38:14,190 731 00:38:14,190 --> 00:38:16,860 >> Então argv 2. 732 00:38:16,860 --> 00:38:17,830 Tudo certo. 733 00:38:17,830 --> 00:38:20,610 Então, ainda estamos imprimindo os argumentos de linha de comando. 734 00:38:20,610 --> 00:38:23,170 Mas agora perceber que temos aninhado para um loop. 735 00:38:23,170 --> 00:38:24,670 Então o que está fazendo isso? 736 00:38:24,670 --> 00:38:28,430 Assim, o primeiro circuito está fazendo exatamente o que ele fez antes. 737 00:38:28,430 --> 00:38:30,950 Nós ainda estamos looping sobre cada argumento de linha de comando, 738 00:38:30,950 --> 00:38:34,260 mas agora esta segunda loop-- temos também vi algo assim antes. 739 00:38:34,260 --> 00:38:38,600 Quando ele estava interagindo sobre Zamyla imprimindo Z-A-H-Y-L-A. 740 00:38:38,600 --> 00:38:44,816 Portanto, este segundo ciclo para int j é igual a 0, n é igual a strlen de suporte argv i. 741 00:38:44,816 --> 00:38:49,170 >> Então, vamos primeiro pensar por as-- vamos percorrer. 742 00:38:49,170 --> 00:38:53,560 Vamos pensar o que o computador seria fazer se eu corri este programa como apenas dot 743 00:38:53,560 --> 00:38:56,030 cortar argv traço 2. 744 00:38:56,030 --> 00:39:03,590 Então, se eu corri este código, em seguida, argc vai ser igual a 1. 745 00:39:03,590 --> 00:39:07,050 E seqüência argv-- há apenas vai ser um índice em argv, 746 00:39:07,050 --> 00:39:12,370 e que vai ser igual a dot cortar argv 2-- o nome do programa. 747 00:39:12,370 --> 00:39:19,170 >> OK, então agora eu é igual a 0, i menos de 1, i plus plus para int j é igual a 0, 748 00:39:19,170 --> 00:39:23,880 n é igual a strlen de argv suporte 0, por isso, a primeira iteração deste laço. argv 749 00:39:23,880 --> 00:39:27,250 0 suporte é barra dot argv 2. 750 00:39:27,250 --> 00:39:29,320 Então, qual é o comprimento dessa corda? 751 00:39:29,320 --> 00:39:32,480 Bem, dot cortar A-R-G-V traço 2. 752 00:39:32,480 --> 00:39:35,020 Então strlen de que será 8. 753 00:39:35,020 --> 00:39:37,500 Assim j é igual a 0, n é igual a oito. 754 00:39:37,500 --> 00:39:39,530 Contanto que j é menor do que 8, J ++. 755 00:39:39,530 --> 00:39:44,080 E com isso vamos estar imprimindo um caráter único, que 756 00:39:44,080 --> 00:39:47,350 é argv suporte i j entre parênteses. 757 00:39:47,350 --> 00:39:49,826 >> Assim, a única i é zero. 758 00:39:49,826 --> 00:39:51,700 Nós ainda só tem uma argumento de linha de comando. 759 00:39:51,700 --> 00:39:53,890 Nessa primeira iteração do loop for, estamos 760 00:39:53,890 --> 00:39:56,950 vai ser a impressão argv suporte 0 0 suporte. 761 00:39:56,950 --> 00:39:58,325 E então j vai incrementar. 762 00:39:58,325 --> 00:40:01,650 E nós estamos indo para impressão argv suporte 0 suporte 1. 763 00:40:01,650 --> 00:40:04,150 E então argv suporte 0 suporte 2. 764 00:40:04,150 --> 00:40:09,030 >> Portanto, este é o nosso primeiro encontro de arrays multidimensionais. 765 00:40:09,030 --> 00:40:12,770 Lembre-se antes que eu disse que argv é tecnicamente 766 00:40:12,770 --> 00:40:15,950 uma matriz de matrizes de caracteres. 767 00:40:15,950 --> 00:40:24,360 Então, aqui, se eu disse algo como string s é igual a faixa argv i, 768 00:40:24,360 --> 00:40:29,590 e então eu disse, s suporte j, este seria realizar a mesma coisa. 769 00:40:29,590 --> 00:40:31,960 Agora, você já viu s suporte j antes. 770 00:40:31,960 --> 00:40:36,680 Isso é só acessar o j-th caráter dessa string. 771 00:40:36,680 --> 00:40:48,010 Então, com isso, nós estamos começando a j-th personagem do argv i-th. 772 00:40:48,010 --> 00:40:51,450 >> Então, o que em última análise, esta saída? 773 00:40:51,450 --> 00:40:53,210 Faça argv 2. 774 00:40:53,210 --> 00:40:54,730 Ele compila. 775 00:40:54,730 --> 00:40:56,340 Dot cortar argv 2. 776 00:40:56,340 --> 00:41:03,790 "Rob Maria Hannah," e nos dar algum espaço. 777 00:41:03,790 --> 00:41:07,050 Assim, vemos que esta é a saída dot em sua própria linha e barra 778 00:41:07,050 --> 00:41:08,920 em sua própria linha e um na sua própria linha. 779 00:41:08,920 --> 00:41:11,260 Ele está imprimindo cada caráter individual 780 00:41:11,260 --> 00:41:12,950 de cada argumento de linha de comando. 781 00:41:12,950 --> 00:41:15,960 E, em seguida, entre eles, devido a esta nova linha 782 00:41:15,960 --> 00:41:19,380 estamos imprimindo aqui em baixo, em entre eles que vai imprimir uma nova linha. 783 00:41:19,380 --> 00:41:24,540 >> Portanto, este é semelhante ao o traço argv antes 1, 784 00:41:24,540 --> 00:41:26,459 que imprimiu cada argumento de linha de comando, 785 00:41:26,459 --> 00:41:28,500 mas agora estamos imprimindo os argumentos de linha de comando 786 00:41:28,500 --> 00:41:31,950 e, em seguida, através de cada iteração caráter de cada argumento de linha de comando 787 00:41:31,950 --> 00:41:35,400 para obter esta saída. 788 00:41:35,400 --> 00:41:36,870 ok? 789 00:41:36,870 --> 00:41:40,570 Assim perguntas sobre isso? 790 00:41:40,570 --> 00:41:45,130 >> Uma coisa a notar é que de linha de comando arguments-- 791 00:41:45,130 --> 00:41:49,990 por isso eles são separados por espaços como você naturalmente esperar que eles sejam. 792 00:41:49,990 --> 00:41:53,050 Assim, uma seqüência pode ter espaços. 793 00:41:53,050 --> 00:41:57,380 Não é super importante, mas se eu queria que o argumento terceiro de linha de comando 794 00:41:57,380 --> 00:42:01,226 ter um espaço nele, então eu poderia dizer algo como isso. 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 Então, isso agora ainda só tem três de linha de comando bem arguments-- 4. 798 00:42:12,190 --> 00:42:17,620 Dot cortar argv traço 2, Rob, Maria e Hannah Bloomberg. 799 00:42:17,620 --> 00:42:18,320 ESTÁ BEM. 800 00:42:18,320 --> 00:42:19,310 Perguntas sobre este assunto? 801 00:42:19,310 --> 00:42:22,700 802 00:42:22,700 --> 00:42:24,894 >> Não há nada especial sobre o carácter de espaço. 803 00:42:24,894 --> 00:42:27,810 Ele só passa a ser que o de linha de comando trata o caractere de espaço 804 00:42:27,810 --> 00:42:29,226 como a forma como você separa cada argumento. 805 00:42:29,226 --> 00:42:32,048 806 00:42:32,048 --> 00:42:33,000 Tudo certo. 807 00:42:33,000 --> 00:42:39,950 Então, em seguida, conjunto Problem dois-- você vai ser 808 00:42:39,950 --> 00:42:43,240 olhando para criptografia de chave secreta. 809 00:42:43,240 --> 00:42:47,700 Assim, semelhante ao exemplo vimos de Uma História de Natal, 810 00:42:47,700 --> 00:42:52,840 você vai ser a implementação de algumas algoritmos que, dada uma mensagem, 811 00:42:52,840 --> 00:42:55,560 você vai ser capaz para encriptar a mensagem 812 00:42:55,560 --> 00:42:58,730 que só alguém com esse segredo chave, com aquele anel decodificador, 813 00:42:58,730 --> 00:43:01,090 deve ser capaz de decifrar. 814 00:43:01,090 --> 00:43:04,839 >> Então essa é a edição padrão. 815 00:43:04,839 --> 00:43:07,130 Você vai estar implementando duas versões diferentes. 816 00:43:07,130 --> 00:43:09,620 Se acontecer de você dar uma olhada em que o hacker Professional-- agora, 817 00:43:09,620 --> 00:43:12,600 vamos dar você uma seqüência como esta, 818 00:43:12,600 --> 00:43:15,240 o que representa uma senha criptografada. 819 00:43:15,240 --> 00:43:19,990 Assim, seu objetivo é descobrir o que a senha é descriptografado. 820 00:43:19,990 --> 00:43:26,950 Agora, este é realmente como senhas são armazenados em muitos computadores, 821 00:43:26,950 --> 00:43:31,290 e ele só armazena esta seqüência aleatória de caracteres. 822 00:43:31,290 --> 00:43:34,440 Você tem que descobrir como chegar a partir desta seqüência aleatória de caracteres 823 00:43:34,440 --> 00:43:36,140 ao que a senha original. 824 00:43:36,140 --> 00:43:39,060 825 00:43:39,060 --> 00:43:43,290 >> E, finalmente, após este conjunto de problemas, você deve 826 00:43:43,290 --> 00:43:46,100 ser capaz de compreender o que isso significa. 827 00:43:46,100 --> 00:43:51,650 Então, você vai aprender como descriptografar esse tipo de seqüência aleatória. 828 00:43:51,650 --> 00:43:56,390 Da mesma forma, se você se lembrar de semana 0, você pode ter visto este URL. 829 00:43:56,390 --> 00:44:00,210 E você deve ser capaz de decifrar isso eventualmente. 830 00:44:00,210 --> 00:44:04,810 Você pode não ser feliz quando você decifrá-lo e clique no link. 831 00:44:04,810 --> 00:44:05,700 Tudo certo. 832 00:44:05,700 --> 00:44:06,591 É isso por hoje. 833 00:44:06,591 --> 00:44:12,095 Então, vê-lo na próxima semana! 834 00:44:12,095 --> 00:44:18,315 >> [MÚSICA ELETRÔNICA DE JOGO] 835 00:44:18,315 --> 00:47:15,619