>> [Música tocando]
DAVID MALAN: Tudo bem.
Este é CS50, e este é o fim de semana dois.
Eu sinto muito Eu não poderia estar lá com todos vocês hoje,
mas você está em muito boas mãos.
Permita-me apresentar Própria Rob Bowden do CS50.
ROB BOWDEN: E, claro, em seguida, nós temos que fazer o divertimento do fato
que ele nos enviou um verticais vídeo e mostrar isso.
>> [REPRODUÇÃO DE VÍDEO]
>> [Música tocando]
>> PASSO A PASSO []
>> -Este Vídeo não fez tem que olhar dessa forma.
Ele poderia ter sido evitada.
Diga não aos vídeos verticais.
>> Vídeos -Vertical acontecer quando você segurar a câmera na direção errada.
O vídeo vai acabar acima de olhar como porcaria.
>> - [GRUNHIDO]
>> -Há Mais e mais pessoas viciadas para fazer vídeos verticais a cada dia.
Não é rachar ou nada, mas ainda é muito ruim.
Existem dois tipos diferentes de pessoas que estão aflitos com VVS.
O primeiro grupo trata o vídeos de atirar como imagens.
Elas não significam nenhum dano.
Eles simplesmente não entendem que enquanto você pode girar uma imagem,
você não pode realmente transformar um vídeo.
>> [CRASH]
>> - [MACACO SOUNDS]
>> -O Outro grupo é de pessoas que não dar uma [BLEEP].
>> Síndrome de Vídeo -Vertical é perigoso.
As imagens de vídeo têm sempre foi horizontal.
As televisões estão horizontal.
Os ecrãs de computador são horizontais.
Os olhos das pessoas são horizontais.
Nós não são construídos para assistir a vídeos verticais.
>> -Eu Amo vídeos verticais.
>> -Ninguém Se preocupa com você.
>> -Se Deste problema não for controlada, você também
começará mostrando quatro vídeos de uma vez só para economizar largura de banda.
>> Vídeos verticais -Letterboxed faria ser do tamanho de um selo postal.
>> -E Ele vai se espalhar por toda parte.
Telas de cinema têm sempre foi horizontal.
Se verticais vídeos tornam-se aceitos, cinemas
terá que ser alto e magro.
>> -E Todas as salas de cinema faria tem que se demolida e reconstruída.
E no momento em que foram reconstruídas, Mila Kunis seria velho e feio.
>> -birds Irá colidir com eles e morrer.
>> -Vamos Tudo ficar duro pescoços de olhar para cima.
>> -E Ninguém vai sentar-se no a linha da frente mais uma vez.
>> -George Lucas irá re-lançamento Estrela Guerras novamente-- a edição magro.
>> -Eu Nunca foi realmente capaz de dizer a história que eu queria contar.
Esta foi uma grande oportunidade para mim experimentar com uma nova tecnologia.
>> -Você é um idiota.
>> -Toda Vez que um dispositivo móvel é usado para gravar vídeo, a tentação é lá.
Apenas diga não.
Diga não ao George Lucas.
Diga não ao velho Mila Kunis.
Diga não aos vídeos verticais.
>> -E Se você vê alguém fazendo isso, dizem, "você não está filmando a manequim certo!"
>> [Música tocando]
>> [FIM DE REPRODUÇÃO]
>> [Aplausos]
>> [SAÍDA DE ÁUDIO]
ROB BOWDEN: --simple forma de criptografia,
que é, basicamente, a criptografia e decodificação de mensagens secretas.
Portanto, temos aqui um brinquedo muito simples.
E a idéia é o anel externo gira em torno do anel interno.
E você pode ver, talvez se eu aumentar em, isso-- é difícil de ver.
Mas, assim como, o número 1-- bem, isso mudou.
>> O número 1 mapeia para a letra X, número 2 mapas para a letra
J. incrivelmente difícil não saltar para a frente.
Carta 2 mapeia para J. Número 3 mapeia para D. Assim,
com este anel que você pode dar- alguém uma mensagem 1, 2, 3.
Por alguma razão você quero dizer-lhes XJD.
Mas você pode dar-lhes alguma mensagem de números,
e contanto que eles têm este anel, eles pode decifrar o que você está tentando dizer.
>> Então você pode ter visto este em particular exemplo de criptografia
antes se em torno da época do Natal você assistiu Uma História de Natal.
Se você nunca viu isso antes, então apenas
ligar TBS em literalmente qualquer momento na véspera de Natal,
porque eles simplesmente mostrá-lo de volta para trás a volta para trás para fazer o dia inteiro.
E o vídeo é relevante esta.
[REPRODUÇÃO DE VÍDEO]
-Seja Sabe-a toda a gente que Ralph Parker é por este meio
nomeado membro da Pequena Orphan Annie Círculo Secreto
e tem direito a todas as honras e benefícios ocorrendo ao mesmo.
Assinado Little Orphan Annie.
Referendado Pierre Andre em tinta!
Honras e benefícios já com a idade de nove!
>> [GRITAR DE RADIO]
-Vamos.
Vamos começar com ele.
Eu não preciso de todo esse jazz sobre contrabandistas e piratas.
-listen Amanhã à noite com a aventura final
do Navio de pirata preto.
Agora, é hora de Mensagem secreta de Annie
para vocês, membros da Secret Circle.
Lembre-se dos miúdos, apenas os membros do Círculo Secreto de Annie
pode decodificar a mensagem secreta de Annie.
Lembre-se, Annie está dependendo de você.
Defina seus pinos para B2.
Aqui está a mensagem.
12.
11.
2.
-Eu Estou em minha primeira reunião secreta.
>> -25.
14.
11.
18.
16.
>> Oh, Pierre está em grande esta noite voz.
Eu poderia dizer que hoje à noite mensagem era realmente importante.
-3.
25.
Essa é uma mensagem de Annie si mesma.
Lembre-se, não diga a ninguém.
>> -Cinco Segundos mais tarde, eu estou no único quarto na casa onde um menino de nove anos
poderia sentar em privacidade e decodificar.
Aha!
B!
Eu fui para o próximo.
E. A primeira palavra é "ser".
S. Ele estava vindo mais fácil agora.
U. 25.
Isso é R.
Vamos, Ralphie!
Eu tenho que ir!
-Vou Ser direito para baixo, Ma!
Gee Whiz.
T. O. "Seja certo" - certifique-se de quê?
Qual foi Little Orphan Annie está tentando dizer?
Certifique-se de quê?
>> -Randy Tem que ir!
Será que você poderia sair?
>> -Todos Certo, mãe!
Estarei fora para a direita!
Eu estava ficando mais perto agora.
A tensão era terrível.
O que era?
O destino do planeta pode pendurar na balança!
>> -Ralphie, Randy tem que ir!
>> -Vou Ser direito para fora, pelo amor de Deus!
Quase lá!
Meus dedos voaram.
Minha mente era uma armadilha de aço.
Todos os poros vibrou.
Era quase claro!
Sim.
Certifique-se de beber o seu Ovomaltine.
Ovomaltine?
Um comercial miserável?
Filho da puta.
>> [FIM DE REPRODUÇÃO]
>> ROB BOWDEN: Então é assim que Ovaltine refere-se a criptografia.
Basicamente CS50 apenas anunciado Ovomaltine, para que pudéssemos
ser um comercial crummy para Ovomaltine.
Tudo certo.
Então, agora a ciência da computação real.
Lembre-se na segunda-feira paramos mergulho mais profundo em strings.
Então, estávamos lidando com a cadeia "Zamyla."
E nós estávamos reconhecendo o fato de que nós podemos tratar
"Zamyla" como uma seqüência de caracteres.
E lembre-se de que nós aprendemos a notação de suporte.
Assim, se este foram armazenadas em uma string "s", depois
se disséssemos s suporte 0, que faria indicar a capital letra 'Z'
E se nós dissemos s suporte 1, que iria indicar a primeira letra minúscula um,
e assim por diante até s suporte 5, o que indicaria a última a.
>> Agora lembre-se que o comprimento dessa seqüência é 6,
mas os índices na cadeia são 0 a 5, Z por aquele durar um.
Portanto, este agora se encaixa em um quadro maior da memória do seu computador, o seu RAM.
Então, o programa que algures você está executando o seu computador
precisa lembrar Zamyla algures na memória.
Então eu posso ter um voluntário?
Sim por favor.
E qual é seu nome?
>> DEAN: Dean.
>> ROB BOWDEN: Dean?
Prazer em conhecê-lo, Dean.
Então venha aqui, e nós vamos ter de desenhar
em nosso layout agradável bacana de memória.
Agora eu gosto de pensar de memória como uma longa faixa de bytes,
mas apenas para fins de exibição nós vamos simplesmente esquerda para a direita, de cima para baixo.
ok?
>> Então eu vou lhe mostrar uma program-- Getstrings.c.
E assim todo este programa é fazendo é solicitando quatro cordas
do utilizador com E, em seguida, a impressão GetString
o que quer que a primeira cadeia introduzida era.
Nós estamos ignorando dois a quatro.
ESTÁ BEM.
Então aqui agora- quando I primeiro s1 pedido.
Então você está no computador.
E você está implementando GetString.
Então você solicitar uma seqüência de me, e eu digo: OK, Dean.
Dê a cadeia "Dean".
>> Então, em algum lugar na memória você precisa se lembrar "Dean".
Então escreva-o em memória de algum lugar.
Perfeito.
ESTÁ BEM.
Então, agora temos S2.
E s2 vai ser um pedido para GetString.
Então, eu estou indo para introduzir uma cadeia.
Eu vou entrar "Hannah".
Então digite "Hannah" em algum lugar na memória.
Sim.
A-H.
>> OK, então agora s3.
E vai ser outro solicitar a GetString.
E então agora digite "Maria."
Tudo certo.
E depois há uma última pedido para GetString, S4.
Então, eu não sei.
Que tal irmos com antidisestablishmentarianism.
Assim que entrar na memória.
Sim.
Então, basta fazer "Rob".
>> ESTÁ BEM.
Então, por que agora explain-- você deixar esses espaços?
Por que você tem isto em branco espaço aqui, aqui, e aqui em cima?
Sim.
Então, observe quando eu vou imprimir s1-- por isso, se nós
teve running "Hannah" direito ao lado de "Dean",
como sabemos quando a cadeia "Dean" termina?
Então, a impressão do s1 corda pode ter apenas impresso "DeanHannahMariaRob"
Se ele não tem qualquer indício de quando "Dean", na verdade, termina.
>> Tudo certo.
Assim, em memória a maneira que nós, na verdade, representa esse final de uma string
É com barra invertida zero.
Portanto, este espaço é exatamente o que queríamos.
Deve ser uma barra invertida zero.
Esta será uma barra invertida zero, e esta será uma barra invertida zero.
E você pode ter um prêmio fabuloso por ser um voluntário perfeito.
Pegue uma bola de stress!
>> ESTÁ BEM.
Portanto, este caractere de barra invertida zero é como podemos indicar o fim de uma seqüência de caracteres.
É como quando um determinado programa quer imprimir uma seqüência de caracteres,
é how-- lembro de nós aprendemos a função strlen na semana passada?
Comprimento da corda?
É como comprimento da corda é capaz de determinar quanto tempo uma string é.
Ele apenas continua a iteração ao longo dos personagens
até encontrar o caractere de barra invertida zero.
Assim, o que é importante perceber sobre o carácter barra invertida de zero
é que é representado por todos os zeros em bits.
Então, observe que este é distinta desde o zero.
Assim, o carácter zero, se você se lembra no exemplo que ele deu no final
de conferência onde os personagens mapear a-- como mapas maiúsculas de A a 65.
Minúsculas uma mapas para 97.
B minúsculas seria 98.
Assim, o número 0 mapas para-- Eu não fazer sei fora do topo da minha cabeça.
44 ou 45.
Em algum lugar na região.
>> Assim, o caractere 0 é um número real.
Mas de zero barra invertida mapas para todos os bits zero.
Portanto, há uma distinção entre barra invertida zero,
que chamaremos o terminador nulo.
Há uma distinção entre barra invertida zero eo caráter zero.
>> Tudo certo.
Então, falando um pouco mais sobre strings.
Então nós vemos aqui é assim seria colocado para fora na memória.
Então, essa idéia de cadeias como uma seqüência de modo que o computador de caráteres oficial
sciency prazo para a sequência é uma matriz.
Então, nós chamaríamos uma string um conjunto de caracteres.
E na verdade existem outros dados tipos que podemos fazer matrizes de fora.
>> Então, para motivar isso, olhar um exemplo.
Vamos chamá-lo eu vou ages0.c copie e cole o nosso modelo.
ESTÁ BEM.
Portanto, neste programa que nós quero fazer é pegar a idade
de três alunos do curso.
Então, nós sabemos o int age-- e agora eu vou dizer 0.
Então você pode querer dizer idade1, mas para fins veremos muito em breve,
Eu vou dizer int age0 igual GetInt.
Assim, a mesma chamada para GetInt que temos vindo a utilizar I
não acontecer de ser alertando dizendo: "dá-me a idade."
Mas, assim o solicite.
>> E idade1 igual GetInt.
E int idade2 igual GetInt.
Então, novamente, três estudantes, mas finalmente, os índices variáveis
são age0 através de idade2.
ESTÁ BEM.
Portanto, este programa vai fazer o que for queremos com age0, idade1, e idade2,
mas este programa, em última análise trabalha para três estudantes.
>> ESTÁ BEM.
Então agora o que se eu quiser quatro estudantes?
Bem, eu vou ter que voltar no meu código, alterar o comentário,
e agora temos um int idade3 igual GetInt.
ESTÁ BEM.
Então, quem vê o problema aqui?
Qual é o problema com este tipo de configuração?
Sim.
Então, nós estamos criando uma variável para cada aluno.
Agora que funciona, mas em última análise, o que se eu agora
dizer: "Eu quero pegar a idade de oito estudantes ou 16 alunos
ou os porém muitos estudantes de as centenas de estudantes em CS50
ou os milhares de estudantes no campus ou os bilhões de pessoas no mundo?
Então, em última análise, isso não é sustentável.
Toda vez que você vê a si mesmo copiando e colar o código como este,
você deve geralmente se sentem que há uma maneira melhor.
>> Portanto, este é o lugar onde nós introduzimos uma declaração de matriz.
Então, quando você declarar uma matriz, isto é o que o formato geral
está indo olhar como.
Nós estamos indo para dizer o tipo.
e, em seguida, vamos dar o nome dessa matriz,
assim como nós definir qualquer variável dada.
E então, finalmente, nós estamos usando esta notação suporte novamente
mas num contexto diferente como estávamos a usá-lo mais cedo.
>> Então, aqui isso parece um normal, declaração da variável que temos visto.
Então nós vimos int x-e-vírgula antes.
Bem, agora podemos ver algo como int x 5 suportes.
E colocar essa idéia em o GetInt programa que have--
para que possamos implementar este da mesma forma.
>> Vamos dizer que em CS nós tendemos a usar n como o número de algo.
Então aqui nós vamos armazenar quatro estudantes.
E agora podemos dizer idade int suporte não n-- bastante obtê-lo yet--
para declarar uma matriz de quatro alunos.
Então, como isso irá olhar em memória será semelhante a esta.
Desmarque esta.
E nós vamos ter um lugar em memory-- eu vou colocar isso lá em cima.
>> Assim, em algum lugar na memória.
Um dois três quatro.
Temos quatro inteiros em uma fileira para este conjunto de quatro números inteiros.
Assim, actualmente, o que é a tamanho de uma destas caixas?
Sim.
É quatro bytes.
É 32 bits.
Então, agora isso é diferente a partir da matriz que nós
vimos anteriormente, a matriz de caracteres.
Em uma seqüência de cada caixa era apenas um byte, porque um personagem é apenas um byte.
Mas, com uma matriz de números inteiros, cada caixa tem que ser quatro bytes em ordem
para encaixar um número inteiro inteiro.
Então é isso que uma matriz de quatro ints seria semelhante.
>> E depois voltar para o código.
Agora queremos realmente loja inteiros para essa matriz.
Então, agora este é um muito, muito, muito padrão comum que, em algum momento
tornar-se a memória muscular.
Então int i é igual a 0.
i menos de n.
i plus plus.
Faixa etária i é igual a GetInt.
>> Portanto, este loop for, este formato, você deve ficar muito acostumado.
Portanto, esta é geralmente a forma como vamos iterar sobre praticamente qualquer matriz.
Agora, observe este tipo de explica por que, desde o início
nós não temos para loops indo para int i é igual a 1, i menor ou igual a 10.
A razão é que a partir de de zero faz bem esse trabalho com arrays.
Então matrizes são zero indexado.
Se essa matriz é de comprimento 4, os índices são de 0 a 3.
>> Então, através do primeiro iteração deste laço for
vamos estar definindo idade 0 suporte igual a uma chamada para GetInt.
Então o que me aconteceu para entrar no teclado.
Na segunda passagem, nós somos definindo idade1 igual a GetInt.
Terceira passagem, idade2.
Idade3 passe final.
Portanto, se na primeira passagem do loop Eu digitar o número 4 no teclado,
então vamos inserir um 4 aqui.
Se na segunda passagem entro 50, nós vamos colocar um 50 aqui.
Na terceira passagem eu poderia digite 1 negativo, negativo 1,
e, finalmente, se eu entrar e 0-- Agora, lembre-se que este foi o índice de três.
>> Depois que nós loop de volta, eu é vai ser incrementado para 4.
Já não é menos do que n, o qual é 4.
E nós sair do loop.
Então, o que estaria errado com isso?
[Inaudível]?
AUDIÊNCIA: [inaudível]
>> Sim.
Assim, a matriz tem apenas quatro locais, o que significa que os índices de 0 a 3.
Portanto, se esse fosse o caso, eu o faria assumir o valor de 4 em algum ponto.
faixa etária 4 será a criação aconteça o que acontecer a ser mais aqui
o que eu tenho a dizer, entrar 6.
Isso vai ser a criação dessa a 6.
>> Mas nós não sabemos o que está por aqui.
Esta não é a memória que tivemos acesso.
Então, se você se lembrar de a palestra anterior,
ele estava imprimindo valores de Zamyla e em algum momento ele bateu esta segmentação
falha. Então, provavelmente você vai estar vendo muitas falhas de segmentação como você
implementar alguns dos conjuntos de problemas.
Mas esta é uma das maneiras pelas quais você pode encontrar uma segmentação
falha, quando você começar a acessar memória de maneiras que você não deve ser.
Por isso, não tem acesso a este local e este é um bug.
>> Portanto, este é melhor.
Agora, ainda há um pequeno problema com este código.
E isso é basicamente que nós somos ainda preso em quatro alunos.
Agora, se eu quiser usar oito estudantes, OK.
Não é um grande negócio.
Eu posso entrar, alterar a comentar e altere n.
Agora isso vai funcionar com oito alunos.
Se eu compilar e executar este isso, ele vai mostrar me--
ele irá solicitar inteiros para oito estudantes e ele vai funcionar.
Mas é menos do que ideal para precisar recompilar o programa de cada vez
Eu quero mudar o número de alunos que eu quero entrar para a idade.
>> Assim, o melhoramento final sobre este, como veremos aqui-- estamos
vai solicitar o número de pessoas.
Aqui nós temos um número de pessoas nos quartos
ou quaisquer idades de pessoas na sala.
Mas nós estamos indo para solicitar o número de pessoas na sala do usuário.
Portanto, este é exatamente o mesmo do-while loop que nós vimos antes.
É exatamente o mesmo do-while loop que você
pode ser implementando no set problema.
Então, enquanto eles são entrando em uma n inferior a 1,
por isso não tem que ser de pelo menos uma pessoa no quarto.
Enquanto eles são entrando em uma n inferior a 1,
então vamos continuar pedindo novamente.
Por favor, indique o número de pessoas na sala.
Agora, uma vez que temos o número de pessoas no quarto--
para que eu possa entrar que não São 200 pessoas nesta sala.
Então aqui nós estamos indo para vir e declarar uma matriz de tamanho 200.
Estamos declarando matriz que é grande o suficiente para armazenar 200 idades.
Vindo para baixo, é o loop que você vai ficar muito acostumado.
Então iteração sobre essa matriz, atribuindo a cada localização
dessa matriz um inteiro, e em seguida, em última análise, aqui estamos
ficando apenas um exemplo de iteração sobre essa matriz, para não atribuir valores,
mas para acessar os valores.
>> Então aqui nós vemos que nós está dizendo, daqui a um ano,
% i pessoa estará% i anos, onde o primeiro% i é i + 1.
Então eu é essa variável índice.
E o segundo% i vai ser o valor armazenado na matriz idades mais 1.
Portanto, este mais 1 é só porque somos dizendo-- esta mais 1, as idades i mais 1.
Este é apenas mais um porque somos dizendo, daqui a um ano a pessoa
será esta idade.
>> Então porque é que esta i + 1?
Porque nós temos um plus um lá?
Sim.
Então lembre-se de zero matrizes são indexados.
Então, se estamos imprimindo isso para alguém para ler apenas a saída,
então provavelmente eles querem ver algo como uma pessoa, a pessoa número um,
será de 20 anos de idade.
Número dois pessoa será de 15 anos de idade.
Eles prefiro não ver pessoa número zero é de 15 anos de idade.
>> Então, compilar esta e apenas vendo o que parece como-- criar algum espaço.
Faça idades compila.
Executando as idades.
Vemos número de pessoas na sala.
Então, eu vou dizer que há três pessoas na sala.
Idade da pessoa número um, digamos 15, 20, 25.
E agora eu vou dizer daqui a um ano agora eles vão ser 16, 21, 26.
Vamos ver o que isso funciona com um que n não é igual a 3.
Então, se eu disser número de pessoas é 5, um, dois, três, dois, um, um ano a partir de agora
eles vão ser dois, três, quatro, três, dois anos de idade.
Então, eu poderia apenas como facilmente se n ser 10.000.
Agora vou ficar sentado aqui por um bom um tempo de entrar idades, mas isso funciona.
>> Então, agora na memória em algum lugar nós tem uma matriz de tamanho 10,000,
Então, finalmente 40.000 bytes, porque há
quatro bytes para cada um desses números inteiros.
Portanto, há uma série de tamanho 10.000 onde pudermos
armazenar as idades dessas 10.000 pessoas.
Tudo certo.
Perguntas sobre nada disso?
Sim.
O que se você deu um número negativo?
Vamos ver o que acontece.
Assim, neste número especial case-- de pessoas na sala, um negativo.
Rejeitou que, porque aqui nós acontecer
para ser manusear o facto de que se n é menos de um nós vamos pedir novamente.
Se você tentar declarar um matriz de tamanho negativo,
que, geralmente, não funciona.
>> Então, vamos tentar.
Vamos ignorar o que quer valor que eles entrada para n
e apenas dizer as idades int negativa.
Vamos ver se ele ainda compila.
Unknown.
Não.
Então as idades é declarado como um matriz com um tamanho negativo.
Então upfront reconhece uma matriz não pode ser de tamanho negativo e rejeita.
Agora, se nós não lidar com esse loop do-while corretamente,
se não estivéssemos a verificação Se n for menor do que 1--
vamos dizer que apenas não tinha isso em tudo
e em vez disso, basta pegar um inteiro.
Não importa o que é inteiro, declaramos uma matriz desse tamanho.
>> Assim, o compilador não pode possivelmente Reclamar agora.
Se eu compilar isto-- por isso não posso reclamar,
porque ele não pode saber que eu sou vai introduzir um número negativo,
que pode ser inválido.
Por tudo o que sabe, eu poderia digite um número positivo,
que é perfeitamente válida.
Então eu imagino se eu entrar negativo 1 pessoas na sala, falha de segmentação.
>> Então tá.
Então, vamos adicionar isso para trás apenas mantê-lo que era originalmente.
Então, faça as idades.
Agora, se eu quero tentar um negativo age-- então vamos
dizem que há cinco pessoas na sala.
Idade da pessoa número um é negativo 4, três pessoas
é zero, pessoa three-- OK.
Então, aqui, daqui a um ano, o número de pessoas uma será negativo 3 anos de idade.
Então, provavelmente não faz sentido.
Mas isso é apenas porque procura no código tudo que estamos fazendo
está solicitando GetInt.
>> Agora, se tivéssemos tido a Função GetPositiveInt
ou que tinha simplesmente feito isso mesmo tipo de loop while lá em baixo,
então isso iria funcionar perfeitamente bem.
Mas, neste particular, caso, nós apenas não fazer
acontecerá a ser lidar com valores negativos.
Quaisquer outras perguntas sobre matrizes?
ESTÁ BEM.
>> Então, nós temos visto agora arrays.
E nós vamos precisar de usar isso por linha de comando argumentos.
Assim, no conjunto de problemas dois-- Eu sei que muitos de vocês
ainda pode estar trabalhando em conjunto problema um, mas dois conjunto de problemas está chegando.
No conjunto de problemas dois, você vai precisa estar lidando com strings, arrays,
e linha de comando argumentos.
>> Então, quais são os argumentos da linha de comando?
Agora, você pode ver aqui um pouco de provocação para exatamente o que está
vai acontecer.
Vemos int main, argc inc, suportes de corda argv.
Então, primeiro vamos tentar interpretar o que está tentando dizer.
Agora ok.
>> Assim, na linha de comando, você deve ser se acostumando com alguns desses comandos
agora, e você provavelmente executado cd no terminal antes.
Então, se nós dizemos cd pset1, você sabe que isso deva
estar mudando para o diretório pset1.
>> Agora note que você nunca escrito um programa como este antes.
Cada programa que você escreveu, você seria executado, digamos, dot cortar Mario,
dot cortar ganancioso, e, em seguida, pode solicitar entrada.
Agora, isso não é o que Diretório alteração faz.
Quando você executar cd, não dirás: qual diretório que você quer em cd?
Em vez disso, você acabou de dizer, cd pset1, e ele só vai para o diretório pset1.
>> Então, da mesma forma que temos outros exemplos.
Olá fazer.
Quando você executar o make, não dirás: qual o programa que você gostaria de fazer?
Você acabou de dizer, no linha de comando fazem Olá.
>> Move é outro exemplo.
Este estamos nos movendo o mario.c arquivar até um diretório.
Portanto, agora sabemos com este exemplo nós realmente estamos passando dois argumentos.
Há mario.c como o primeiro argumento, e dot dot é o segundo argumento.
E então, quando você executar o make, você ver que realmente comando longo linha--
que realmente longa de comando impresso na linha de comando.
Para que este longo command-- é apenas uma pequena parte dela,
mas agora temos três linha de comando argumentos.
Dot traço zero, Olá, e hello.c.
>> Então, essas são de linha de comando argumentos, argumentos
que você está passando no linha de comando para que ele
não tem de ser solicitado quando você executar o programa.
Seria frustrante se quando você correu clang ele disse, "OK,
que program-- que arquivo que você está compilando?
Hello.c.
O que você faria bandeiras gostaria de entrar? traço o.
O que você gostaria o arquivo a ser chamado?
Olá.
Não, você só correr clang traço o Olá hello.c.
>> Então, olhando para isso.
Agora argc argc-- é a contagem de argumentos.
É o número de linha de comando argumentos entrou na linha de comando.
Bem, tecnicamente argv-- o v significa vetor,
que basicamente significa matriz.
Mas você pode ignorar isso.
Argv-- temos seqüência argv, assim suportes seqüência argv.
Portanto, esta é uma outra forma de Suportes você não tenha visto antes.
Suporte de forma que vimos notação quando temos dito,
como, string s é igual a Zamyla.
s suporte 0 acessa a Z. personagem
>> Também vimos colchetes quando dissemos int idades entre parênteses 5.
Que declarou uma matriz de tamanho 5.
Então aqui está uma versão do suportes que não vimos antes.
Portanto, este tipo de corda que argv seria completamente familiarizado
que seria apenas uma string.
Agora, os parênteses indicam que se trata de uma matriz.
Assim suportes seqüência argv meios argv que é uma matriz de cadeias.
Agora tecnicamente uma string é um array de caracteres.
Portanto, esta é agora uma matriz de uma matriz de caracteres.
Mas é muito mais fácil pensar sobre isso como apenas uma matriz de cadeias.
>> Então, por que os suportes pode estar vazio?
Como, por que não podemos dizer, suporte 5, suporte n?
Sim.
Nós não sabemos quantas inputs lá vão ser.
Portanto, se olharmos para o exemplo clang, dizemos clang traço o Olá hello.c.
Neste caso em particular, não acontecer ser três argumentos de linha de comando.
E assim o brackets-- vamos ver em um segundo que não seria três.
É tecnicamente seria quatro.
Mas os suportes, faríamos digamos, há três.
Mas agora, se nós olhamos movimento mario.c ponto ponto, os colchetes
nós gostaria de colocar duas neles.
>> E há uma série de comandos que tem um número variável de linha de comando
argumentos.
Então, o que esta versão do notação de colchetes indica
argv é que é uma matriz de cadeias.
Mas nós não sabemos quantas cordas estão nessa matriz.
E como nós, então sabe como muitas cordas estão na matriz?
Esse é o ponto inteiro argc.
argc nos diz quanto tempo é argv.
>> Assim, a última coisa a ter em mente é que, tecnicamente,
o próprio comando conta como um dos argumentos de linha de comando.
Assim pset1 CD, existem dois linha de comando argumentos.
O programa em si, cd e, em seguida a parte de argumento real dele, pset1.
Qualquer programa que você escreveu até agora teve uma linha de comando argument-- dot
cortar Mario.
Esse é o único argumento de linha de comando.
>> Então, agora olhando para clang traço o Olá hello.c.
Então, qual é argc?
4.
Então argc é 4.
Clang, então argv 0 suporte é clang.
argv suporte 1 é traço 0.
argv suporte 2 é Olá, e argv suporte 3 é hello.c.
Ok, então perguntas sobre este, e então nós vamos olhar para alguns exemplos programáticos.
>> ESTÁ BEM.
Então, vamos dar uma olhada em hello3.c.
Portanto, este deve ser familiar a partir de um dos primeiros exemplos de c
tivemos onde nós gostaria apenas de dizer, Olá mundo, mas agora isso é mais geral.
Então, aqui estamos dizendo Olá % s barra invertida n suporte argv 1.
Notice-- assim, até este ponto, este é o que o meu arquivo de modelo tem parecia.
Eu tinha int main (void), e então eu faria fazer alguma coisa na função principal.
Agora, ao invés, uma vez que começar a lidar com argumentos de linha de comando,
precisamos declarar um forma diferente de principal.
>> Então, olhando para hello3 novamente, o principal vai
para levar dois argumentos agora-- int argc, o número de argumentos de linha de comando,
e argv seqüência entre parênteses, o real cordas entrou na linha de comando.
Então, eu vou mudar isso template para refletir esse fato.
Agora, sempre que você escreve um programa, se não o fizer
precisa tomar nenhuma de linha de comando argumentos, então é só usar int main (void).
Mas agora, quando você está escrevendo programas argumento de linha de comando, que
você está indo fazer para problema definir dois-- então agora que você está executando
programas que precisam de tomar argumentos de linha de comando,
você precisa ter principal deste formulário.
>> Então aqui-- este é o grande uso do argumento de linha de comando.
Então, a impressão argv 1.
OK então vamos compilar e executar este programa.
Faça hello3.
Compila.
Dot cortar hello3.
E vamos dizer, "Rob".
Olá Rob.
Se eu disser: "Olá Maria," Olá Maria.
Ola Maria.
Hannah ainda diz: "Olá Maria, "porque eu não sou
fazer qualquer coisa com o nosso argv 2.
Argv 2 agora seria "Hannah".
Argc seria 3.
E se eu fiz isso?
Então Olá nulo.
>> Ele brevemente sobre o fato que, tecnicamente, GetString
pode retornar nulo, mas nós vamos chegar a muito mais sobre o que realmente é nulo.
Mas tomá-lo como uma questão de fato que não é geralmente ruim.
Nós fizemos algo de errado se é imprimir "Olá nulo."
E a razão que fizemos algo errado é-- bem,
quando eu corri dot hello3 barra, argc foi de 1.
Então isso significa que o comprimento de argv foi de 1.
Se uma matriz é de comprimento de 1, o único índice válido é zero.
E assim aqui argv 1 está fora a faixa deste array.
Era semelhante a antes quando eu tentei para armazenar 6 fora da extremidade da matriz.
Então, eu estou tentando acessar algo fora das contagens argv,
e nós estamos ficando nulo.
>> Então uma versão melhor de isso, uma melhoria,
é explicitamente verificando argc.
Então, se argc é igual a 2, isso significa que nós funcionamos algo como barra dot hello3 Rob.
E ele irá imprimir "Olá Rob."
Se argc não é igual 2, então ele só vai
a ignorar o que você colocar no argumento de linha de comando
como argumentos de linha de comando.
Ou se você não colocar qualquer um em tudo, é só vai ignorar isso e simplesmente dizer:
"Olá."
>> Então, compilar isso.
Faça hello4.
E, correndo hello4.
Executá-lo desta forma, o que deve ser impresso?
"Olá."
Olá.
E sobre hello4 Rob?
"Olá Rob."
E, finalmente, Olá Rob Maria é apenas "Olá você" novamente,
porque você realmente não entrar algo que o esperado.
Você entrou mais nomes do que poderia segurar,
por isso só a omissão Olá você o comportamento.
Assim perguntas sobre isso?
Ou argumentos de linha de comando?
>> OK, assim que tomar uma olhada em um mais alguns exemplos de como usar
de linha de comando arguments-- primeiro temos argv traço 1 ponto c.
Portanto, os comentários dar o que este programa deveria estar fazendo.
Mas note agora-- este loop for, este corresponde ao padrão exato
Eu estava dizendo antes.
Nós só acontecerá a ser argc usando em vez de n.
Agora argc é realmente o n.
É o comprimento da matriz argv.
Então está interagindo sobre o argv matriz de printf ing cada valor de argv.
>> Então se eu fizer isso.
Faça argv 1.
Ele compila.
Dot cortar argv 1.
Apenas correndo isto, impressões dot barra argv 1
uma vez que essa era a única linha de comando argument-- o nome do programa.
Haverá sempre a least-- argc não pode ser inferior a um,
uma vez que não será sempre, pelo menos, ser o nome do programa para ser executado.
Então argv 1 Rob irá imprimir argv 1 e, em seguida, na nova linha "Rob".
>> Assim, na primeira iteração deste circuito, i é 0.
Argv 0 é o nome do programa.
Dot cortar argv 1.
E então argv 1 é o meu primeiro argumento de linha de comando, que é Rob.
Neste ponto, somos iguais a ARGC.
Nós quebramos fora do circuito e estamos a fazer.
Então, isso vai trabalhar para uma arbitrária número de argumentos de linha de comando.
Observe que imprime argv 0, argv 1, 2 argv, argv 3, 4 argv.
E não há argv 5.
argc é igual a 5.
Assim, no argc-- no i é igual a 5, nós sair do loop.
ESTÁ BEM.
Assim perguntas sobre que antes de nós olhar para um exemplo mais complexo?
>> Então argv 2.
Tudo certo.
Então, ainda estamos imprimindo os argumentos de linha de comando.
Mas agora perceber que temos aninhado para um loop.
Então o que está fazendo isso?
Assim, o primeiro circuito está fazendo exatamente o que ele fez antes.
Nós ainda estamos looping sobre cada argumento de linha de comando,
mas agora esta segunda loop-- temos também vi algo assim antes.
Quando ele estava interagindo sobre Zamyla imprimindo Z-A-H-Y-L-A.
Portanto, este segundo ciclo para int j é igual a 0, n é igual a strlen de suporte argv i.
>> Então, vamos primeiro pensar por as-- vamos percorrer.
Vamos pensar o que o computador seria fazer se eu corri este programa como apenas dot
cortar argv traço 2.
Então, se eu corri este código, em seguida, argc vai ser igual a 1.
E seqüência argv-- há apenas vai ser um índice em argv,
e que vai ser igual a dot cortar argv 2-- o nome do programa.
>> OK, então agora eu é igual a 0, i menos de 1, i plus plus para int j é igual a 0,
n é igual a strlen de argv suporte 0, por isso, a primeira iteração deste laço. argv
0 suporte é barra dot argv 2.
Então, qual é o comprimento dessa corda?
Bem, dot cortar A-R-G-V traço 2.
Então strlen de que será 8.
Assim j é igual a 0, n é igual a oito.
Contanto que j é menor do que 8, J ++.
E com isso vamos estar imprimindo um caráter único, que
é argv suporte i j entre parênteses.
>> Assim, a única i é zero.
Nós ainda só tem uma argumento de linha de comando.
Nessa primeira iteração do loop for, estamos
vai ser a impressão argv suporte 0 0 suporte.
E então j vai incrementar.
E nós estamos indo para impressão argv suporte 0 suporte 1.
E então argv suporte 0 suporte 2.
>> Portanto, este é o nosso primeiro encontro de arrays multidimensionais.
Lembre-se antes que eu disse que argv é tecnicamente
uma matriz de matrizes de caracteres.
Então, aqui, se eu disse algo como string s é igual a faixa argv i,
e então eu disse, s suporte j, este seria realizar a mesma coisa.
Agora, você já viu s suporte j antes.
Isso é só acessar o j-th caráter dessa string.
Então, com isso, nós estamos começando a j-th personagem do argv i-th.
>> Então, o que em última análise, esta saída?
Faça argv 2.
Ele compila.
Dot cortar argv 2.
"Rob Maria Hannah," e nos dar algum espaço.
Assim, vemos que esta é a saída dot em sua própria linha e barra
em sua própria linha e um na sua própria linha.
Ele está imprimindo cada caráter individual
de cada argumento de linha de comando.
E, em seguida, entre eles, devido a esta nova linha
estamos imprimindo aqui em baixo, em entre eles que vai imprimir uma nova linha.
>> Portanto, este é semelhante ao o traço argv antes 1,
que imprimiu cada argumento de linha de comando,
mas agora estamos imprimindo os argumentos de linha de comando
e, em seguida, através de cada iteração caráter de cada argumento de linha de comando
para obter esta saída.
ok?
Assim perguntas sobre isso?
>> Uma coisa a notar é que de linha de comando arguments--
por isso eles são separados por espaços como você naturalmente esperar que eles sejam.
Assim, uma seqüência pode ter espaços.
Não é super importante, mas se eu queria que o argumento terceiro de linha de comando
ter um espaço nele, então eu poderia dizer algo como isso.
ok?
Então, isso agora ainda só tem três de linha de comando bem arguments-- 4.
Dot cortar argv traço 2, Rob, Maria e Hannah Bloomberg.
ESTÁ BEM.
Perguntas sobre este assunto?
>> Não há nada especial sobre o carácter de espaço.
Ele só passa a ser que o de linha de comando trata o caractere de espaço
como a forma como você separa cada argumento.
Tudo certo.
Então, em seguida, conjunto Problem dois-- você vai ser
olhando para criptografia de chave secreta.
Assim, semelhante ao exemplo vimos de Uma História de Natal,
você vai ser a implementação de algumas algoritmos que, dada uma mensagem,
você vai ser capaz para encriptar a mensagem
que só alguém com esse segredo chave, com aquele anel decodificador,
deve ser capaz de decifrar.
>> Então essa é a edição padrão.
Você vai estar implementando duas versões diferentes.
Se acontecer de você dar uma olhada em que o hacker Professional-- agora,
vamos dar você uma seqüência como esta,
o que representa uma senha criptografada.
Assim, seu objetivo é descobrir o que a senha é descriptografado.
Agora, este é realmente como senhas são armazenados em muitos computadores,
e ele só armazena esta seqüência aleatória de caracteres.
Você tem que descobrir como chegar a partir desta seqüência aleatória de caracteres
ao que a senha original.
>> E, finalmente, após este conjunto de problemas, você deve
ser capaz de compreender o que isso significa.
Então, você vai aprender como descriptografar esse tipo de seqüência aleatória.
Da mesma forma, se você se lembrar de semana 0, você pode ter visto este URL.
E você deve ser capaz de decifrar isso eventualmente.
Você pode não ser feliz quando você decifrá-lo e clique no link.
Tudo certo.
É isso por hoje.
Então, vê-lo na próxima semana!
>> [MÚSICA ELETRÔNICA DE JOGO]