>> [REPRODUCCIÓN DE MÚSICA]
DAVID MALAN: De acuerdo.
Esto es CS50, y esto es el fin de semana 2.
Lo siento mucho que no podía ser allí con todos ustedes hoy,
pero usted está en muy buenas manos.
Permítame presentarle Propia Bowden Rob CS50.
ROB BOWDEN: Y, por supuesto, a continuación, tenemos que burlarse del hecho
que él nos envió vertical vídeo y mostrar esto.
>> [REPRODUCCIÓN DE VÍDEO]
>> [REPRODUCCIÓN DE MÚSICA]
>> [PASOS]
>> -Este Vídeo no hizo hay que mirar de esta manera.
Podría haberse evitado.
Diga no a los vídeos verticales.
>> Vídeos -Vertical suceden cuando sostener la cámara por el camino equivocado.
El vídeo termina pareciéndose a una mierda.
>> - [RONCO]
>> -Hay Más y más personas adictas para hacer videos verticales cada día.
No es el crack o nada, pero aún así es muy malo.
Hay dos tipos diferentes de personas que padecen de VVS.
El primer grupo trata la vídeos disparan como imágenes.
Ellos no significan ningún daño.
Ellos simplemente no entienden que mientras que usted puede dar vuelta a una imagen,
realmente no se puede convertir un video.
>> [CRASH]
>> - [MONO SOUNDS]
>> -El Otro grupo es la gente que no dan una [SEÑAL].
>> Síndrome de vídeo -Vertical es peligroso.
Las imágenes en movimiento tienen siempre ha sido horizontal.
Las televisiones son horizontales.
Las pantallas de ordenador son horizontales.
Ojos de la gente son horizontales.
No estamos hechos para ver vídeos verticales.
>> -Me Encanta vídeos verticales.
>> -Nadie Se preocupa por ti.
>> -Si De este problema no se controla, usted también
comenzará mostrando cuatro vídeos a la vez sólo para ahorrar ancho de banda.
>> Vídeos verticales -Letterboxed haría ser del tamaño de un sello de correos.
>> -Y Se extenderá por todas partes.
Pantallas de cine tienen siempre ha sido horizontal.
Si vídeos verticales se convierten en , cines aceptadas
tendrá que ser alto y flaco.
>> -Y Todos los cines haría tiene que conseguir demolido y reconstruido.
Y en el momento en que fueron reconstruidos, Mila Kunis sería vieja y fea.
>> -Aves Se estrellará contra ellos y morir.
>> Ll del `todo se endurecen cuellos de mirando hacia arriba.
>> -Y Nadie va a sentarse en la primera fila nunca más.
>> -George Lucas volverá a la liberación de la estrella Guerras nuevo-- la edición flaco.
>> -Yo Nunca fue realmente capaz de decir la historia que quería contar.
Esta fue una gran oportunidad para mí experimentar con una nueva tecnología.
>> -Eres un idiota.
>> -Cada Vez que un dispositivo móvil se utiliza para grabación de vídeo, la tentación está ahí.
Solo di que no.
Di no a George Lucas.
Di no a la vieja Mila Kunis.
Diga no a los vídeos verticales.
>> -Y Si ves a alguien haciendo, digamos, "no se está disparando esa ficticia derecho!"
>> [REPRODUCCIÓN DE MÚSICA]
>> [FIN DE REPRODUCCIÓN]
>> [Aplausos]
>> [SALIDA DE AUDIO]
ROB BOWDEN: --simple forma de criptografía,
que es básicamente el cifrado y descifrado de mensajes secretos.
Así que aquí tenemos una muy simple juguete.
Y la idea es el anillo exterior gira alrededor del anillo interior.
Y se puede ver, tal vez si el zoom en, que-- es difícil de ver.
Pero, al igual que, el número 1-- así, que se movía.
>> El número 1 se asigna a la letra X, número 2 mapas a la carta
J. increíblemente difícil no saltar hacia adelante.
Carta 2 se asigna a J. Número 3 se asigna a D. Por lo tanto
con este anillo se puede dar alguien un mensaje de 1, 2, 3.
Por alguna razón usted quiero decirles XJD.
Pero usted puede darles algún mensaje de números,
y siempre y cuando que tienen este anillo, que puede descifrar lo que estás tratando de decir.
>> Así que usted puede haber visto este ejemplo particular de la criptografía
antes si la vuelta de la temporada de Navidad has visto una historia de Navidad.
Si nunca has visto antes, a continuación, sólo
encienda TBS a, literalmente, cualquier momento el día de Nochebuena,
porque simplemente lo muestran espalda con espalda con espalda con espalda con espalda todo el día.
Y el vídeo relevante es la siguiente.
[REPRODUCCIÓN DE VÍDEO]
-sea Conoce a todo el mundo que Ralph Parker es presente
nombrado miembro de la Pequeña Orphan Annie círculo secreto
y tiene derecho a todos los honores y los beneficios que ocurren al mismo.
Firmado pequeña huérfana Annie.
Refrendado Pierre Andre en tinta!
Honores y beneficios Ya a la edad de nueve!
>> [GRITA DE RADIO]
-Vamos.
Vamos a seguir adelante con ella.
No necesito todo ese jazz acerca de contrabandistas y piratas.
-Escucha Mañana por la noche con la aventura de conclusión
del Negro del barco pirata.
Ahora, es el momento para Mensaje secreto de Annie
para ustedes miembros del Círculo Secreto.
Recuerde que los niños, los únicos miembros de Annie círculo secreto
puede decodificar mensaje secreto de Annie.
Recuerde, Annie depende de ti.
Establezca sus pasadores a B2.
Aquí está el mensaje.
12.
11.
2.
-Estoy En mi primera reunión secreta.
>> -25.
14.
11.
18.
16.
>> -Oh, Pierre está en gran noche de voz.
Me di cuenta de que esta noche mensaje era realmente importante.
-3.
25.
Ese es un mensaje de Annie sí misma.
Recuerde, no se lo digas a nadie.
>> -Cinco Segundos más tarde, estoy en el único habitación de la casa donde un niño de nueve años
podía sentarse en la intimidad y la decodificación.
¡Ajá!
B!
Fui a la siguiente.
E. La primera palabra es "ser".
S. Venía más fácil ahora.
U. 25.
Eso es R.
-Vamos, Ralphie!
¡Tengo que ir!
-Voy A estar bien abajo, Ma!
Caramba.
T. O. "Asegúrese de" - asegúrese de que?
¿Cuál fue la huerfanita Annie tratando de decir?
Asegúrese de que?
>> -Randy Tiene que ir!
Por favor, ¿salir?
>> Derecho -Todos, mamá!
Estaré fuera cierto!
Yo estaba más cerca ahora.
La tensión era terrible.
¿Que era?
El destino del planeta puede pender de un hilo!
>> -Ralphie, Randy tiene que ir!
>> -Voy A estar bien a cabo, por el amor de Dios!
¡Ya falta poco!
Mis dedos volaban.
Mi mente era una trampa de acero.
Cada poro vibró.
Era casi claro!
Sí.
Asegúrese de beber su Ovaltine.
Ovaltine?
Un comercial de mala muerte?
Hijo de puta.
>> [FIN DE REPRODUCCIÓN]
>> ROB BOWDEN: Así que es como Ovaltine refiere a la criptografía.
Básicamente CS50 simplemente anuncian Ovaltine, por lo que pudimos
ser un comercial de mala muerte para Ovaltine.
Correcto.
Así que ahora la ciencia actual equipo.
Recuerde que el lunes lo dejamos buceo profundo en cuerdas.
Así que estábamos tratando con la cadena "Zamyla."
Y estábamos reconociendo el hecho de que podemos tratar
"Zamyla" como una secuencia de caracteres.
Y recordemos que hemos aprendido la notación soporte.
Así que si esto se almacenaron en una cadena "s", luego
si dijéramos s soporte de 0, que lo haría indicar la Z. letra mayúscula
Y si dijéramos s soporte 1, que indicaría la primera minúscula,
y así sucesivamente hasta s abrazadera 5, lo que indicaría la última a.
>> Ahora recuerde que el longitud de esta cadena es 6,
pero los índices en la cadena son 0 a 5, Z a través de ese durar.
Así que esto ahora se inscribe en un panorama más amplio de la memoria de su computadora, su memoria RAM.
Por lo tanto el programa que alguna parte usted está funcionando su ordenador
hay que recordar Zamyla en algún lugar de la memoria.
Así que puedo tener un voluntario?
Sí por favor.
¿Y cuál es tu nombre?
>> DEAN: Dean.
>> ROB BOWDEN: Dean?
Encantado de conocerte, Dean.
Así que ven aquí, y vamos a tener que dibujar
en nuestro bonito diseño ingenioso de la memoria.
Ahora me gusta pensar en la memoria como una tira larga de bytes,
pero sólo con fines de exhibición vamos simplemente de izquierda a derecha, de arriba abajo.
¿De acuerdo?
>> Así que voy a mostrar una program-- Getstrings.c.
Y por lo que todo este programa es haciendo es solicitar cuatro cuerdas
por parte del usuario con GetString de impresión y luego
lo que primero entró en cadena era.
Estamos haciendo caso omiso del dos al cuatro.
OK.
Así que aquí ahora-- cuando Yo primero s1 petición.
Así que usted es el ordenador.
Y va a implementar GetString.
Así que usted solicita una cadena de mí, y yo digo, está bien, Dean.
Dar la cadena "Dean".
>> Así en algún lugar de memoria que que recordar "Dean".
Así que escribir en la memoria alguna parte.
Perfecto.
OK.
Así que ahora que hemos S2.
Y s2 va a ser una petición a GetString.
Así que voy a entrar en una cadena.
Voy a entrar en "Hannah".
Así, entre "Hannah" en algún lugar en la memoria.
Sí.
A-H.
>> OK, así que ahora s3.
Y va a ser otro solicitar a GetString.
Y lo que ahora escriba "María".
Correcto.
Y luego hay una última solicitud a GetString, s4.
Así que, yo no lo sé.
¿Qué tal vamos con antidisestablishmentarianism.
Así que entrar en esa en la memoria.
Sí.
Así que hacer "Rob".
>> OK.
Así que ahora explain-- ¿por qué deja estos espacios?
¿Por qué tiene esto en blanco espacio aquí, aquí, y aquí arriba?
Sí.
Así notar cuando voy imprimir s1-- así que si nos
tenía en marcha "Hannah" justo al lado de "Dean"
¿cómo sabemos cuando la cadena "Dean" termina?
Así que la impresión de la cadena s1 puede tener acaba de imprimir "DeanHannahMariaRob"
si no tiene ninguna pista cuando "Dean" en realidad termina.
>> Correcto.
Así que en la memoria la forma en que realmente representar a este final de una cadena
es con barra invertida cero.
Así que este espacio es exactamente lo que queríamos.
Debe ser una barra invertida cero.
Esta será una barra invertida cero, y esto será una barra invertida cero.
Y usted puede tener un fabuloso premio por ser un voluntario perfecto.
Tome una bola de la tensión!
>> OK.
Así que esta barra invertida carácter cero es cómo indicar el final de una cadena.
Es la forma en que un programa determinado quiere imprimir una cadena,
es cómo-- recordamos que aprendimos la función strlen la semana pasada?
Longitud de la cadena?
Es la forma de longitud de la cadena es capaz de determinar cuánto tiempo una cadena es.
Simplemente sigue iterando sobre los caracteres
hasta que encuentra el barra invertida carácter cero.
Así que lo importante darse cuenta sobre el carácter de barra invertida cero
Se está representado por todos los ceros en los bits.
Así cuenta de que esto es distinto del carácter cero.
Así que el carácter cero, si usted recuerda en el ejemplo que ha dado al final
de la conferencia donde los personajes mapa a-- como mapas Capital a 65.
Minúscula mapas a 97.
B minúscula sería 98.
Así que el número 0 mapas a-- no lo hago saber de la parte superior de mi cabeza.
44 o 45.
En algún lugar en esa región.
>> Así que el carácter 0 es un número real.
Pero cero barra invertida mapas a todos los bits cero.
Así que hay una distinción entre barra invertida cero,
que llamaremos el terminador nulo.
Hay una distinción entre barra invertida cero y el carácter cero.
>> Correcto.
Así que hablar un poco más sobre las cuerdas.
Así que vemos aquí es así como sería distribuida en la memoria.
Así que esta idea de cadenas como una secuencia de characters-- por lo que el equipo oficial
sciency plazo para la secuencia es una matriz.
Así que podríamos llamar una cadena una serie de caracteres.
Y en realidad hay otros datos tipos que podemos hacer arreglos de.
>> Así que para motivar a esto, mira un ejemplo.
Lo llamaremos ages0.c voy copiar y pegar nuestra plantilla.
OK.
Así que en este programa lo que querer hacer es agarrar la edad
de tres estudiantes en el curso.
Así sabemos que el int age-- y ahora voy a decir 0.
Así que es posible que desee decir edad1, pero a efectos que veremos en breve,
Voy a decir int age0 equivale getInt.
Así que la misma llamada a getInt que hemos estado usando yo
no pasar a ser incitando diciendo: "dame la edad."
Pero justo solicite.
>> Y edad1 equivale getInt.
Y int edad2 equivale getInt.
Así que, de nuevo, tres estudiantes, pero en última instancia, los índices variables
son age0 través edad2.
OK.
Así que este programa va a hacer lo que sea que queremos con age0, edad1 y edad2,
pero este programa en última instancia funciona para tres estudiantes.
>> OK.
Así que ahora lo que si quiero cuatro estudiantes?
Bueno, voy a tener que volver en mi código, cambiar el comentario,
y ahora tenemos un int edad3 equivale getInt.
OK.
Así que ve el problema aquí?
Cuál es el problema con este tipo de configuración?
Sí.
Así que estamos creando un variable para cada estudiante.
Ahora que funciona, pero en última instancia, ¿qué pasa si ahora
digo: "Quiero tomar la edad de ocho estudiantes o 16 estudiantes
o los sin embargo muchos estudiantes de los cientos de estudiantes en CS50
o los miles de estudiantes en el campus o los miles de millones de personas en el mundo?
Así que en última instancia, esto no es sostenible.
Cada vez que se ve a sí mismo copiando y pegar el código de este tipo,
por lo general, debe sentir que hay una mejor manera.
>> Así que aquí es donde introducimos una declaración de matriz.
Así que cuando se declara una matriz, esto es lo que el formato general
va a ser similar.
Vamos a decir que el tipo.
y luego vamos a dar el nombre de esa matriz,
tal como lo definimos ninguna variable dada.
Y, finalmente, estamos utilizando esta notación soporte de nuevo
pero en un contexto diferente de cómo estábamos usando antes.
>> Así que aquí esto parece normal declaración de variables que hemos visto.
Así que hemos visto int x punto y coma antes.
Bueno, ahora podríamos ver algo como int x soportes 5.
Y poner esta idea en la Programa getInt que tener--
por lo que podemos poner en práctica esto de la misma manera.
>> Digamos que en CS tendemos a utilizar n como el número de algo.
Así que aquí vamos a almacenar cuatro estudiantes.
Y ahora podemos decir int edad soporte no N- bastante conseguirlo yet--
para declarar una matriz de cuatro estudiantes.
Entonces, ¿cómo esto se verá en memoria será similar a este.
Desactive esta.
Y vamos a tener un lugar en memory-- voy a poner esta allá arriba.
>> Así en algún lugar de la memoria.
Uno dos tres CUATRO.
Tenemos cuatro enteros en una fila para esta serie de cuatro números enteros.
Así, en la actualidad, ¿cuál es la tamaño de una de estas cajas?
Sí.
Es cuatro bytes.
Es de 32 bits.
Así que ahora esto es diferente de la matriz que nos
vio anteriormente, el conjunto de caracteres.
En una cadena de cada caja fue sólo un byte, porque un personaje es sólo un byte.
Pero con una matriz de enteros, cada uno caja tiene que ser cuatro bytes en orden
para adaptarse a todo un número entero.
Así que esto es lo que una serie de cuatro enteros se vería así.
>> Y luego de vuelta a código.
Ahora queremos realmente tienda enteros en esa matriz.
Así que ahora este es un muy, muy, muy patrón común que en algún punto
convertido en la memoria muscular.
Así int i es igual a 0.
i menor que n.
i plus plus.
Grupo de edad i es igual getInt.
>> Así que este bucle, este formato, usted debe conseguir muy acostumbrado.
Así que esto es por lo general la forma en que lo haremos iterar sobre casi cualquier matriz.
Ahora note este tipo de explica por qué desde el principio
que no teníamos para los bucles de ir para int i es igual a 1, i de menos de o igual a 10.
La razón es que a partir de cero hace que este trabajo bien con matrices.
Así que las matrices son cero indexados.
Si esta matriz es de longitud 4, los índices son del 0 al 3.
>> Así que a través de la primera iteración de este bucle for
vamos a establecer la edad Soporte 0 igual a una llamada a getInt.
Así que lo que me pasó para entrar en el teclado.
En el segundo paso, estamos el establecimiento de edad1 igual a getInt.
Tercer paso, edad2.
Edad3 pase final.
Así que si en la primera pasada del bucle Entro en el número 4 en el teclado,
entonces vamos a insertar un 4 aquí.
Si en la segunda pasada entro 50, vamos a poner un 50 aquí.
En el tercer paso que podría entrar en negativo 1, 1 negativo,
y, finalmente, si entro 0-- y Ahora recuerde que esto era Índice tres.
>> Después de bucle, i es va a ser incrementado a 4.
i ya no es menor que n, que es 4.
Y partimos fuera del circuito.
Entonces, ¿qué tendría de malo esto?
[Inaudible]?
AUDIENCIA: [inaudible]
>> Sí.
Así que el array sólo tiene cuatro lugares, lo que significa que los índices de 0 a 3.
Así que si este fuera el caso, lo haría tomar el valor 4 en algún momento.
grupo de edad 4 será la creación cualquier cosa que esté por aquí
lo que tengo que decir, introduzca 6.
Eso va a configurar esta a 6.
>> Pero no sabemos lo que hay por aquí.
Esto no es memoria que teníamos acceso.
Así que si usted recuerda de la conferencia anterior,
que estaba imprimiendo valores de Zamyla y en algún momento él golpeó esta segmentación
culpa. Así que probablemente va a ver muchos fallos de segmentación como usted
poner en práctica algunos de los conjuntos de problemas.
Pero esta es una de las formas en que usted puede encontrar una segmentación
culpa, cuando se inicia el acceso la memoria de manera que no debe ser.
Así que no tenemos acceso a este lugar y esto es un error.
>> Así que esto es mejor.
Ahora hay todavía una pequeña problema con este código.
Y eso es básicamente que somos sigue estancado en cuatro estudiantes.
Ahora bien, si quiero usar ocho estudiantes, OK.
No es gran cosa.
Puedo entrar, cambiar la comentar y cambiar n.
Ahora esto va a funcionar con ocho estudiantes.
Si compilo esto y correr esto, se mostrará mí--
solicitará enteros para ocho estudiantes y se acaba de trabajar.
Pero es menos que ideal a necesitar recompilar el programa cada vez
Quiero cambiar el número de estudiantes que quiero entrar en las edades para.
>> Así la mejora final sobre esto, como veremos aquí-- estamos
va a solicitar el número de personas.
Aquí tenemos un número de las personas en las habitaciones
o cualquier edades de las personas en la habitación.
Pero vamos a solicitar el número de personas en la sala por parte del usuario.
Así que este es exactamente el mismo do-while bucle que hemos visto antes.
Es exactamente el mismo do-while que
se puede implementar en el set problema.
Así que, mientras que son entrar en un n menos de 1,
por lo que no tiene que estar en menos una persona en la habitación.
Como siempre y cuando sean entrar en un n menos de 1,
entonces vamos a seguir haciendo de nuevo.
Por favor, introduzca el número de personas en la habitación.
Ahora, una vez que tengamos el número de personas en el habitación--
por lo que podría entrar en que hay 200 personas en esta sala.
Entonces aquí vamos a venir y declarar una matriz de tamaño 200.
Estamos declarando matriz que es lo suficientemente grande como para contener 200 edades.
Al bajar, es el bucle for que usted conseguirá muy acostumbrado.
Así iterar sobre esta matriz, asignando a cada ubicación
en esa matriz un entero, y a continuación, en última instancia, aquí estamos
sólo conseguir un ejemplo de la iteración sobre esa matriz, no para asignar valores,
pero para acceder valores.
>> Así que aquí vemos que están diciendo, de un año a partir de ahora,
física% i estará% i años de edad, donde el primero% i es i + 1.
Así que i es la variable de índice.
Y la segunda% i va a ser el valor almacenado en la matriz edades plus 1.
Así que esta más 1 es sólo porque somos diciendo-- esta más 1, i más 1 edades.
Este plus 1 es sólo porque somos diciendo: un año a partir de ahora la persona
será este viejo.
>> Entonces ¿por qué es esto que más 1?
¿Por qué tenemos un plus 1 allí?
Sí.
Así que recuerde matrices son cero indexados.
Así que si estamos imprimiendo esto para alguien que acaba de leer la salida,
entonces probablemente quieren ver algo como persona uno, persona número uno,
será de 20 años de edad.
Persona número dos será de 15 años de edad.
Ellos preferirían no ver persona número cero es de 15 años de edad.
>> Así que la compilación de esto y sólo ver lo que parece como-- Crear un espacio.
Hacer edades compilaciones.
Ejecución de las edades.
Vemos número de personas en la habitación.
Así que voy a decir que hay tres personas en la habitación.
Edad de la persona número uno, digamos 15, 20, 25.
Y ahora voy a decir dentro de un año ahora van a ser 16, 21, 26.
Vamos a ver que esto funciona con un n que no es igual a 3.
Así que si digo número de personas es 5, uno, dos, tres, dos, uno, dentro de un año
van a ser dos, tres, cuatro, tres, dos años de edad.
Así que pude igual fácilmente n han ser 10.000.
Ahora voy a estar sentado aquí durante bastante un tiempo de entrar en las edades, pero esto funciona.
>> Así que ahora en la memoria algún lugar nos tener una matriz de tamaño 10000,
así que en última instancia 40000 bytes, porque hay
cuatro bytes para cada uno de esos números enteros.
Así que hay una gran variedad de tamaño de 10.000 en lo que podamos
almacenar las edades de esas 10.000 personas.
Correcto.
Preguntas sobre nada de esto?
Sí.
¿Qué pasa si usted le dio un número negativo?
Veamos qué pasa.
Así que en este número especial caso-- de personas en la habitación, uno negativo.
Rechazó que, porque hasta aquí nos ha tocado
estar manejando el hecho de que si n es menos de la que vamos a volver a preguntar.
Si intenta declarar una matriz de tamaño negativo,
por lo general no funciona.
>> Entonces intentemos.
Vamos a ignorar lo que sea valor que la entrada para n
y decir las edades int negativo.
Vamos a ver si es que compila.
No estoy seguro.
No.
Así las edades se declara como un matriz con un tamaño negativo.
Así adelantado que reconoce un conjunto no puede ser de tamaño negativo y lo rechaza.
Ahora, si no manejamos este bucle do-while correctamente,
si no nos marchábamos si n es menor que 1--
digamos que simplemente no tenía en absoluto
y en su lugar nos agarramos un entero.
No importa lo que entero es, declaramos un arreglo de ese tamaño.
>> Así que el compilador no puede posiblemente quejarse ahora.
Si compilo esto-- por lo que no se puede quejar,
porque no puede saber que soy va a introducir un número negativo,
que podría ser válido.
Por todo lo que sabe, yo podría introduzca un número positivo,
que es perfectamente válido.
Así que me imagino que si entro negativo 1 personas en la sala, la segmentación de culpa.
>> Tan bien.
Así que vamos a añadir esta atrás justo mantener lo que era originalmente.
Así que las edades.
Ahora si quiero probar un negativo age-- así que vamos a
dicen que hay cinco personas en la habitación.
Edad de la persona número uno es negativo 4, persona de tres
es cero, persona tres-- Aceptar.
Así que aquí, a partir de ahora, el número de personas al año uno será negativo 3 años de edad.
Así que probablemente no tiene sentido.
Pero eso es sólo porque mirando en el código de todo lo que estamos haciendo
está solicitando getInt.
>> Ahora, si hubiéramos tenido la Función GetPositiveInt
o que habíamos simplemente hecho esto tipo de mismo bucle mientras allá abajo,
entonces esto funcionaría perfectamente bien.
Pero en este particular, caso, nosotros no hacemos
pasar a ser el manejo de valores negativos.
¿Alguna otra pregunta sobre matrices?
OK.
>> Así que ahora hemos visto matrices.
Y vamos a tener que utilizar esto para los argumentos de línea de comandos.
Así que en conjunto de problemas dos-- Sé que muchos de ustedes
aún podría estar trabajando en el set problema uno, sino de problemas de dos está subiendo.
En el problema fijó dos, vas a deberán tratar con cadenas, matrices,
y los argumentos de línea de comandos.
>> ¿Cuáles son los argumentos de línea de comandos?
Ahora, se puede ver aquí abajo un pequeño teaser de exactamente lo que es
va a estar pasando.
Vemos int main, argc inc, soportes argv cadena.
Así que primero vamos a tratar de interpretar lo que está tratando de decir.
Ahora ok.
>> Así que en la línea de comandos debe estar acostumbrarse a algunos de estos comandos
ahora, y lo que has de ejecutar cd en el terminal antes.
Así que si decimos pset1 cd, usted sabe que eso debe
estar cambiando en el directorio pset1.
>> Ahora nota que nunca has escrito un programa como esto antes.
Cada programa que usted ha escrito, debe ejecutar, por ejemplo, el DOT recortar Mario,
punto slash codicioso, y luego usted podría pedirá entrada.
Ahora, eso no es lo que cambio de directorio hace.
Cuando se ejecuta cd, no luego decir, qué directorio quieres cd en?
En su lugar, usted acaba de decir, pset1 cd, y simplemente entra en el directorio pset1.
>> Así que de manera similar tenemos otros ejemplos.
hacer hola.
Cuando se ejecuta hacer, no luego decir, qué programa te gustaría hacer?
Usted acaba de decir, en el línea de comandos hacen hola.
>> Move es otro ejemplo.
Éste nos estamos moviendo la mario.c presentar hasta un directorio.
Así que ahora sabemos con este ejemplo realmente estamos pasando dos argumentos.
Hay mario.c como primer argumento, y punto punto es el segundo argumento.
Y luego cuando se ejecuta hace, usted ver que realmente largo comando line--
que realmente largo de comandos impreso en la línea de comandos.
Así que mucho command-- este es sólo una pequeña parte de la misma,
pero ahora tenemos tres argumentos de la línea de comandos.
Dot guión cero, hola, y hello.c.
>> Así que estos son de línea de comandos Las discusiones, argumentos
que está pasando en el línea de comandos para que
no tiene que ser impulsado cuando se ejecuta el programa.
Sería frustrante si cuando Ejecutó sonido metálico que dijo: "Está bien,
que program-- que archivo estás compilando?
Hola C.
Lo banderas ¿verdad gustaría entrar? o guión.
Qué te gustaría el archivo que se llama?
Hola.
No, sólo ejecuta clang dash o hola hello.c.
>> Así que mirando hacia atrás en esto.
Ahora argc argc-- es el recuento de argumentos.
Es el número de la línea de comandos argumentos introducidos en la línea de comandos.
Bueno, técnicamente argv-- la v significa vector,
que básicamente significa matriz.
Pero se puede ignorar eso.
Argv-- tenemos argv cuerda, así soportes argv cadena.
Así que esta es otra forma de corchetes que no has visto antes.
Soporte de manera que hemos visto notación cuando hemos dicho,
como, cadena s es igual Zamyla.
s 0 soporte accede a la Z. carácter
>> También hemos visto corchetes cuando dijimos int edades acorchetan 5.
Eso declaró una matriz de tamaño 5.
Así que aquí es una versión de la soportes que no han visto antes.
Así que este tipo de argv cadena que sería completamente familiarizado
que no sería más que una cadena.
Ahora los paréntesis indican que se trata de una matriz.
Así soportes argv cadena de medios que argv es una matriz de cadenas.
Ahora técnicamente una cadena es una serie de caracteres.
Así que esto es ahora una matriz de un conjunto de caracteres.
Pero es mucho más fácil que pensar esto como una matriz de cadenas.
>> Entonces ¿por qué podrían los soportes estar vacío?
Al igual que, ¿por qué no podemos decir, soporte de 5, soporte n?
Sí.
No sabemos cuántos insumos allí van a ser.
Así que si nos fijamos en el ejemplo sonido metálico, decimos Clang tablero o hola hello.c.
En este caso particular, no suceda haber tres argumentos de la línea de comandos.
Y así el brackets-- ya veremos en un segundo no sería tres.
Técnicamente sería cuatro.
Pero los soportes, lo haríamos por ejemplo, hay tres.
Pero ahora, si nos fijamos en movimiento mario.c punto punto, los soportes
nos gustaría poner dos en ellos.
>> Y hay un montón de comandos que tener un número variable de línea de comandos
argumentos.
Así que lo que esta versión de la notación de corchetes indica
es que argv es una matriz de cadenas.
Pero no sabemos cuántos cuerdas están en esa matriz.
¿Y cómo entonces sabemos cómo muchas cadenas están en la matriz?
Ese es todo el argc punto.
argc nos dice cuánto tiempo argv es.
>> Así que la última cosa a tener en cuenta es que, técnicamente,
el comando en sí cuenta como una de los argumentos de la línea de comandos.
Así pset1 cd, hay dos argumentos de la línea de comandos.
El programa en sí mismo, cd, y luego la parte argumento real de la misma, pset1.
Cualquier programa que usted ha escrito hasta el momento ha tenido puntos de una línea de comandos argument--
slash Mario.
Ese es el único argumento de línea de comandos.
>> Así que ahora mirando clang dash o hola hello.c.
Entonces, ¿qué es argc?
4.
Así argc es 4.
Clang, soporte de manera argv 0 es sonido metálico.
argv soporte 1 es rociada 0.
argv soporte 2 es hola y argv soporte 3 es hello.c.
Ok, así que las preguntas sobre este tema, y ​​luego vamos a mirar algunos ejemplos programáticos.
>> OK.
Así que vamos a echar un vistazo a hello3.c.
Así que esto debe ser familiar de uno de los primeros ejemplos c
teníamos donde nos acaba de decir hola mundo, pero ahora esto es más general.
Así que aquí estamos diciendo hola % s barra invertida n argv soporte 1.
Notice-- tan arriba hasta este punto, esto es lo que mi archivo de plantilla ha parecido.
Tuve int main (void), y luego lo haría hacer algo en la función principal.
Ahora en cambio, una vez que empezamos tratar con argumentos de línea de comandos,
tenemos que declarar un diferente forma de principal.
>> Así que mirando hello3 de nuevo, la principal va
tomar dos argumentos ahora-- int argc, el número de argumentos de línea de comandos,
y la cadena argv paréntesis, el real cuerdas entraron en la línea de comandos.
Así que voy a cambiar eso plantilla para reflejar este hecho.
Ahora cada vez que escribes un programa, si no lo hace
deben realizar ninguna de línea de comandos argumentos, a continuación, sólo tiene que utilizar int main (void).
Pero ahora, cuando usted está escribiendo programas de argumentos de línea de comandos, que
usted va a estar haciendo para el problema establecer dos-- así que ahora que usted está funcionando
programas que necesitan para tomar argumentos de la línea de comandos,
es necesario tener principal de este formulario.
>> Así aquí-- este es el gran uso del argumento de línea de comandos.
Así impresión argv 1.
Aceptar así que vamos a compilar y ejecutar este programa.
Hacer hello3.
Compila.
Dot slash hello3.
Y digamos, "Rob".
Hola Rob.
Si digo: "Hola Maria," hola María.
Hola Maria.
Hannah todavía dice, "hola María, "porque no soy
hacer algo con nuestra argv 2.
Argv 2 ahora sería "Hannah".
Argc sería 3.
¿Y si lo hice?
Así hola nulo.
>> Le tocó brevemente en el hecho que, técnicamente, GetString
podría devolver null, pero vamos a obtener una mucho más en lo nulo en realidad es.
Pero tomarlo como una cuestión de hecho de que no es en general malo.
Hicimos algo mal si se imprime "hola nulo."
Y la razón por la que lo hizo algo mal es-- así,
cuando me encontré hello3 slash dot, argc era 1.
Así que eso significa que la longitud de argv era 1.
Si una matriz es de longitud 1, el único índice válido es cero.
Y aquí argv 1 está fuera el rango de esta matriz.
Era similar a la anterior, cuando traté para almacenar 6 fuera de la final de la matriz.
Así que estoy tratando de acceder a algo fuera de los condes argv,
y estamos recibiendo nulo.
>> Así que una mejor versión de esto, una mejora,
está comprobando explícitamente argc.
Así que si argc es igual a 2, lo que significa que nos encontramos algo así como hello3 slash dot Rob.
Y va a imprimir "hola Rob."
Si argc no es igual a 2, entonces sólo va
hacer caso omiso de lo que pones en el argumento de línea de comandos
como argumentos de línea de comandos.
O si usted no puso ninguna en absoluto, es sólo va a ignorar eso y decir,
"Hola Tu."
>> Así que la elaboración de este.
Hacer hello4.
Y corriendo hello4.
Ejecución de esta manera, lo que debe ser impreso?
"Hola Tu."
Hola Tu.
¿Qué pasa con hello4 Rob?
"Hola Rob."
Y, por último, hola Rob María es simplemente "hola You" de nuevo,
porque no realmente entrar algo que esperaba.
Ha introducido más nombres de lo que podía manejar,
por lo que sólo por defecto en el hola que el comportamiento.
Así que las preguntas sobre esto?
O argumentos de línea de comandos?
>> OK, así que echar un vistazo a un par más ejemplos del uso de
de línea de comandos arguments-- primero hemos argv tablero 1 punto c.
Así que los comentarios regalan lo este programa debería estar haciendo.
Pero note ahora-- este bucle for, Esto coincide con el patrón exacto
Decía antes.
Nos toca estar utilizando argc en lugar de n.
Ahora argc es realmente el n.
Es la longitud de la matriz argv.
Así se iterar sobre el argv array printf-ing cada valor argv.
>> Así que si hago esto.
Hacer argv 1.
Compila.
Dot slash argv 1.
Sólo correr esto, impresiones del punto de barra argv 1
ya que era la única línea de comandos argument-- el nombre del programa.
Siempre habrá por lo menos: argc no puede ser menor que uno,
ya que no siempre lo hará, al menos, ser el nombre del programa a ejecutar.
Así argv 1 Rob imprimirá argv 1 y luego en la nueva línea "Rob".
>> Así que en la primera iteración de este bucle, i es 0.
Argv 0 es el nombre del programa.
Dot slash argv 1.
Y luego argv 1 es mi primera argumento de línea de comando, que es Rob.
En este punto, estamos igual a argc.
Rompemos fuera del circuito y hemos terminado.
Así que esto va a funcionar para una arbitraria número de argumentos de la línea de comandos.
Note que imprime argv 0, argv 1, 2 argv, argv 3, 4 argv.
Y no hay argv 5.
argc es igual a 5.
Así que en argc-- i es igual a 5, rompemos fuera del circuito.
OK.
Así preguntas sobre que antes mirar un ejemplo más complejo?
>> Así argv 2.
Correcto.
Así que todavía estamos imprimiendo los argumentos de la línea de comandos.
Pero ahora cuenta de que tenemos un anidado de bucle.
Entonces, ¿qué está haciendo esto?
Así que el primer bucle está haciendo exactamente lo que lo hacía antes.
Todavía estamos looping más cada argumento de línea de comandos,
pero ahora esta segunda loop-- que hemos También visto algo como esto antes.
Cuando fue iterar sobre Zamyla imprimir Z-A-H-Y-L-A.
Así que este segundo bucle para int j es igual 0, n es igual a strlen del soporte argv i.
>> Así que vamos a pensar por primera el-- vamos a caminar a través.
Vamos a pensar en lo que el equipo haría hacer si me encontré con este programa tan solo dot
slash argv guión 2.
Así que si me encontré con este código, a continuación, argc va a ser igual a 1.
Y la cadena argv-- sólo hay va a ser un índice en argv,
y que va a ser igual a dot slash argv 2-- el nombre del programa.
>> OK, así que ahora i es igual a 0, i menos de 1, i plus plus para int j es igual a 0,
n es igual a strlen de argv soporte 0, por lo que en la primera iteración de este bucle. argv
Soporte 0 es slash dot argv 2.
Entonces, ¿cuál es la longitud de esa cadena?
Bueno, dot recortar A-R-G-V guión 2.
Así strlen de que será de 8.
Así que j es igual a 0, n es igual a 8.
Mientras j es menor que 8, j ++.
Y con eso nos vamos a estar la impresión de un solo carácter, el cual
es argv soporte i soporte de j.
>> Así que la única i es cero.
Todavía sólo tenemos una argumento de línea de comandos.
En ese primera iteración del bucle for, estamos
va a ser la impresión argv soporte 0 0 abrazadera.
Y entonces j se va a incrementar.
Y vamos a la impresión argv soporte 0 soporte 1.
Y luego argv soporte 0 soporte 2.
>> Así que este es nuestro primer encuentro de matrices multidimensionales.
Recuerda antes de que te dije argv que es técnicamente
una matriz de matrices de caracteres.
Así que aquí si me dijo algo así como cadena s es igual a soporte argv i,
y entonces me dije: s soporte de j, esto sería el cumplimiento de la misma cosa.
Ahora, usted ha visto s soporte de j antes.
Eso es sólo acceder a la j-th carácter de esta cadena.
Así que con esto, estamos recibiendo la carácter j-ésimo del argv-i.
>> Entonces, ¿qué se debe esta última instancia de salida?
Hacer argv 2.
Compila.
Dot slash argv 2.
"Rob Maria Hannah" y darnos un poco de espacio.
Así que vemos que esta es la salida punto en su propia línea y barra
en su propia línea y en su propia línea.
Está imprimiendo cada carácter individual
de cada argumento de línea de comandos.
Y a continuación, entre ellos, debido a esta nueva línea
estamos imprimiendo aquí abajo, en entre ellos que va a imprimir una nueva línea.
>> Así que esto es similar a el tablero argv previa 1,
que cada impresa argumento de línea de comandos,
pero ahora estamos imprimiendo los argumentos de la línea de comandos
y luego a través de cada iteración carácter de cada argumento de línea de comandos
para obtener este resultado.
¿De acuerdo?
Así que las preguntas sobre esto?
>> Una cosa a destacar es que arguments-- de línea de comandos
por lo que están separadas por espacios como que, naturalmente, esperar que sean.
Así que una cadena puede tener espacios en el mismo.
No es súper importante, pero si quería que el tercer argumento de línea de comandos
Para tener un espacio en él, entonces yo podría decir algo como esto.
¿De acuerdo?
Así que esta ahora siendo sólo tiene tres de línea de comandos, así arguments-- 4.
Dot slash argv tablero 2, Rob, María, y Hannah Bloomberg.
OK.
Preguntas sobre esto?
>> No hay nada especial sobre el carácter de espacio.
Es sólo pasa a ser que el de línea de comandos trata el carácter de espacio
como la forma de separar cada argumento.
Correcto.
Entonces conjunto de problemas dos-- que vas a ser
mirando a la criptografía de clave secreta.
Por lo tanto, similar al ejemplo vimos de A Christmas Story,
usted va a ser la aplicación de algunas algoritmos que, dado un mensaje,
vas a poder para cifrar el mensaje
que sólo alguien con ese secreto llave, con ese anillo decodificador,
debe ser capaz de descifrar.
>> Así que esa es la edición estándar.
Vas a ser la implementación dos versiones diferentes.
Si le sucede a echar un vistazo por lo que el hacker edition-- ahora,
vamos a dar que una cadena como esta,
lo que representa una contraseña cifrada.
Así que su objetivo es averiguar lo que la contraseña es descifrada.
Ahora bien, esto es en realidad cómo contraseñas se almacenan en una gran cantidad de ordenadores,
y que sólo se almacena este cadena aleatoria de caracteres.
Tienes que encontrar la manera de llegar de esta cadena aleatoria de caracteres
a lo que era la contraseña original.
>> Y, por último, después de esto conjunto de problemas, usted debe
ser capaz de entender lo que esto significa.
Así que usted aprenderá a descifrar este tipo de cadena aleatoria.
Del mismo modo, si usted recuerda de semana 0, que podría haber visto este URL.
Y usted debería ser capaz de descifrar esto eventualmente.
Puede que no seas feliz cuando usted descifrar y haga clic en el enlace.
Correcto.
Eso es todo por hoy.
Así que nos vemos la próxima semana!
>> [REPRODUCCIÓN DE MÚSICA ELECTRÓNICA]