[Música tocando] DAVID Malan: Todo ben. Este é CS50, e este é o fin de semana dous. Eu sinto moito eu non podería estar alí con todos vós hoxe, pero está moi boas mans. Permita-me presentar Propia Rob Bowden do CS50. ROB Bowden: E, por suposto, a continuación, temos que facer o desfrute do feito que nos enviou un verticais vídeo e amosar iso. [REPRODUCIÓN DE VIDEO] [Música tocando] PASO A PASO [] -Este Vídeo non está ten que mirar desa forma. El podería ser evitada. Diga non aos vídeos verticais. Videos -Vertical ocorrer cando soster a cámara na dirección incorrecta. O vídeo vai acabar sobre ollar como porco. - [Grunhido] -Hai Máis e máis persoas adictas para facer vídeos verticais cada día. Non é rachar ou nada, senón que é moi malo. Existen dous tipos de persoas que están aflitos con VVS. O primeiro grupo trata o videos de tirar como imaxes. Elas non significan ningún dano. Eles simplemente non entenden que canto pode xirar unha imaxe, non pode realmente transformar un vídeo. [CRASH] - [Mono SOUNDS] -O Outro grupo é de persoas que non dar un [BLEEP]. Síndrome de Vídeo -Vertical é perigoso. As imaxes de vídeo teñen sempre foi horizontal. As televisións están horizontal. Pantallas de ordenador son horizontais. Os ollos da xente son horizontais. Non son construídos para ver vídeos verticais. -Eu Amo vídeos verticais. -Ninguém Se preocupa con vostede. -Se Deste problema non é controlada, tamén comezará mostrando catro vídeos dunha vez só para aforrar ancho de banda. Videos verticais -Letterboxed faría ser do tamaño dun selo postal. -E El vai se estender por todas partes. Pantallas de cine teñen sempre foi horizontal. Se verticais vídeos fan a aceptados, cines terá que ser alto e delgado. -E Todas as salas de cine faría ten que se demolida e reconstruída. E no momento en que foron reconstruídas, Mila Kunis sería vello e feo. -birds Ha chocar con eles e morrer. -Imos Todo estar duro pescozos de ollar para arriba. -E Ninguén vai sentir-se no a liña da fronte unha vez máis. -George Lucas ha re-lanzamento Estrela Guerras novamente-- a edición delgado. -Eu Nunca foi realmente capaz de dicir a historia que eu quería contar. Esta foi unha gran oportunidade para min probar cunha nova tecnoloxía. -Vostede É un idiota. -Toda Xa que un dispositivo móbil é usado para gravar vídeo, a tentación é alí. Basta dicir non. Diga non ao George Lucas. Diga non ao vello Mila Kunis. Diga non aos vídeos verticais. -E Se ve alguén a facer iso, din, "non está filmando a manequim correcto!" [Música tocando] [FIN DE REPRODUCIÓN] [Aplausos] [AUDIO OUT] ROB Bowden: --simple forma de cifrado, que é, basicamente, o cifrado e decodificación de mensaxes secretas. Polo tanto, temos aquí un xoguete moi sinxelo. E a idea é o anel externo xira en torno ao anel interno. E podes ver, se cadra si aumentar en, isso-- é difícil de ver. Pero, así como, o número 1-- ben, iso cambiou. O número 1 mapea á letra X, número 2 mapas para a letra J. incrible difícil non ir para adiante. Carta 2 mapea para J. Número 3 mapea para D. Así, con este anel que pode dar- alguén unha mensaxe 1, 2, 3. Por algunha razón ten quero dicirlles XJD. Pero pode darlles algunha mensaxe de números, e sempre que eles teñen este anel, eles pode descifrar o que estás a dicir. Entón podes ver este en particular exemplo de cifrado antes en torno á época do Nadal asistiu Unha Historia de Nadal. Se nunca viu iso antes, entón só conectar TBS en literalmente calquera momento na véspera de Nadal, porque simplemente mostra-lo de volta para atrás a volta atrás para facer o día. E o vídeo é relevante esta. [REPRODUCIÓN DE VIDEO] -sexa Sábese a todo o mundo que Ralph Parker é por este medio nomeado membro da Pequena Orphan Annie Círculo Secreto e ten dereito a todos os honores e beneficios produciron ao mesmo. Asinado Little Orphan Annie. Referendado Pierre André en tinta! Honores e beneficios xa coa idade de nove! [Gritar de RADIO] -Imos. Imos comezar con el. Eu non teño todo ese jazz sobre contrabandistas e piratas. -listen Mañá á noite con a aventura final do Navío de pirata negro. Agora é o momento de Mensaxe secreta de Annie para vós, membros da Secret Circle. Teña en conta que dos miúdo, só os membros do Círculo Secreto de Annie pode descodificar a mensaxe secreta de Annie. Lembre, Annie está dependendo de ti. Define os seus pinos para B2. Aquí está a mensaxe. 12. 11. 2. -Eu Estou na miña primeira reunión secreta. -25. 14. 11. 18. 16. Oh, Pierre está gran esta noite voz. Podería dicir que esta noite mensaxe era realmente importante. -3. 25. Esa é unha mensaxe de Annie si mesma. Lembre, non diga a ninguén. -Cinco Segundos máis tarde, eu estou no único cuarto na casa onde un neno de nove anos podería sentar privacidade e decodificar. Aha! B! Eu fun para o próximo. E. A primeira palabra é "ser". S. Estaba vindo máis fácil agora. U. 25. Isto é R. Imos, Ralphie! Teño que ir! -Vou Ser dereito para abaixo, Ma! Gee Whiz. T. O. "Asegúrese" - asegúrese de que? Cal foi Little Orphan Annie intenta dicir? Asegúrese de que? -Randy Ten que ir! Será que podería saír? -Todos Correcto, nai! Estarei fóra á dereita! Eu estaba quedando máis preto agora. A tensión era terrible. Que foi? O destino do planeta pode colgar na balanza! -Ralphie, Randy ten que ir! -Vou Ser dereito para fóra, polo amor de Deus! Case alí! Meus dedos voaron. Miña mente era unha trampa de aceiro. Todos os poros tensou. Era case claro! Si. Si. Si. Si. Asegúrese de beber o seu Ovomaltine. Ovomaltine? Un comercial miserable? Fillo de puta. [FIN DE REPRODUCIÓN] ROB Bowden: Entón é así que Ovaltine refírese a criptografía. Basicamente CS50 só anunciado Ovomaltine, para que pudéssemos ser un comercial crummy para Ovomaltine. Todo ben. Entón, agora a ciencia da computación real. Teña en conta que o luns paramos mergullo máis profundo en cadeas. Entón, estabamos lidando con a cadea "Zamyla." E nós estabamos recoñecendo o feito de que podemos tratar "Zamyla" como unha secuencia de caracteres. E lembre de que aprendemos a notación de soporte. Así, se este se almacenan nunha cadea "s", despois se dixésemos s soporte 0, que faría indicar a capital letra 'Z' E se nós dixemos s soporte 1, que ía indicar a primeira letra minúscula un, e así sucesivamente ata s soporte 5, o que indicaría a última a. Agora lembre que o lonxitude desta secuencia é 6, pero os índices na cadea son 0 a 5, Z por aquel durar. Polo tanto, este agora encaixa nun cadro maior da memoria do seu ordenador, o seu RAM. Entón, o programa que algures está executando o seu ordenador Debe lembrar Zamyla algures na memoria. Entón eu podo ter un voluntario? Si, por favor. E cal é o seu nome? DEAN: Dean. ROB Bowden: Dean? Pracer en coñece-lo, Dean. Entón veña aquí, e nós imos ter que deseñar no noso esquema agradable bacana de memoria. Agora me gusta de pensar de memoria como unha longa franxa de bytes, pero soamente con fins de visualización imos simplemente esquerda a dereita, de arriba abaixo. OK? Entón eu vou lle amosar unha program-- Getstrings.c. E así todo este programa é facendo é solicitando catro cordas do usuario con E, a continuación, a impresión GetString o que quere que a primeira cadea introducida era. Estamos ignorando dous a catro. Aceptar. Entón aquí agora- cando I primeiro s1 solicitude. Entón está no ordenador. E está aplicando GetString. Entón solicitar unha secuencia de me, e eu digo: OK, Dean. Dea a cadea "Dean". Entón, en algún lugar na memoria que cómpre lembrar "Dean". Entón escriba o en memoria de algún lugar. Perfecto. Aceptar. Entón, agora temos S2. E s2 será unha proposta para GetString. Entón, eu estou indo a introducir unha cadea. Vou entrar "Hannah". Entón escriba "Hannah" nalgún lugar na memoria. Si. A-H. OK, entón agora s3. E vai ser outro solicitar a GetString. E entón agora escriba "María". Todo ben. E despois hai unha última solicitude para GetString, S4. Entón, eu non sei. Que tal irmos con antidisestablishmentarianism. Así que entrar na memoria. Si. Entón, só tes que facer "Rob". Aceptar. Entón, por que agora explain-- deixar eses espazos? Por que ten isto en branco espazo aquí, aquí e aquí enriba? Si. Entón, observe cando vou imprimir s1-- polo que, se nós tivo running "Hannah" dereito á beira de "Dean", como sabemos cando a cadea "Dean" remata? Entón, o impreso co s1 corda pode só impreso "DeanHannahMariaRob" Se non ten ningún indicio de cando "Dean", en realidade, remata. Todo ben. Así, en memoria a forma que nós, en realidade, representa ese final dunha cadea É con barra invertida cero. Polo tanto, este espazo é o que queriamos. Debe ser unha barra invertida cero. Esta será unha barra invertida cero, e esta será unha barra invertida cero. E pode que un premio fabuloso por ser un voluntario perfecto. Tome unha bola de estrés! Aceptar. Polo tanto, este carácter de barra invertida cero é como podemos indicar o fin dunha secuencia de carácteres. É como cando un determinado programa quere imprimir unha secuencia de caracteres, é how-- lembro aprendemos a función strlen a semana pasada? Lonxitude da corda? É como lonxitude da corda é capaz de determinar canto tempo unha cadea é. El só segue iteración ao longo dos personaxes ata atopar o carácter de barra invertida cero. Así, o que é importante entender sobre o carácter barra invertida de cero é que é representado por todos os ceros en bits. Entón, teña en conta que este é distinguida desde o cero. Así, o carácter cero, se recorda no exemplo que deu a finais de conferencia onde os personaxes mapear a-- como mapas maiúsculas da a 65. Minúsculas unha mapas para 97. B minúsculas sería 98. Así, o número 0 mapas para-- Non facer sei fóra do cumio da miña cabeza. 44 ou 45. Nalgún lugar na rexión. Así, o carácter 0 é un número real. Pero de cero barra invertida mapas para todos os bits cero. Polo tanto, hai unha distinción entre barra invertida cero, que chamaremos o terminador nulo. Hai unha distinción entre barra invertida cero eo carácter cero. Todo ben. Entón, falando un pouco máis sobre cadeas. Entón vemos aquí é así sería colocado para fóra na memoria. Entón, esa idea de cadeas como unha secuencia de xeito que o ordenador de caracteres oficial sciency prazo para a secuencia é unha matriz. Entón, nós chamariamos unha cadea un conxunto de caracteres. E de feito existen outros datos tipo que podemos facer matrices de fóra. Entón, para motivar iso, ollar un exemplo. Imos chamalo vou ages0.c copia e pega o noso modelo. Aceptar. Polo tanto, neste programa que quero facer é ir a idade de tres alumnos do curso. Entón, nós sabemos o int age-- e agora eu vou dicir 0. Entón podes querer dicir idade1 pero con fins veremos moi pronto, Eu vou dicir int age0 igual GetInt. Así, a mesma chamada GetInt que temos que chegou a utilizar I non ocorrer de ser alertando dicindo: "dáme a idade." Pero, así o solicite. E idade1 igual GetInt. E int idade2 igual GetInt. Entón, de novo, tres estudantes, pero finalmente, os índices variables son age0 mediante idade2. Aceptar. Polo tanto, este programa vai facer o que sexa queremos con age0, idade1, e idade2, pero este programa, en definitiva traballa para tres estudantes. Aceptar. Entón agora o que se eu queira catro estudantes? Ben, eu vou ter que volver no meu código, cambiar o comentario, e agora temos un int idade3 igual GetInt. Aceptar. Entón, quen ve o problema aquí? Cal é o problema con este tipo de configuración? Si. Si. Entón, nós estamos creando unha variable para cada alumno. Agora que funciona, pero en definitiva, o que se eu agora dicir: "Eu quero ir a idade de oito estudantes ou 16 alumnos ou os porén moitos estudantes de os centos de estudantes en CS50 ou os miles de estudantes no campus ou os millóns de persoas no mundo? Entón, en definitiva, iso non é sostible. Cada vez que ve a si mesmo copiando e pegar o código como este, ten que xeralmente se senten que hai un xeito mellor. Polo tanto, este é o lugar onde nós introducimos unha declaración de matriz. Entón, cando declarar unha matriz, isto é o que o formato xeral vai ollar como. Estamos indo para dicir o tipo. e, a continuación, imos dar o nome desa matriz, así como nós establecer calquera variable dada. E entón, finalmente, estamos usando esta notación soporte de novo pero nun contexto diferente como estabamos a usalo antes. Entón, aquí iso parece un normal, declaración da variable que vimos. Entón vimos int x e coma antes. Ben, agora podemos ver algo como int x 5 soportes. E poñer esa idea en o GetInt programa que have-- para que poidamos aplicar este do mesmo xeito. Imos dicir que en CS tendemos a usar n como o número de algo. Entón aquí imos almacenar catro estudantes. E agora podemos dicir idade int soporte non n-- bastante obtelo yet-- para declarar unha matriz de catro alumnos. Entón, como iso pode ollar en memoria será semellante a esta. Desmarque esta. E nós imos ter un lugar en memory-- vou poñer isto alí enriba. Así, en algún lugar na memoria. Un, dous, tres, catro. Temos catro enteiros nunha fileira para este conxunto de catro números enteiros. Así, na actualidade, o que é a tamaño dunha destas caixas? Si. É catro bytes. É 32 bits. Entón, agora que é diferente desde a matriz que vimos anteriormente, a matriz de caracteres. Nunha secuencia de cada caixa era só un byte, porque un personaxe é só un byte. Pero, con unha matriz de números enteiros, cada caixa ten que ser catro bytes en orde para encaixar un enteiro enteiro. Entón é iso que unha matriz de catro ints sería semellante. E despois volver para o código. Agora queremos realmente tenda enteiros para esa matriz. Entón, agora que é un moi, moi, moi estándar común que, nalgún momento chegar a ser a memoria muscular. Entón int i é igual a 0. i menos n. i plus plus. Idade i é igual a GetInt. Polo tanto, este loop for, este formato, ten que ser moi acostumado. Polo tanto, esta é xeralmente o xeito no que imos iterado sobre practicamente calquera matriz. Agora, observe este tipo de explica por que, desde o inicio nós non temos para loops indo int i é igual a 1, i menor ou igual a 10. A razón é que a partir de de cero fai ben este traballo con arrays. Entón matrices son cero indexado. Se esta matriz é de lonxitude 4, os índices son de 0 a 3. Entón, a través do primeiro iteración deste lazo for estaremos definindo idade 0 soporte igual a unha chamada GetInt. Entón o que me aconteceu para entrar no teclado. Na segunda pasaxe, somos definindo idade1 igual a GetInt. Terceira paso, idade2. Idade3 pase final. Polo tanto, na primeira pasaxe do loop Eu escribir o número 4 no teclado, entón imos introducir un 4 aquí. Na segunda pasaxe entro 50, nós imos poñer un 50 aquí. Na terceira pasaxe podería escriba 1 negativo, negativo 1, e, finalmente, se eu entrar e 0-- Agora, lembre que este foi o índice de tres. Despois de que nós loop de volta, eu é será incrementado para 4. Xa non é menos que n, o cal é 4. E nós saír do loop. Entón, o que estaría mal con iso? [Inaudível]? Audiencia: [inaudível] Si. Así, a matriz ten só catro locais, o que significa que os índices de 0 a 3. Polo tanto, se ese fose o caso, eu o faría asumir o valor de 4 nalgún momento. idade 4 será a creación pase o que pase a ser máis aquí o que eu teño que dicir, entrar 6. Isto vai ser a creación desa a 6. Pero nós non sabemos o que está por aquí. Esta non é a memoria que tivemos acceso. Entón, se lembrar de a charla anterior, estaba imprimindo valores Zamyla e nalgún momento bateu esta segmentación fallo. Entón, probablemente vai estar a ver moitos fallos de segmentación como aplicar algúns dos conxuntos de problemas. Pero esta é unha das formas en que podes atopar unha segmentación falla, cando comezar a acceder memoria de formas que non debe ser. Por iso, non ten acceso a este lugar e este é un erro. Polo tanto, este é mellor. Agora, aínda hai un pequeno problema con este código. E iso é basicamente que somos aínda preso catro alumnos. Agora, se eu queira utilizar oito estudantes, Aceptar. Non é un gran negocio. Podo entrar, cambiar a comentar e cambie n. Agora iso vai funcionar con oito alumnos. Se eu compilar e executar este iso, que vai mostrar me-- ha solicitar enteiros para oito estudantes e só pode funcionar. Pero é menos que perfecto para ter recompilar o programa de cada vez Quero cambiar o número de alumnos que quero entrar na idade. Así, a mellora final sobre este, como veremos aqui-- estamos vai solicitar o número de persoas. Aquí temos un número de persoas nos cuartos ou calquera idades de persoas na sala. Pero nós estamos indo para solicitar o número de persoas na sala do usuario. Polo tanto, este é o mesmo do-while loop que vimos antes. É exactamente o mesmo do-while loop que pode ser aplicando no set problema. Entón, mentres eles son entrando nunha n inferior a 1, polo que non ten que ser de polo menos unha persoa no cuarto. Mentres eles son entrando nunha n inferior a 1, entón imos seguir pedindo de novo. Introduza o número de persoas na sala. Agora, unha vez que temos o número de persoas no quarto-- para que eu poida poñerse que non Son 200 persoas nesta sala. Entón aquí estamos indo a vir e declarar unha matriz de tamaño 200. Estamos declarando matriz que é grande abondo para almacenar 200 idades. Benvida para abaixo, é o loop que vai estar moi acostumado. Entón iteración sobre esta matriz, atribuíndo a cada situación desa matriz un enteiro, e a continuación, en definitiva, aquí estamos quedando só un exemplo de iteración sobre esta matriz, para non facer valores, pero para acceder aos valores. Entón aquí vemos que está dicindo, de aquí a un ano, % I persoa estará% i anos, onde o primeiro% i é i + 1. Entón eu é esa variable índice. E o segundo% i será o valor almacenado na matriz idades máis 1. Polo tanto, este máis 1 é só porque somos dizendo-- esta máis 1, as idades i máis 1. Este é só un porque somos dicindo, de aquí a un ano a persoa será esta idade. ¿Como é que esta i + 1? Porque temos un plus un alí? Si. Si. Entón lembre de cero matrices son indexados. Entón, se estamos imprimindo isto para alguén para ler só a saída, entón probablemente queren ver algo como unha persoa, a persoa número un, será de 20 anos de idade. Número dous persoa será de 15 anos de idade. Eles prefiro non ver persoa número cero é de 15 anos de idade. Entón, compilar esta e só ver o que parece como-- crear un espazo. Fai idades compila. Executando as idades. Vemos número de persoas na sala. Entón, eu vou dicir que hai tres persoas na sala. Idade da persoa número un, digamos 15, 20, 25. E agora eu vou dicir aquí a un ano agora van ser 16, 21, 26. Imos ver o que funciona con un que n non é igual a 3. Entón, se eu digo número de persoas é 5, un, dous, tres, dous, un, un ano a partir de agora eles van ser dous, tres, catro, tres, dous anos de idade. Entón, eu podería só como facilmente n ser 10.000. Agora vou estar sentado aquí por un bo un tempo de entrar idades, pero funciona. Entón, agora na memoria nalgún lugar nos ten unha matriz de tamaño 10,000, Entón, finalmente 40.000 bytes, porque hai catro bytes para cada un destes números enteiros. Polo tanto, hai unha serie de tamaño 10.000 onde podemos almacenar as idades destas 10.000 persoas. Todo ben. Preguntas sobre nada diso? Si. Que se deu un número negativo? Imos ver o que acontece. Así, neste número especial case-- de persoas na sala, un negativo. Rexeitou que, porque aquí ocorrer para ser manexar o feito de que se n é menos dun imos pedir de novo. Se tentar declarar un matriz de tamaño negativo, que, xeralmente, non funciona. Entón, imos tratar. Imos ignorar o que quere valor que entrada n e só dicir as idades int negativa. A ver se aínda compilan. Non estou seguro. Non. Entón as idades é declarado como un matriz cun tamaño negativo. Entón upfront recoñece unha matriz non pode ser de tamaño negativo e rexeita. Agora, se non tratar con ese loop do-while correctamente, se non estivésemos a comprobación Se n é menor que 1-- imos dicir que só non tiña iso en todo e no seu lugar, só incorporarse un enteiro. Non importa o que é enteiro, declaramos unha matriz dese tamaño. Así, o compilador non pode posiblemente Reclamar agora. Se eu compilar isto-- polo que non podo reclamar, porque non pode saber que eu son vai introducir un número negativo, que se pode válido. Por todo o que sabe, eu podería escriba un número positivo, que é perfectamente válida. Entón eu imaxino que eu entrar negativo 1 persoas na sala, fallo de segmento. Así, Aceptar. Entón, imos engadir isto para atrás só mantelo que era orixinalmente. Entón, faga as idades. Agora, se eu quero probar un negativo age-- entón imos din que hai cinco persoas na sala. Idade da persoa número un é negativo 4, tres persoas é cero, persoa three-- Aceptar. Entón, aquí, aquí a un ano, o número de persoas unha será negativo 3 anos de idade. Entón, probablemente non ten sentido. Pero iso é só porque busca no código único que estamos facendo está pedindo GetInt. Agora, se tivésemos tido a Función GetPositiveInt ou que simplemente feito isto mesmo tipo de loop while alí en baixo, entón iso ía funcionar perfectamente ben. Pero, neste particular, caso, nós só non facer terá lugar a ser xestione valores negativos. Calquera outras preguntas sobre matrices? Aceptar. Entón, nós vimos agora arrays. E nós imos ter que usar isto por liña de comandos argumentos. Así, no conxunto de problemas dois-- Sei que moitos de vós aínda pode estar a traballar en conxunto problema un, senón dous conxunto de problemas está chegando. No conxunto de problemas dous, vai Debe estar lidando con cadeas, arrays, e liña de comandos argumentos. Entón, cales son os argumentos da liña de comandos? Agora, podes ver aquí un pouco de provocación para o que está vai pasar. Vemos int main, argc inc, soportes de corda argv. Entón, primeiro imos tratar interpretar o que está a tratar de dicir. Agora Aceptar. Así, na liña de comandos, ten que ser gañando con algúns deses comandos agora, e probablemente executado cd no terminal antes. Entón, se nós dicimos cd pset1, vostede sabe que iso deba estar cambiando ao directorio pset1. Agora conta que nunca escrito un programa como este antes. Cada programa que escribiu, sería executado, digamos, dot cortar Mario, dot cortar ganancioso, e, a continuación, pode solicitar entrada. Agora, iso non é o que Directorio alteración fai. Cando realizar cd, non dirás: cal directorio que quere en cd? Pola contra, que acaba de dicir, cd pset1, e el só vai ao directorio pset1. Entón, do mesmo xeito que temos outros exemplos. Ola facer. Cando realizar o make, non dirás: que o programa que desexa facer? Acaba de dicir, o liña de comandos fan Ola. Move é outro exemplo. Este estamos movendo o mario.c arquivar ata un directorio. Polo tanto, agora sabemos con este exemplo realmente estamos pasando dous argumentos. Hai mario.c como o primeiro argumento, e dot dot é o segundo argumento. E entón, cando realizar o make, vostede ver que realmente comando longo linha-- que realmente longa de comandos impreso na liña de comandos. Para que este longo command-- é só unha pequena parte dela, pero agora temos tres liña de comandos argumentos. Dot trazo cero, Ola, e hello.c. Entón, estas son de liña de comandos argumentos, argumentos que está pasando no liña de comandos para que Non ten que ser solicitado cando realizar o programa. Sería frustrante cando foi clang dixo, "OK, que program-- que ficheiro que está compilando? Hello.c. O que faría bandeiras quere entrar? trazo o. Que che gustaría o ficheiro que se chama? Ola. Non, só correr clang trazo o Ola hello.c. Entón, ollando para iso. Agora argc argc-- é a conta de argumentos. É o número de liña de comandos argumentos entrou na liña de comandos. Ben, tecnicamente argv-- o v significa vector, que basicamente significa matriz. Pero pode ignorar isto. Argv-- temos secuencia argv, así soportes secuencia argv. Polo tanto, esta é outra forma de Soportes non teña visto antes. Soporte de forma que vimos notación cando dixemos, como, cadea s é igual a Zamyla. s soporte 0 accede á Z. personaxe Tamén vimos corchetes cando dixemos int idades entre parénteses 5. Que declarou unha matriz de tamaño 5. Entón aquí está unha versión do soportes que non vimos antes. Polo tanto, este tipo de corda que argv sería completamente familiarizado que sería só unha cadea. Agora, os parénteses indican que se trata dunha matriz. Así soportes secuencia argv medios argv que é unha matriz de cadeas. Agora tecnicamente unha cadea é un array de caracteres. Polo tanto, esta é agora unha matriz dunha matriz de caracteres. Pero é moito máis fácil pensar isto como só unha matriz de cadeas. Entón, por que os soportes pode estar baleiro? Como, por que non podemos dicir, soporte 5, soporte n? Si. Si. Non sabemos cantas inputs alí van ser. Polo tanto, se miramos o exemplo clang, dicimos clang trazo o Ola hello.c. Neste caso en particular, non acontecer ser tres argumentos de liña de comandos. E así o brackets-- veremos nun segundo que non sería tres. É tecnicamente sería catro. Pero os soportes, fariamos digamos, hai tres. Pero agora, se miramos movemento mario.c punto punto, os corchetes nós quere poñer dúas neles. E hai unha serie de comandos que ten un número variable de liña de comandos argumentos. Entón, o que esta versión do notación de corchetes indica argv é que é unha matriz de cadeas. Pero nós non sabemos cantas cordas están nesa matriz. E como nós, entón sabe como moitas cordas están na matriz? Ese é o punto enteiro argc. argc dinos o tempo que desexa argv. Así, o último a ter en mente é que, tecnicamente, o propio comando conta como un dos argumentos de liña de comandos. Así pset1 CD, hai dous liña de comandos argumentos. O programa en si, cd e logo a parte de argumento real del, pset1. Calquera programa que escribiu ata agora tivo unha liña de comandos argument-- dot cortar Mario. Ese é o único argumento da liña de comandos. Entón, agora mirando para clang trazo o Ola hello.c. Entón, cal é argc? 4. Entón argc é 4. Clang, entón argv 0 soporte é clang. argv soporte 1 é trazo 0. argv soporte 2 é Ola, e argv soporte 3 é hello.c. Ok, entón preguntas sobre este, e entón nós imos mirar para algúns exemplos programáticos. Aceptar. Entón, imos dar un ollo a hello3.c. Polo tanto, este debe ser familiar desde un dos primeiros exemplos de c tivemos onde nós quere só de dicir, Ola mundo, pero agora iso é máis xeral. Entón, aquí estamos dicindo Ola % S barra invertida n soporte argv 1. Notice-- así, ata este punto, que é o que o meu ficheiro de modelo parecía. Eu tiña int main (void), e entón eu faría facer algo na función principal. Agora, en vez, xa que comezar a tratar con argumentos de liña de comandos, necesitamos declarar un forma diferente de inicio. Entón, ollando para hello3 de novo, o principal vai para levar dous argumentos agora-- int argc, o número de argumentos de liña de comandos, e argv secuencia entre parénteses, o real cordas entrou na liña de comandos. Entón, eu vou cambiar isto template para reflectir este feito. Agora, sempre que escribe un programa, se non o fai cómpre tomar ningunha de liña de comandos argumentos, entón é só usar int main (void). Pero agora, cando está escribindo programas argumento da liña de comandos, que está indo facer para problema definir dois-- entón agora que está executando programas que precisan de tomar argumentos de liña de comandos, ten que ter principal deste formulario. Entón aqui-- este é o gran uso do argumento da liña de comandos. Entón, a impresión argv 1. OK entón imos compilar e executar este programa. Fai hello3. Compila. Dot cortar hello3. E imos dicir, "Rob". Ola Rob. Se eu digo: "Ola María," Ola María. Ola María. Hannah aínda di: "Ola María, "porque eu non son facer algo co noso argv 2. Argv 2 agora sería "Hannah". Argc sería 3. E se eu fixen iso? Entón Ola nulo. El brevemente sobre o feito que, tecnicamente, GetString pode devolver nulo, pero nós imos chegar a moito máis do que realmente é nulo. Pero tomalo como unha cuestión de feito que non é xeralmente mal. Fixemos algo de malo se é imprimir "Ola nulo." E a razón que fixemos algo mal é-- ben, cando eu execute dot hello3 barra, argc foi de 1. Entón isto significa que a lonxitude de argv foi de 1. Se unha matriz é de lonxitude de 1, o único índice válido é cero. E así aquí argv 1 está fóra a franxa deste array. Era semellante a antes cando intento para almacenar 6 fóra da extremo da matriz. Entón, eu estou tentando acceder algo fóra das contas argv, e estamos quedando nulo. Entón unha versión mellor de tanto, unha mellora, é explicitamente comprobando argc. Entón, se argc é igual a 2, isto significa que nós funcionan algo así como barra dot hello3 Rob. E ha imprimir "Ola Rob." Se argc non é igual 2, el só vai a ignorar o que poñer no argumento da liña de comandos como argumentos de liña de comandos. Ou se non poñer calquera en todo, é só vai ignorar isto e simplemente dicir: "Ola". Entón, compilar iso. Fai hello4. E, correndo hello4. Executa-lo deste xeito, o que debe ser impreso? "Ola". Ola ti. E sobre hello4 Rob? "Ola Rob." E, finalmente, Ola Rob Maria é só "Ola" de novo, porque realmente non entrar algo que se esperaba. Entrou máis nomes que podería soster, polo que só a omisión Ola vostede o comportamento. Así preguntas sobre iso? Ou argumentos de liña de comandos? OK, así que tomar un ollo a un algúns exemplos de como usar de liña de comandos arguments-- primeiro temos argv trazo 1 punto c. Polo tanto, os comentarios dar o que este programa debería estar facendo. Pero teña en conta agora-- este loop for, este corresponde ao estándar exacto Estaba dicindo antes. Nós só terá lugar a ser argc usando no canto de n. Agora argc é realmente o n. É a lonxitude da matriz argv. Entón está interactuando no argv matriz de printf ing cada valor de argv. Entón se eu fai iso. Fai argv 1. El compila. Dot cortar argv 1. Só correndo isto, impresións dot barra argv 1 xa que esa era a única liña de comandos argument-- o nome do programa. Haberá sempre a least-- argc non poderá ser inferior a un, xa que non sempre será, polo menos, ser o nome do programa para ser executado. Entón argv 1 Rob imprimirá argv 1 e, a continuación, na nova liña "Rob". Así, na primeira iteración deste circuíto, i é 0. Argv 0 é o nome do programa. Dot cortar argv 1. E entón argv 1 é o meu primeiro argumento da liña de comandos, que é Rob. Neste punto, somos iguais a ARGC. Nós quebramos fóra do circuíto e estamos a facer. Entón, iso vai traballar para unha arbitraria número de argumentos de liña de comandos. Teña en conta que imprime argv 0, argv 1, 2 argv, argv 3, 4 argv. E non hai argv 5. argc é igual a 5. Así, no argc-- no i é igual a 5, nós saír do loop. Aceptar. Así preguntas sobre que antes de nós ollar para un exemplo máis complexo? Entón argv 2. Todo ben. Entón, aínda estamos imprimindo os argumentos de liña de comandos. Pero agora entender que temos aninhado para un loop. Entón o que está a facer iso? Así, o primeiro circuíto está facendo o que fixo antes. Aínda estamos looping sobre cada argumento da liña de comandos, pero agora esta segunda loop-- temos tamén vin algo así antes. Cando estaba interactuar sobre Zamyla imprimindo Z-A-H-Y-L-A. Polo tanto, este segundo ciclo para int j é igual a 0, n é igual a strlen de soporte argv i. Entón, imos primeiro pensar por as-- imos percorrer. Imos pensar que o ordenador sería facer se eu execute este programa como só dot cortar argv trazo 2. Entón, se eu execute este código, a continuación, argc será igual a 1. E secuencia argv-- hai só vai ser un índice en argv, e que será igual a dot cortar argv 2-- o nome do programa. OK, entón agora eu é igual a 0, i menos 1, i plus plus para int j é igual a 0, n é igual a strlen de argv soporte 0, polo que a primeira iteración deste lazo. argv 0 soporte é barra dot argv 2. Entón, cal é a lonxitude desta corda? Ben, dot cortar A-R-G-V trazo 2. Entón strlen de que será 8. Así j é igual a 0, n é igual a oito. Sempre que j é menor que 8, J ++. E con iso estaremos imprimindo un carácter único, que é argv soporte i j entre parénteses. Así, a única i é cero. Aínda só ten unha argumento da liña de comandos. Nesa primeira iteración do loop for, estamos será a impresión argv soporte 0 0 soporte. E entón j vai incrementar. E nós estamos indo a impresión argv soporte 0 soporte 1. E entón argv soporte 0 soporte 2. Polo tanto, este é o noso primeiro encontro de arrays multidimensionais. Teña en conta que antes de que eu dixen que argv é tecnicamente unha matriz de matrices de caracteres. Entón, aquí, se eu dixo algo así como cadea s é igual a franxa argv i, e entón eu dixo, s soporte j, este sería realizar o mesmo. Agora, xa viu s soporte j antes. Isto é só acceder ao j-th carácter desa cadea. Entón, con iso, estamos empezando a j-th personaxe do argv i-th. Entón, o que en definitiva, esta saída? Fai argv 2. El compila. Dot cortar argv 2. "Rob Maria Hannah," e dar un espazo. Así, vemos que se trata da saída dot na súa propia liña e barra na súa propia liña e un na súa propia liña. Está imprimindo cada carácter individual de cada argumento da liña de comandos. E, a continuación, entre eles, debido a esta nova liña estamos imprimindo aquí abaixo, en entre eles que vai imprimir unha nova liña. Polo tanto, este é semellante ao o trazo argv antes 1, que imprimiu cada argumento da liña de comandos, pero agora estamos imprimindo os argumentos da liña de comandos e, a continuación, a través de cada iteración carácter de cada argumento da liña de comandos para esta saída. OK? Así preguntas sobre iso? Unha cousa a notar é que de liña de comandos arguments-- polo que son separados por espazos como vostede naturalmente esperar que sexan. Así, unha secuencia pode espazos. Non é super importante, pero se eu quería que o argumento terceiro da liña de comandos ter un espazo nel, entón eu podería dicir algo como isto. OK? Entón, iso agora aínda só ten tres de liña de comandos así arguments-- 4. Dot cortar argv trazo 2, Rob, María e Hannah Bloomberg. Aceptar. Preguntas sobre este asunto? Non hai nada especial sobre o carácter de espazo. El só pasa a ser que o de liña de comandos trata o carácter de espazo como o xeito no que separa cada argumento. Todo ben. Entón, a continuación, conxunto Problem dois-- vai ser mirando para cifrado de clave secreta. Así, semellante ao exemplo vimos de Unha Historia de Nadal, vai ser a implantación de algunhas algoritmos que, dada unha mensaxe, vai ser capaz para cifrar a mensaxe que só alguén con ese segredo clave, con aquel anel decodificar, debe ser capaz de descifrar. Entón esta é a edición estándar. Vai estar aplicando dúas versións diferentes. Se ocorrer de dar un ollo en que o hacker Professional-- agora, imos dar vostede unha secuencia como esta, o que representa un contrasinal cifrado. Así, o seu obxectivo é descubrir o que o contrasinal é descifrar. Agora, este é realmente como contrasinais almacénanse en moitos ordenadores, e el só almacena esta secuencia aleatoria de caracteres. Ten que descubrir como chegar dende esta secuencia aleatoria de caracteres ao que o contrasinal orixinal. E, finalmente, tras este conxunto de problemas, ten que ser capaz de comprender o que iso significa. Entón, vai aprender como descifrar este tipo de secuencia aleatoria. Do mesmo xeito, se lembrar de semana 0, pode ver este URL. E ten que ser capaz de descifrar iso eventualmente. Pode non ser feliz cando descifrar-lo e prema na ligazón. Todo ben. É isto por hoxe. Entón, vela a próxima semana! [MÚSICA Electrónica DE XOGO]