1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> JASON HIRSCHHORN: Bienvenido, todo el mundo, hasta la semana 6. 3 00:00:09,840 --> 00:00:14,790 Estoy feliz de verlos a todos vivos y bien después Cuestionario 0, porque sé que 4 00:00:14,790 --> 00:00:15,810 era un poco áspero. 5 00:00:15,810 --> 00:00:18,370 Pero, por suerte, gracias a todos hizo increíblemente bien. 6 00:00:18,370 --> 00:00:21,680 Y lo que es maravilloso. 7 00:00:21,680 --> 00:00:25,840 Si estás en mi sección, le he dado más de hacer una copia de sus exámenes ya. 8 00:00:25,840 --> 00:00:28,050 >> Un par de ustedes, me voy a encontrar con después de la clase. 9 00:00:28,050 --> 00:00:32,360 Y si usted es un estudiante de la extensión y la usted no ha recibido su concurso de nuevo 10 00:00:32,360 --> 00:00:35,490 sin embargo, el TF está probablemente trabajando en ello y clasificación, y lo recuperará 11 00:00:35,490 --> 00:00:36,490 a la brevedad. 12 00:00:36,490 --> 00:00:39,650 Así que mis estudiantes de extensión que son viendo ahora mismo - en vivo con suerte - 13 00:00:39,650 --> 00:00:42,880 Voy a conseguir sus cuestionarios poco así. 14 00:00:42,880 --> 00:00:45,670 >> Nuestra agenda para hoy es el siguiente. 15 00:00:45,670 --> 00:00:50,170 En primer lugar, vamos a repasar algunos recursos que CS50 proporciona. 16 00:00:50,170 --> 00:00:54,590 Vamos a repasar Cuestionario 0 siguiente, y Voy a responder a cualquier pregunta que nadie 17 00:00:54,590 --> 00:00:57,360 tiene alrededor de problemas concretos. 18 00:00:57,360 --> 00:01:02,050 Y luego, vamos a ir más de / S de archivos y problemas 5. 19 00:01:02,050 --> 00:01:07,360 Estos dos últimos temas se llevarán a el grueso de la sección actual. 20 00:01:07,360 --> 00:01:11,680 >> Pongo esta lista cada semana como un recordatorio a todos ustedes, pero de núcleo 21 00:01:11,680 --> 00:01:14,650 sección, sólo tenemos 90 minutos - que no son capaces de cubrir todo lo que yo 22 00:01:14,650 --> 00:01:16,280 le encantaría cubrir para ustedes. 23 00:01:16,280 --> 00:01:21,170 Pero tenemos un montón de recursos para dibujar sobre como se llega a saber 24 00:01:21,170 --> 00:01:24,000 el material y el trabajo a través de su problema se pone. 25 00:01:24,000 --> 00:01:30,810 >> Un recordatorio de que tengo en línea un texto cuadro, creado para que usted pueda llenar si 26 00:01:30,810 --> 00:01:33,250 tener ninguna reacción para mí, tanto positivos como 27 00:01:33,250 --> 00:01:35,180 constructiva, sobre la sección. 28 00:01:35,180 --> 00:01:38,600 Esa URL se encuentra aquí abajo. 29 00:01:38,600 --> 00:01:43,250 Así que por favor, tome un momento si usted tiene cualquier retroalimentación, ya sea durante la sección, 30 00:01:43,250 --> 00:01:48,030 o después, o después de ver el video en línea, para darme su reacción. 31 00:01:48,030 --> 00:01:52,100 Realmente aprecio todos y cada uno de ellos. 32 00:01:52,100 --> 00:01:55,730 >> Así que he estado teniendo conversaciones pequeñas con una gran parte de mi 33 00:01:55,730 --> 00:01:59,350 estudiantes durante toda la semana - lo entrego pruebas de espalda, hablando de la 34 00:01:59,350 --> 00:02:01,480 Por supuesto, al ver cómo lo está haciendo. 35 00:02:01,480 --> 00:02:05,120 Y un tema ha surgido una y más de hablar de - en 36 00:02:05,120 --> 00:02:05,660 en particular - 37 00:02:05,660 --> 00:02:07,710 boletines de problemas. 38 00:02:07,710 --> 00:02:13,090 Y he encapsulado ese tema en el tablero en este momento. 39 00:02:13,090 --> 00:02:16,630 >> En esencia, hay una diferencia entre el encendido en algo que es 40 00:02:16,630 --> 00:02:19,590 se hace correctamente y algo lo que se hace bien. 41 00:02:19,590 --> 00:02:22,920 La mayoría de la gente ha estado haciendo fantástico en términos de corrección - 42 00:02:22,920 --> 00:02:25,460 De 5 o 4 de sobre todos los conjuntos de procesadores. 43 00:02:25,460 --> 00:02:27,930 La mayoría de la gente se está aquellos todo el tiempo. 44 00:02:27,930 --> 00:02:31,150 >> Sin embargo, sólo porque usted ha hecho algo bien no significa que has 45 00:02:31,150 --> 00:02:34,450 hecho algo tan elegante, o de manera eficiente, o la forma más limpia que 46 00:02:34,450 --> 00:02:35,270 podría haber hecho. 47 00:02:35,270 --> 00:02:36,790 Y eso es lo que el diseño - 48 00:02:36,790 --> 00:02:39,230 y, en menor grado, el estilo - 49 00:02:39,230 --> 00:02:40,450 ejes son para. 50 00:02:40,450 --> 00:02:45,130 Así que todos ustedes estoy presionando, y otros FF están empujando ustedes, no sólo a su vez 51 00:02:45,130 --> 00:02:48,320 en lo que es correcto, pero a su vez en las cosas que son codificadas también. 52 00:02:48,320 --> 00:02:53,060 >> Si no lo hace innecesario que los bucles, No volver a calcular las variables si 53 00:02:53,060 --> 00:02:53,800 usted no tiene que hacerlo. 54 00:02:53,800 --> 00:02:58,520 Por ejemplo, mirando de nuevo a conjunto de problemas 4, cuando la colocación de los ladrillos en la 55 00:02:58,520 --> 00:03:03,070 pantalla, cada fila - todos los ladrillos en una fila dada tiene la misma coordenada y - 56 00:03:03,070 --> 00:03:04,390 la misma altura de coordenadas. 57 00:03:04,390 --> 00:03:07,930 >> De modo que la coordenada y no necesitaban se calculará en el interior del interior 58 00:03:07,930 --> 00:03:11,070 anidado bucle FOR que probablemente utilizó poner los ladrillos en la pantalla. 59 00:03:11,070 --> 00:03:14,030 Sólo hay que calcular cada vez que encendió una fila, o 60 00:03:14,030 --> 00:03:15,200 movido hacia abajo una fila. 61 00:03:15,200 --> 00:03:19,760 Así que decir que si hay 10 ladrillos en una fila, cada ladrillo puede tener el mismo 62 00:03:19,760 --> 00:03:22,260 coordenada, y que la coordenada sólo se puede calcular 63 00:03:22,260 --> 00:03:23,550 una vez para todos aquellos. 64 00:03:23,550 --> 00:03:27,810 >> No necesita ser calculado 10 tiempos, ni tampoco esa necesidad cálculo 65 00:03:27,810 --> 00:03:30,220 a ocurrir en el actual función de llamada - 66 00:03:30,220 --> 00:03:33,020 la nueva llamada a la función gracked. 67 00:03:33,020 --> 00:03:37,820 Así que si eso fue un poco confuso para usted, más genéricamente, las cosas que 68 00:03:37,820 --> 00:03:40,730 no es necesario que suceda cada vez vas a través de un lazo para no deberían ser 69 00:03:40,730 --> 00:03:42,900 poner dentro del bucle FOR, y no debe suceder cada vez que vaya 70 00:03:42,900 --> 00:03:44,080 a través del bucle FOR. 71 00:03:44,080 --> 00:03:49,270 >> Otro buen ejemplo de diseño que vimos en la semana 3 por 15, usted podría mantener 72 00:03:49,270 --> 00:03:50,500 pista del cero. 73 00:03:50,500 --> 00:03:53,600 Así que al inicializar el tablero, save - en una variable global, tal vez - 74 00:03:53,600 --> 00:03:56,140 la x y coordenada y del cero. 75 00:03:56,140 --> 00:03:57,520 Y entonces cada vez que - 76 00:03:57,520 --> 00:04:00,310 en su función de movimiento, cada vez que hagas un movimiento acertado, se actualiza la 77 00:04:00,310 --> 00:04:02,040 ubicación de la cero. 78 00:04:02,040 --> 00:04:06,240 >> Eso le ahorrará el tener que hacer bucles for anidados para mirar a través de la 79 00:04:06,240 --> 00:04:10,700 abordar cada vez que en su función de desplazamiento y encontrar el cero, o encontrar la baldosa, 80 00:04:10,700 --> 00:04:12,460 a continuación, compruebe lo que hay al lado. 81 00:04:12,460 --> 00:04:16,329 En su lugar, usted tiene la ubicación de la cero, usted puede simplemente mirar arriba, abajo, 82 00:04:16,329 --> 00:04:21,160 y a la izquierda y derecha de la misma, para encontrar la baldosa que estaba buscando. 83 00:04:21,160 --> 00:04:24,970 >> Así que en términos de los programas que estamos escritura, nunca son lo suficientemente grandes 84 00:04:24,970 --> 00:04:28,580 que algunas de estas decisiones de diseño son realmente va a obstaculizar su 85 00:04:28,580 --> 00:04:31,670 programa o hacer que se ejecute más lentamente, o tal vez se quede sin memoria. 86 00:04:31,670 --> 00:04:35,030 Pero seguimos empujando ustedes escribir tan elegante y 87 00:04:35,030 --> 00:04:36,450 código eficiente posible. 88 00:04:36,450 --> 00:04:39,910 >> Así que si usted termina de escribir las cosas que tienen una significativamente mayor 89 00:04:39,910 --> 00:04:44,660 ámbito de aplicación, que se escribirá con buena diseñar además de ser correcta. 90 00:04:44,660 --> 00:04:46,300 Así que algunos de ustedes tiene traído eso. 91 00:04:46,300 --> 00:04:48,560 Eso es algo que estamos buscando - algo que vamos a seguir 92 00:04:48,560 --> 00:04:49,840 empujarte chicos en. 93 00:04:49,840 --> 00:04:52,460 >> Si alguna vez tiene alguna pregunta acerca de la diseño de su programa, no dude en 94 00:04:52,460 --> 00:04:56,870 para llegar a mí, y estoy feliz de caminar a través de su programa con usted, 95 00:04:56,870 --> 00:05:01,320 y señalar algunos de los diseños decisiones que tomó, y le dará un poco de 96 00:05:01,320 --> 00:05:06,240 sugerencias sobre cómo hacer que incluso mejores decisiones de diseño. 97 00:05:06,240 --> 00:05:08,870 >> Así que vamos a seguir adelante a hablar de Prueba 0. 98 00:05:08,870 --> 00:05:11,300 Antes de hacer eso, ¿alguien tiene alguna pregunta acerca de lo que 99 00:05:11,300 --> 00:05:14,252 He cubierto hasta ahora? 100 00:05:14,252 --> 00:05:21,500 >> [Crujido] 101 00:05:21,500 --> 00:05:22,750 >> JASON HIRSCHHORN: Siete segundos. 102 00:05:22,750 --> 00:05:23,250 Aceptar. 103 00:05:23,250 --> 00:05:24,970 Vamos a hablar de Prueba 0 para un poco. 104 00:05:24,970 --> 00:05:26,700 La mayoría de ustedes tienen su concurso espalda de 0. 105 00:05:26,700 --> 00:05:29,820 Si no lo hace, es de esperar recuerdas un poco. 106 00:05:29,820 --> 00:05:34,770 Pero si usted ha tomado Cuestionario 0, entonces También tendrá acceso al PDF en línea en 107 00:05:34,770 --> 00:05:35,890 las soluciones de muestra. 108 00:05:35,890 --> 00:05:39,480 >> ¿Alguien tiene alguna pregunta antes de nos lanzamos en el material de la semana sobre 109 00:05:39,480 --> 00:05:41,520 un problema particular en el concurso 0 - 110 00:05:41,520 --> 00:05:44,630 ¿por qué la respuesta es lo que es? 111 00:05:44,630 --> 00:05:47,255 ¿Hay alguien confundido acerca de algo? 112 00:05:47,255 --> 00:05:50,230 Incluso si usted tiene el problema de la derecha, pero simplemente le gustaría que le explique un poco 113 00:05:50,230 --> 00:05:52,640 más, estoy feliz de hacerlo ahora. 114 00:05:52,640 --> 00:05:57,800 >> Así que le he pedido a ustedes para venga preparado con un poco de 115 00:05:57,800 --> 00:05:59,440 pensamientos acerca del concurso 0. 116 00:05:59,440 --> 00:06:02,660 Entonces, ¿quién le gustaría que nos comenzó con una pregunta 117 00:06:02,660 --> 00:06:04,655 comentar acerca del concurso 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [Crujido PAPEL] 120 00:06:10,410 --> 00:06:11,470 >> JASON HIRSCHHORN: No todo el mundo hizo perfectamente. 121 00:06:11,470 --> 00:06:12,720 Así que sé [risas] 122 00:06:12,720 --> 00:06:15,950 tiene que haber algunas preguntas Cuestionario sobre 0. 123 00:06:15,950 --> 00:06:27,940 124 00:06:27,940 --> 00:06:28,590 Aceptar. 125 00:06:28,590 --> 00:06:29,210 Sí. 126 00:06:29,210 --> 00:06:29,600 Ompica. 127 00:06:29,600 --> 00:06:30,520 >> OMPICA: Número 10. 128 00:06:30,520 --> 00:06:33,560 >> JASON HIRSCHHORN: Número 10. 129 00:06:33,560 --> 00:06:35,400 ¿Cuál era el número 10? 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: The - 131 00:06:35,840 --> 00:06:36,420 >> JASON HIRSCHHORN: I haven't - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: include - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> JASON HIRSCHHORN: Número 10 era de ocho para i - i escribir ocho a? 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: Si. 136 00:06:42,980 --> 00:06:43,630 >> JASON HIRSCHHORN: OK. 137 00:06:43,630 --> 00:06:47,390 Así que otra pregunta que podría tener preguntó fue premonitorio estoy? 138 00:06:47,390 --> 00:06:48,630 La respuesta es sí. 139 00:06:48,630 --> 00:06:52,060 En la sección antes de la prueba, le pregunté ustedes para codificar tanto Sterling y 140 00:06:52,060 --> 00:06:52,980 ocho a i. 141 00:06:52,980 --> 00:06:54,770 Ambos se pasó a aparecer en el cuestionario. 142 00:06:54,770 --> 00:06:57,510 Así que espero, que pagó atención a eso. 143 00:06:57,510 --> 00:07:02,520 >> Y si lo hubieras hecho, entonces usted tendría que probablemente hecho bien en los dos. 144 00:07:02,520 --> 00:07:06,030 Pero ocho a i, en realidad no nos Código en clase, pero fue, de nuevo, 145 00:07:06,030 --> 00:07:07,500 preguntó en el cuestionario. 146 00:07:07,500 --> 00:07:13,270 Así que un par de cosas a tener señalar al codificar ocho a i. 147 00:07:13,270 --> 00:07:17,320 Lo primero, por la pregunta, era que usted necesita para comprobar si la cadena 148 00:07:17,320 --> 00:07:20,300 era igual a nulo. 149 00:07:20,300 --> 00:07:28,060 >> Un par de personas trataron de comprobar más adelante en el programa si s abrazadera i era - 150 00:07:28,060 --> 00:07:30,940 por lo que un carácter específico en que string - era igual a nulo. 151 00:07:30,940 --> 00:07:35,600 Pero recuerde, que es esencialmente nula - Es bueno pensar en 152 00:07:35,600 --> 00:07:39,100 null como un puntero cero - un puntero a cero - 153 00:07:39,100 --> 00:07:40,920 en algún lugar de la memoria donde nunca se puede tener acceso. 154 00:07:40,920 --> 00:07:44,730 >> Así que si algo es igual a null, sabemos que no se ha inicializado, 155 00:07:44,730 --> 00:07:46,430 o no hay nada allí. 156 00:07:46,430 --> 00:07:50,950 Así que s es una estrella char, s soporte de i es un char. 157 00:07:50,950 --> 00:07:57,410 Así que tiene sentido comparar s en null, pero no s abrazadera i en null. 158 00:07:57,410 --> 00:07:59,390 Pero una vez más - así que eso fue lo primero que que se suponía que hacer - 159 00:07:59,390 --> 00:08:03,510 asegúrese de que usted realmente tiene una cadena real. 160 00:08:03,510 --> 00:08:08,020 >> A continuación, te quería ir a través de cada carácter de la cadena. 161 00:08:08,020 --> 00:08:12,500 Y así, eso sería como un soporte de s i, por ejemplo, si i es el iterador. 162 00:08:12,500 --> 00:08:17,250 Y dar ese carácter, y obtener su valor real. 163 00:08:17,250 --> 00:08:21,800 Usted lo tiene almacenado como un char, pero el valor ASCII para el cero - 164 00:08:21,800 --> 00:08:23,010 cero como un personaje - 165 00:08:23,010 --> 00:08:25,450 no es en realidad el número entero cero. 166 00:08:25,450 --> 00:08:28,700 Es algún otro número que pueda mirar hacia arriba en la tabla ASCII. 167 00:08:28,700 --> 00:08:30,790 >> Así que una manera de corregir para que - probablemente la mejor manera para corregir 168 00:08:30,790 --> 00:08:33,760 que - se resta de él el valor del carácter - 169 00:08:33,760 --> 00:08:35,140 cero como un carácter. 170 00:08:35,140 --> 00:08:38,490 Comilla simple Así que menos, cero otra comilla simple. 171 00:08:38,490 --> 00:08:44,620 Eso llevará el número que tiene como char, y hacerlo igual a 172 00:08:44,620 --> 00:08:46,720 el número como un número entero real. 173 00:08:46,720 --> 00:08:50,300 >> Y que es muy similar al enfoque mucha gente tomó en el 174 00:08:50,300 --> 00:08:52,800 problema conjunto 2, con César y Viginere - 175 00:08:52,800 --> 00:08:55,160 esas cifras, cuando se ellos fueron rotando. 176 00:08:55,160 --> 00:08:59,210 Así que después de que lo tienes como un número del cero a nueve, a continuación, - dependiendo 177 00:08:59,210 --> 00:09:02,750 a dónde va en el número final - que necesita para multiplicarlo 178 00:09:02,750 --> 00:09:04,120 por una potencia de 10. 179 00:09:04,120 --> 00:09:07,340 >> Algunas personas se trasladaron de nuevo a la frente, y multiplicado el individuo 180 00:09:07,340 --> 00:09:08,940 número por una potencia de 10. 181 00:09:08,940 --> 00:09:11,160 Algunas personas se trasladaron de el frente hacia atrás - 182 00:09:11,160 --> 00:09:14,430 y así se llevó el más alto ordenar números primero - 183 00:09:14,430 --> 00:09:18,190 y salvaría los de un variable de contador global. 184 00:09:18,190 --> 00:09:20,880 Y entonces cada vez que a través de la DE lazo, multiplique ese gigante mundial 185 00:09:20,880 --> 00:09:25,640 contrarrestar variable 10, para hacer espacio para el siguiente carácter. 186 00:09:25,640 --> 00:09:28,750 >> Así que fue un poco confuso y sin yo escribiendo en la pizarra. 187 00:09:28,750 --> 00:09:31,550 Pero la solución de la muestra está disponible para usted. 188 00:09:31,550 --> 00:09:32,870 Pero esas eran las cosas grandes que estábamos buscando. 189 00:09:32,870 --> 00:09:36,400 También una comprobación para asegurarse de que cada carácter individual era de hecho un 190 00:09:36,400 --> 00:09:39,780 carácter entre cero y nueve años, y no algún otro personaje, al igual que una A, 191 00:09:39,780 --> 00:09:41,160 por ejemplo. 192 00:09:41,160 --> 00:09:43,150 >> Esas eran las cosas que estábamos buscando en esa pregunta. 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 ¿Responde esto a su pregunta? 195 00:09:47,980 --> 00:09:49,320 >> OMPICA: Si. 196 00:09:49,320 --> 00:09:50,240 >> JASON HIRSCHHORN: OK. 197 00:09:50,240 --> 00:09:53,940 ¿Hay otras preguntas Cuestionario sobre 0? 198 00:09:53,940 --> 00:09:55,440 ¿Qué pasa con la compilación? 199 00:09:55,440 --> 00:09:56,740 Todo el mundo la compilación correcta? 200 00:09:56,740 --> 00:09:58,370 No. 201 00:09:58,370 --> 00:09:58,840 Había un - 202 00:09:58,840 --> 00:10:01,010 [Risas] 203 00:10:01,010 --> 00:10:03,265 ¿Una pregunta sobre la proceso de compilación? 204 00:10:03,265 --> 00:10:06,050 205 00:10:06,050 --> 00:10:06,966 Wow. 206 00:10:06,966 --> 00:10:11,090 >> [Crujido PAPEL] 207 00:10:11,090 --> 00:10:11,520 >> JASON HIRSCHHORN: Si. 208 00:10:11,520 --> 00:10:11,700 Michael. 209 00:10:11,700 --> 00:10:14,140 >> MICHAEL: ¿Es el número 7 - al azar? 210 00:10:14,140 --> 00:10:16,500 >> JASON HIRSCHHORN: Número 7. 211 00:10:16,500 --> 00:10:20,670 Número 7 era obtener un número entero aleatorio. 212 00:10:20,670 --> 00:10:21,110 Excelente. 213 00:10:21,110 --> 00:10:25,630 Así que te dan un número entero a y un b entero, y quieres un azar 214 00:10:25,630 --> 00:10:28,710 número entero entre a y b. 215 00:10:28,710 --> 00:10:31,740 De hecho, podemos escribir éste en el tablero, porque éste 216 00:10:31,740 --> 00:10:33,320 Era una línea de código - 217 00:10:33,320 --> 00:10:34,390 una manera de hacerlo. 218 00:10:34,390 --> 00:10:37,810 >> Así que se nos da como un Drand función que podría utilizar. 219 00:10:37,810 --> 00:10:38,820 ¿Y qué hace Drand - 220 00:10:38,820 --> 00:10:40,290 suponiendo que ha sido cabeza de serie - 221 00:10:40,290 --> 00:10:42,316 lo que no Drand volver? 222 00:10:42,316 --> 00:10:44,840 >> MICHAEL: Un flotador entre 0,0 y 1,0. 223 00:10:44,840 --> 00:10:45,530 >> JASON HIRSCHHORN: Varios - sí. 224 00:10:45,530 --> 00:10:47,910 Un número entre 0 y 1. 225 00:10:47,910 --> 00:10:51,760 Y así hemos B y A. 226 00:10:51,760 --> 00:10:55,480 Y luego tenemos nuestro número aleatorio entre 0 y 1 que nos ha dado Drand. 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 Algunas personas trataron de poner b, o b menos a, o algo dentro de los 229 00:11:06,630 --> 00:11:07,960 paréntesis. 230 00:11:07,960 --> 00:11:11,210 Eso significaría que son argumentos de esta función. 231 00:11:11,210 --> 00:11:13,450 >> Drand no toma ningún argumento - como getString hace 232 00:11:13,450 --> 00:11:14,330 No tome ningún argumento. 233 00:11:14,330 --> 00:11:16,600 Así que es sólo paren abiertas, cerca Paren - y que, en sí, es 234 00:11:16,600 --> 00:11:17,330 la llamada de función. 235 00:11:17,330 --> 00:11:19,770 Y eso le da un número entre 0 y 1. 236 00:11:19,770 --> 00:11:22,820 Por supuesto, tenemos toda una gama que los números pueden estar adentro 237 00:11:22,820 --> 00:11:28,470 >> Digamos, si b es 10 y es 5, que realmente quiero un número con un rango de 5. 238 00:11:28,470 --> 00:11:36,940 Así que lo siguiente que tenemos que hacer es multiplique esto por el rango b, menos una. 239 00:11:36,940 --> 00:11:40,380 Así que suponiendo que eso multiplicado. 240 00:11:40,380 --> 00:11:42,590 Y eso nos dará un número dentro de un rango dado. 241 00:11:42,590 --> 00:11:46,610 Y ese rango específico de ser el diferencia entre B menos una. 242 00:11:46,610 --> 00:11:50,030 >> Y, por último, que sólo voy a dar desde - decir el rango entre b, menos una 243 00:11:50,030 --> 00:11:52,520 es 5, eso nos da una número de 0 a 5. 244 00:11:52,520 --> 00:11:56,000 Pero si a es en realidad 5, tenemos que impulsar este rango hasta donde es 245 00:11:56,000 --> 00:12:01,380 en realidad supone que, mediante la adición de una. 246 00:12:01,380 --> 00:12:02,580 Así que tiene la derecha de la lógica. 247 00:12:02,580 --> 00:12:03,745 Y entonces, ¿tendría otra pregunta? 248 00:12:03,745 --> 00:12:04,547 >> MICHAEL: No. 249 00:12:04,547 --> 00:12:06,010 Me siento muy tonto en estos momentos. 250 00:12:06,010 --> 00:12:06,405 [Risas] 251 00:12:06,405 --> 00:12:06,730 >> JASON HIRSCHHORN: No. 252 00:12:06,730 --> 00:12:08,640 No se sienta realmente tonto. 253 00:12:08,640 --> 00:12:10,560 Un número de personas que luchó con esta pregunta. 254 00:12:10,560 --> 00:12:13,920 Y luego, la otra pregunta es, Drand, usted ha dicho, le da un flotador - 255 00:12:13,920 --> 00:12:14,940 devuelve un float. 256 00:12:14,940 --> 00:12:18,020 Pero esta función realmente pidió para un entero sea devuelto. 257 00:12:18,020 --> 00:12:23,700 >> Usted no tiene que jugar esta carta de forma explícita a un número entero, porque estos 258 00:12:23,700 --> 00:12:29,090 operaciones se tratan como un todo flotar - como un número de punto flotante. 259 00:12:29,090 --> 00:12:31,570 ¿Te gusta esta voluntad - incluso si esto es un número entero, esta voluntad 260 00:12:31,570 --> 00:12:32,890 debe multiplicarse correctamente. 261 00:12:32,890 --> 00:12:34,000 Toda la multiplicación funcionará. 262 00:12:34,000 --> 00:12:35,060 No es necesario para lanzarlo aquí. 263 00:12:35,060 --> 00:12:36,480 De hecho, usted no debe lanzarlo. 264 00:12:36,480 --> 00:12:37,310 >> Eso lo haría - 265 00:12:37,310 --> 00:12:40,750 si usted desea emitir un número eso es entre 0 y 1 - 266 00:12:40,750 --> 00:12:42,680 un número al azar, un punto flotante - 267 00:12:42,680 --> 00:12:47,850 entonces o bien ser sólo 0 o 1, de modo si no se pierden todos los que la precisión. 268 00:12:47,850 --> 00:12:50,120 Pero al final, cuando regrese, se pone automáticamente 269 00:12:50,120 --> 00:12:51,620 envió como un entero. 270 00:12:51,620 --> 00:12:56,870 Así que usted no tiene que hacer que echando a ti mismo. 271 00:12:56,870 --> 00:13:00,810 >> Así que esta era la respuesta a que se trate, el número 7. 272 00:13:00,810 --> 00:13:02,190 ¿Alguna otra pregunta sobre Cuestionario 0? 273 00:13:02,190 --> 00:13:03,300 Sí, Annie. 274 00:13:03,300 --> 00:13:05,050 >> ANNIE: ¿Cuándo usamos recursivo - 275 00:13:05,050 --> 00:13:07,850 cuando usamos bucles iterativos? 276 00:13:07,850 --> 00:13:10,210 >> JASON HIRSCHHORN: Cuando usted utiliza recursivo - de modo más general, la 277 00:13:10,210 --> 00:13:14,110 pros y los contras de la recursividad frente un enfoque iterativo. 278 00:13:14,110 --> 00:13:17,110 ¿Alguien puede ofrecer un profesional o una estafa? 279 00:13:17,110 --> 00:13:19,460 ¿Por favor? 280 00:13:19,460 --> 00:13:20,140 No puede nadie. 281 00:13:20,140 --> 00:13:22,526 ¿Quién puede ofrecer un profesional o una estafa? 282 00:13:22,526 --> 00:13:26,963 >> [Crujido PAPEL] 283 00:13:26,963 --> 00:13:29,730 >> ESTUDIANTE 1: recursiva es menos codificación - teclear menos? 284 00:13:29,730 --> 00:13:33,170 >> JASON HIRSCHHORN: Así que en general, recursividad en especial, una función - 285 00:13:33,170 --> 00:13:35,750 o un algoritmo como fusión tipo - que se presta 286 00:13:35,750 --> 00:13:37,300 a un enfoque recursivo - 287 00:13:37,300 --> 00:13:40,710 podría ser más sencillo para codificar de forma recursiva. 288 00:13:40,710 --> 00:13:43,940 Y así más sentido hacerlo de forma recursiva. 289 00:13:43,940 --> 00:13:46,230 Así que sería un profesional de la recursividad. 290 00:13:46,230 --> 00:13:46,610 ¿Otros? 291 00:13:46,610 --> 00:13:47,467 ¿Sí? 292 00:13:47,467 --> 00:13:49,240 >> Estudiante 2: Con para la recursividad - 293 00:13:49,240 --> 00:13:50,940 Utiliza más memoria. 294 00:13:50,940 --> 00:13:52,200 >> JASON HIRSCHHORN: Entonces, ¿la derecha. 295 00:13:52,200 --> 00:13:55,720 Una función recursiva mantendrá añadiendo marcos de pila a la pila. 296 00:13:55,720 --> 00:13:59,690 Así que si usted está trabajando en un montón de números, y tienen que llamar a este 297 00:13:59,690 --> 00:14:02,560 funcionar mucho, entonces sin duda ocupan más memoria, mientras que 298 00:14:02,560 --> 00:14:05,810 un enfoque iterativo pondrá solamente un marco de pila en la pila, porque 299 00:14:05,810 --> 00:14:08,420 todo sucede dentro de una función. 300 00:14:08,420 --> 00:14:11,010 >> Cualquier otro pros y los contras? 301 00:14:11,010 --> 00:14:11,500 Sí. 302 00:14:11,500 --> 00:14:12,550 >> ESTUDIANTE 3: Pros de la recursividad. 303 00:14:12,550 --> 00:14:15,950 Usted no tiene que determinar en avanzar en el número de veces que el 304 00:14:15,950 --> 00:14:17,660 código tenía que ser repetido. 305 00:14:17,660 --> 00:14:22,810 Usted puede tener un número predeterminado de veces que usted tiene que repetir, entonces 306 00:14:22,810 --> 00:14:26,420 recursividad es mejor, porque que se necesita ese resultado. 307 00:14:26,420 --> 00:14:27,780 >> JASON HIRSCHHORN: Creo que eso es cierto. 308 00:14:27,780 --> 00:14:30,770 Pero creo que en ambos casos lo haría nunca - 309 00:14:30,770 --> 00:14:33,290 usted probablemente obtener alguna entrada del usuario. 310 00:14:33,290 --> 00:14:35,990 O esta función tendría alguna entrada que determinaría el número de veces que 311 00:14:35,990 --> 00:14:36,730 debe ejecutar. 312 00:14:36,730 --> 00:14:39,520 Así que en general, no lo harías codificar - incluso en un enfoque iterativo - how 313 00:14:39,520 --> 00:14:40,940 muchas veces que bucle debería correr. 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> ¿Tuviste otra eras pensando, Annie? 316 00:14:48,670 --> 00:14:49,330 Aceptar. 317 00:14:49,330 --> 00:14:51,650 Así que estos son probablemente los dos - 318 00:14:51,650 --> 00:14:54,370 el mayor pro y el mayor Con para una recursiva frente 319 00:14:54,370 --> 00:14:57,080 un enfoque iterativo. 320 00:14:57,080 --> 00:14:57,690 Aceptar. 321 00:14:57,690 --> 00:14:59,465 Algo más sobre Cuestionario 0? 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> Vamos a pasar. 324 00:15:09,920 --> 00:15:15,260 File I / O. Hay un maravilloso corto esta semana en el archivo de E / S que se espera 325 00:15:15,260 --> 00:15:19,270 usted ha visto múltiples veces, y admirado. 326 00:15:19,270 --> 00:15:22,910 Una gran cantidad de trabajo fue en eso, y no tengo oído es increíblemente servicial. 327 00:15:22,910 --> 00:15:25,740 También incluí el enlace en esta diapositiva, en caso de que usted no ha tenido un 328 00:15:25,740 --> 00:15:29,160 oportunidad de verlo 10 veces. 329 00:15:29,160 --> 00:15:35,280 >> Por lo tanto, vamos a repasar brevemente la principales pasos para abrir y trabajar 330 00:15:35,280 --> 00:15:38,400 con los archivos y, a continuación vamos a sumergirse en un problema de codificación antes de 331 00:15:38,400 --> 00:15:40,400 examinando el conjunto de problemas. 332 00:15:40,400 --> 00:15:44,330 Así que de nuevo, me voy a poner esto en la pantalla, pero yo voy a hablar de 333 00:15:44,330 --> 00:15:47,630 sólo un minuto acerca de lo que estamos hace aquí con el archivo I/O-- 334 00:15:47,630 --> 00:15:49,090 ¿Qué significa eso? 335 00:15:49,090 --> 00:15:55,280 >> Eso significa que podemos crear nuestra programas y, a continuación, tener nuestros programas 336 00:15:55,280 --> 00:16:00,370 salida, y no han hecho ningún impacto en el mundo exterior de nuestro programa. 337 00:16:00,370 --> 00:16:04,630 Pero cuando empezamos a trabajar con archivos - tanto su lectura y la creación de 338 00:16:04,630 --> 00:16:10,460 ellos - podemos tener algún efecto sobre la mundo exterior de nuestro programa. 339 00:16:10,460 --> 00:16:15,440 >> Al igual que si Microsoft Word no pudo para que todos los documentos de Word, a continuación, 340 00:16:15,440 --> 00:16:18,710 una vez que Microsoft Word dejar de fumar, la totalidad de su trabajo se ha ido, y sería 341 00:16:18,710 --> 00:16:19,740 realmente inútil. 342 00:16:19,740 --> 00:16:23,620 Nosotros, en última instancia queremos ser capaces de escribir programas que pueden afectar a la 343 00:16:23,620 --> 00:16:31,350 mundo que les rodea, tanto mediante la adopción de entradas complejas - en términos de archivos y 344 00:16:31,350 --> 00:16:37,080 a través de archivos, y también la creación interesante y salidas de peso - 345 00:16:37,080 --> 00:16:39,520 en cuanto a los diferentes tipos de archivos. 346 00:16:39,520 --> 00:16:43,730 >> Así que es por eso que estamos empezando a aprender a trabajar con los archivos. 347 00:16:43,730 --> 00:16:47,080 Más específicamente, ¿qué lo que hacemos es la siguiente. 348 00:16:47,080 --> 00:16:47,680 Es muy simple. 349 00:16:47,680 --> 00:16:51,530 Sólo hay un par de pasos, y que se enumeran aquí en este código. 350 00:16:51,530 --> 00:16:55,130 Así que vamos a ir a través de este código línea por línea. 351 00:16:55,130 --> 00:16:57,630 >> En primer lugar, se ve resaltado - 352 00:16:57,630 --> 00:17:01,330 cuando se trabaja con un archivo, independientemente del tipo de archivo se trata, 353 00:17:01,330 --> 00:17:02,670 usted necesita para abrirlo. 354 00:17:02,670 --> 00:17:05,130 Y es que con una llamada a fopen - 355 00:17:05,130 --> 00:17:05,950 aquí mismo. 356 00:17:05,950 --> 00:17:07,980 Incluya el nombre del archivo. 357 00:17:07,980 --> 00:17:11,930 Si el archivo no está en el directorio, o la carpeta donde este programa 358 00:17:11,930 --> 00:17:15,910 vida, entonces también tienen que incluir una ruta en la que archivo es. 359 00:17:15,910 --> 00:17:19,099 >> Vamos a suponer que esta archivo llamado "text.txt" - 360 00:17:19,099 --> 00:17:24,220 un documento de texto simple - se encuentra en la misma carpeta que este programa es. 361 00:17:24,220 --> 00:17:26,859 Así que esa es otra cosa a tener en mente - que si desea abrir un archivo 362 00:17:26,859 --> 00:17:30,050 en otro lugar, que realmente necesita para incluir su ubicación. 363 00:17:30,050 --> 00:17:33,520 >> En segundo lugar, usted puede pasar un argumento a fopen, y eso es lo que quieres hacer 364 00:17:33,520 --> 00:17:34,620 con el archivo. 365 00:17:34,620 --> 00:17:38,450 Hay tres argumentos principales que usted va a pasar a fopen. 366 00:17:38,450 --> 00:17:40,060 ¿Quién me puede dar los tres? 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 ¿Quién me puede dar uno de ellos? 369 00:17:47,130 --> 00:17:48,130 Sí. 370 00:17:48,130 --> 00:17:50,010 >> Estudiante 4: El nombre del archivo? 371 00:17:50,010 --> 00:17:50,440 >> JASON HIRSCHHORN: Lo siento. 372 00:17:50,440 --> 00:17:55,490 Tres argumentos principales que se pueden pasar como segundo argumento a fopen. 373 00:17:55,490 --> 00:17:57,060 Tienes razón - el nombre del archivo es el primer argumento. 374 00:17:57,060 --> 00:18:01,620 Pero el segundo argumento a fopen son generalmente tres cuerdas, y - sí. 375 00:18:01,620 --> 00:18:02,210 Aleja. 376 00:18:02,210 --> 00:18:03,490 >> ALEJA: A para anexados. 377 00:18:03,490 --> 00:18:06,840 >> JASON HIRSCHHORN: A, si quieres anexar a un archivo que ya existe. 378 00:18:06,840 --> 00:18:07,810 >> ESTUDIANTE 5: R para leer. 379 00:18:07,810 --> 00:18:09,930 >> JASON HIRSCHHORN: R, si quiera leer desde un archivo. 380 00:18:09,930 --> 00:18:10,670 >> ESTUDIANTE 6: W para escritura. 381 00:18:10,670 --> 00:18:12,840 >> JASON HIRSCHHORN: Y w, si quiero escribir en un archivo. 382 00:18:12,840 --> 00:18:17,570 Así que en este caso, estamos escribiendo al archivo, por lo que tenemos w. 383 00:18:17,570 --> 00:18:22,360 Lo abres, usted también tiene que guardar el archivo en algún lugar, y eso es con la 384 00:18:22,360 --> 00:18:26,000 código para el lado de la mano izquierda de el operador de asignación - 385 00:18:26,000 --> 00:18:31,220 Estoy creando un puntero a un archivo llamado, en este caso, el archivo. 386 00:18:31,220 --> 00:18:36,070 >> Nosotros no nos vamos a preocupar de lo esta todo en mayúsculas cosa FILE es. 387 00:18:36,070 --> 00:18:40,600 Baste decir, que es un largo corriente de ceros y unos. 388 00:18:40,600 --> 00:18:44,970 Y así es como vamos a operar y entenderlo. 389 00:18:44,970 --> 00:18:47,300 >> Lo siguiente que tenemos que hacer - y esto es muy importante - 390 00:18:47,300 --> 00:18:49,070 cada vez que abra un archivo - 391 00:18:49,070 --> 00:18:54,250 de hecho, cada vez que se llama a malloc, por ejemplo, y conseguir un poco de memoria y tratar de 392 00:18:54,250 --> 00:18:57,980 y guardarlo en un puntero, siempre que desee comprobar para asegurarse de que de que 393 00:18:57,980 --> 00:19:00,230 función no volvió nulo. 394 00:19:00,230 --> 00:19:05,230 >> Así que en este caso, estamos comprobando que hacer Asegúrese de que realmente abrió la 395 00:19:05,230 --> 00:19:10,230 archivo correctamente, y había ningún error en nuestro programa. 396 00:19:10,230 --> 00:19:15,160 A continuación, una vez que hemos comprobado para asegurarse que tenemos un archivo de trabajo, podemos 397 00:19:15,160 --> 00:19:18,520 escribir o leer, o agregar en el archivo. 398 00:19:18,520 --> 00:19:24,270 En este caso, simplemente estoy imprimiendo una línea a este archivo. 399 00:19:24,270 --> 00:19:25,450 >> ¿Cómo lo sé? 400 00:19:25,450 --> 00:19:27,990 Bueno, estoy usando esta función llamada fprintf. 401 00:19:27,990 --> 00:19:30,970 Todas las funciones que va a utilizar al escribir o leer desde o 402 00:19:30,970 --> 00:19:34,950 la manipulación de archivos será similar al funciones que has visto antes, pero 403 00:19:34,950 --> 00:19:38,420 comenzar con la letra F, de pie para archivo. 404 00:19:38,420 --> 00:19:43,440 Y fprintf, a diferencia de nuestra normal de impresión aplicación, toma un argumento adicional, 405 00:19:43,440 --> 00:19:47,800 y que es el archivo donde se que desee imprimir esta línea. 406 00:19:47,800 --> 00:19:50,640 >> Yo no tengo nada que el derecho de los ohai. 407 00:19:50,640 --> 00:19:52,860 Yo no tengo la tercera argumento de printf - 408 00:19:52,860 --> 00:19:57,030 o el segundo argumento de printf, el tercer argumento a fprintf, porque 409 00:19:57,030 --> 00:19:59,480 no tienen los marcadores de posición aquí. 410 00:19:59,480 --> 00:20:01,070 No estoy incluyendo cualquier variable. 411 00:20:01,070 --> 00:20:06,070 Pero, de nuevo, fprintf y todos estos archivos funciones que operan con archivos 412 00:20:06,070 --> 00:20:09,820 en general se va a necesitar el archivo en la que están operando. 413 00:20:09,820 --> 00:20:15,960 >> Finalmente, la última cosa importante a hacer es cerrar el archivo, al igual que 414 00:20:15,960 --> 00:20:19,530 con - siempre que malloc algo, queremos liberar algo, no sea que nos 415 00:20:19,530 --> 00:20:22,730 tener una pérdida de memoria - que queremos para cerrar nuestro archivo. 416 00:20:22,730 --> 00:20:28,180 Si este programa salió sin cerrar el archivo, las probabilidades son nada iría 417 00:20:28,180 --> 00:20:30,050 mal, especialmente si se era un pequeño archivo. 418 00:20:30,050 --> 00:20:35,020 >> Pero sin duda es un buen estilo de codificación y practicar siempre cierre su archivo 419 00:20:35,020 --> 00:20:38,050 cuando haya terminado de utilizarlo. 420 00:20:38,050 --> 00:20:43,630 Así que eso es lo básico de archivo de E / S. Usted probablemente ha visto esto antes, o 421 00:20:43,630 --> 00:20:45,710 vimos que en ese fantástico corto. 422 00:20:45,710 --> 00:20:48,410 ¿Alguien tiene alguna pregunta, antes de entramos en una cierta codificación práctica 423 00:20:48,410 --> 00:20:51,800 problemas, sobre archivo de E / S o el pasos yo nos fuimos de nuevo? 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [PULSA SOUNDS] 426 00:21:03,162 --> 00:21:04,150 >> JASON HIRSCHHORN: ¿Tiene usted tiene una pregunta, Avi? 427 00:21:04,150 --> 00:21:04,660 >> AVI: No. 428 00:21:04,660 --> 00:21:04,740 >> JASON HIRSCHHORN: OK. 429 00:21:04,740 --> 00:21:06,746 Voy a esperar otro Siete segundos. 430 00:21:06,746 --> 00:21:07,590 [Risas] 431 00:21:07,590 --> 00:21:08,620 Esa es una muy buena propina. 432 00:21:08,620 --> 00:21:10,750 Ustedes simplemente no les gusta haciendo preguntas. 433 00:21:10,750 --> 00:21:11,660 Eso está bien. 434 00:21:11,660 --> 00:21:12,330 Aceptar. 435 00:21:12,330 --> 00:21:17,620 Así que nuestro problema es la primera práctica, estamos va a duplicar la función de 436 00:21:17,620 --> 00:21:22,330 una herramienta de línea de comandos que probablemente utilizado antes - copia - 437 00:21:22,330 --> 00:21:23,500 la herramienta de copia. 438 00:21:23,500 --> 00:21:28,050 Si escribe cp y luego pasarlo dos argumentos en su terminal, puede 439 00:21:28,050 --> 00:21:28,980 copiar un archivo. 440 00:21:28,980 --> 00:21:31,220 Y eso es lo que vamos para escribir en estos momentos. 441 00:21:31,220 --> 00:21:35,830 >> Así que de nuevo, la lectura fuera de esta diapositiva, me a escribir un programa que toma 442 00:21:35,830 --> 00:21:38,130 dos y sólo dos de línea de comandos argumentos - 443 00:21:38,130 --> 00:21:40,750 un archivo de origen y un archivo de destino - 444 00:21:40,750 --> 00:21:44,590 y copia el contenido de la fuente presentar al archivo de destino 445 00:21:44,590 --> 00:21:46,960 un byte a la vez. 446 00:21:46,960 --> 00:21:48,510 Así que eso es mucho pedir. 447 00:21:48,510 --> 00:21:52,200 >> Una vez más, un buen método para esto es No ir directamente al código C, pero 448 00:21:52,200 --> 00:21:54,280 descomponerlo en un par de pasos. 449 00:21:54,280 --> 00:21:58,400 En primer lugar, pensar en la lógica - exactamente lo que te estoy pidiendo que hagas - 450 00:21:58,400 --> 00:22:00,620 y comprender la totalidad de la pasos a este problema. 451 00:22:00,620 --> 00:22:04,410 No se encuentra en C, sólo en algunos pseudocódigo, o incluso un modelo mental de 452 00:22:04,410 --> 00:22:06,030 ¿qué está pasando. 453 00:22:06,030 --> 00:22:10,050 >> A continuación, una vez que tenga el pseudocódigo abajo, averiguar cómo el pseudocódigo 454 00:22:10,050 --> 00:22:14,600 mapas en las herramientas y las cosas que hemos aprendido a usar en C. 455 00:22:14,600 --> 00:22:19,070 >> Y, por último, una vez que tenga todo lo que juntos, puede codificar el problema. 456 00:22:19,070 --> 00:22:23,370 Tome 5 a 10 minutos a trabajar en este problema. 457 00:22:23,370 --> 00:22:25,800 Voy a poner las instrucciones una copia de seguridad en un segundo. 458 00:22:25,800 --> 00:22:27,990 Y luego vamos a ir más el pseudocódigo, y el código 459 00:22:27,990 --> 00:22:29,230 que viven como un grupo. 460 00:22:29,230 --> 00:22:31,640 >> Si usted tiene alguna pregunta mientras estás trabajando en esto, no dude en plantear 461 00:22:31,640 --> 00:22:34,260 tu mano, y vendré alrededor y responderlas. 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> ESTUDIANTE 7: ¿Puedo deslizar un pedazo de papel? 464 00:22:39,330 --> 00:22:41,537 >> JASON HIRSCHHORN: ¿Qué pasa? 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [PULSA SOUNDS] 467 00:26:48,043 --> 00:26:48,730 >> JASON HIRSCHHORN: OK. 468 00:26:48,730 --> 00:26:51,710 Vamos a repasar el pseudocódigo primero, y entonces yo te voy a dar un par más 469 00:26:51,710 --> 00:26:52,960 minutos para terminar la codificación. 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> ¿Quién quiere empezar me off con la primera línea de 472 00:26:58,650 --> 00:27:00,030 pseudocódigo para esta función? 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> ESTUDIANTE 8: Revise para asegurarse de que le dieron dos archivos. 475 00:27:05,740 --> 00:27:06,990 >> JASON HIRSCHHORN: OK. 476 00:27:06,990 --> 00:27:21,270 477 00:27:21,270 --> 00:27:22,990 Y si no lo somos? 478 00:27:22,990 --> 00:27:25,974 >> ESTUDIANTE 8: Yo regresaría 0. 479 00:27:25,974 --> 00:27:27,872 >> JASON HIRSCHHORN: Si volvemos 0? 480 00:27:27,872 --> 00:27:30,182 >> ESTUDIANTE 8: Regreso a - 481 00:27:30,182 --> 00:27:30,650 supresión. 482 00:27:30,650 --> 00:27:30,850 Lo siento. 483 00:27:30,850 --> 00:27:31,210 >> JASON HIRSCHHORN: Si. 484 00:27:31,210 --> 00:27:32,710 Probablemente no es 0. 485 00:27:32,710 --> 00:27:34,680 Debido a 0 significa que todo estaba bien. 486 00:27:34,680 --> 00:27:35,030 Aceptar. 487 00:27:35,030 --> 00:27:36,730 Así que esa es la primera línea de pseudocódigo. 488 00:27:36,730 --> 00:27:38,715 ¿Quién tiene la segunda línea de pseudocódigo? 489 00:27:38,715 --> 00:27:40,630 >> ESTUDIANTE 9: Abierto tanto a los archivos? 490 00:27:40,630 --> 00:27:41,880 >> JASON HIRSCHHORN: Abra ambos archivos. 491 00:27:41,880 --> 00:27:49,970 492 00:27:49,970 --> 00:27:50,920 ¿De acuerdo? 493 00:27:50,920 --> 00:27:52,850 >> ESTUDIANTES 10: Compruebe si el archivo es NULL? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> JASON HIRSCHHORN: Compruebe de que ni son NULL. 496 00:28:12,580 --> 00:28:15,800 Como acotación al margen - 497 00:28:15,800 --> 00:28:17,540 slash 0 - 498 00:28:17,540 --> 00:28:18,887 es que NULL? 499 00:28:18,887 --> 00:28:20,080 >> ESTUDIANTES 11: No. 500 00:28:20,080 --> 00:28:21,190 >> JASON HIRSCHHORN: Eso no es NULL. 501 00:28:21,190 --> 00:28:23,400 Eso se llama el terminador NULL. 502 00:28:23,400 --> 00:28:25,580 En realidad se escribe con una sola l. 503 00:28:25,580 --> 00:28:28,580 Así que comprobar algo en contra de eso - eso es en realidad un personaje - 504 00:28:28,580 --> 00:28:31,710 así que el revisar algo en contra de que se no es igual que la comprobación para ver si 505 00:28:31,710 --> 00:28:32,690 es igual a NULL. 506 00:28:32,690 --> 00:28:34,100 >> Y algunas personas - 507 00:28:34,100 --> 00:28:36,040 en sus pruebas y su problema juegos - tienen la 508 00:28:36,040 --> 00:28:36,890 dos de los confundidos. 509 00:28:36,890 --> 00:28:38,830 Pero los dos de ellos son de hecho diferentes. 510 00:28:38,830 --> 00:28:40,220 Uno termina una cadena - 511 00:28:40,220 --> 00:28:43,210 uno es un puntero a 0. 512 00:28:43,210 --> 00:28:46,490 >> ESTUDIANTES 12: ¿Por qué no le echa a asegurarse de que los archivos no son NULL 513 00:28:46,490 --> 00:28:48,670 antes de abrirlos? 514 00:28:48,670 --> 00:28:54,772 >> Así ahorra abierta: JASON HIRSCHHORN algo en ese archivo. 515 00:28:54,772 --> 00:28:57,780 Y si vuelves aquí - 516 00:28:57,780 --> 00:28:59,520 por lo que esta línea - fopen - 517 00:28:59,520 --> 00:29:05,300 le dará una dirección y tienda esa dirección en archivo si funciona. 518 00:29:05,300 --> 00:29:07,650 Si no funciona, almacenará NULL - 519 00:29:07,650 --> 00:29:08,020 >> ESTUDIANTES 12: Oh. 520 00:29:08,020 --> 00:29:08,180 Aceptar. 521 00:29:08,180 --> 00:29:08,500 Te tengo. 522 00:29:08,500 --> 00:29:09,050 >> JASON HIRSCHHORN: En el archivo. 523 00:29:09,050 --> 00:29:11,990 Así que no puedes comprobar NULL antes de que usted los haya abierto. 524 00:29:11,990 --> 00:29:13,520 NULL significa algo que no hizo trabajar correctamente. 525 00:29:13,520 --> 00:29:18,030 526 00:29:18,030 --> 00:29:18,740 Aceptar. 527 00:29:18,740 --> 00:29:22,590 Así que asegúrese de no decir? 528 00:29:22,590 --> 00:29:23,200 ¿O? 529 00:29:23,200 --> 00:29:23,770 ¿Qué pensamos? 530 00:29:23,770 --> 00:29:24,310 Vamos a ir con eso. 531 00:29:24,310 --> 00:29:24,520 >> ESTUDIANTES 13: Es. 532 00:29:24,520 --> 00:29:25,020 >> JASON HIRSCHHORN: ¿Es? 533 00:29:25,020 --> 00:29:25,930 Tampoco es? 534 00:29:25,930 --> 00:29:26,350 >> ESTUDIANTES 13: Es. 535 00:29:26,350 --> 00:29:26,390 >> JASON HIRSCHHORN: OK. 536 00:29:26,390 --> 00:29:28,510 Parece que tenemos un poco de consenso sobre eso. 537 00:29:28,510 --> 00:29:30,520 Tampoco es NULL. 538 00:29:30,520 --> 00:29:32,250 Bueno, la próxima línea de pseudocódigo. 539 00:29:32,250 --> 00:29:33,600 ¿Quién no me ha dado una línea todavía? 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 Vamos a esperar para usted. 542 00:29:38,295 --> 00:29:39,020 Sí. 543 00:29:39,020 --> 00:29:40,895 >> ESTUDIANTES 14: Hay que leer desde el primer archivo? 544 00:29:40,895 --> 00:29:42,290 >> JASON HIRSCHHORN: OK. 545 00:29:42,290 --> 00:29:46,240 >> ESTUDIANTES 14: O utilizamos fscanf o algo así como que el primer archivo? 546 00:29:46,240 --> 00:29:50,650 >> JASON HIRSCHHORN: Así que queremos leer desde el primer archivo y - 547 00:29:50,650 --> 00:29:51,900 vamos a poner que justo aquí. 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 Leer desde el archivo de origen. 550 00:30:01,880 --> 00:30:05,370 Y entonces, ¿qué hacemos después de que leer desde el archivo de origen? 551 00:30:05,370 --> 00:30:06,620 Alguien más? 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> ESTUDIANTES 15: Escribir en el archivo de destino? 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> JASON HIRSCHHORN: Le escribimos para el archivo de destino, y - 556 00:30:25,620 --> 00:30:26,210 Aceptar. 557 00:30:26,210 --> 00:30:30,030 ¿Qué más nos falta? 558 00:30:30,030 --> 00:30:32,460 Alguien más que no me ha dado un línea de código sin embargo - de pseudocódigo. 559 00:30:32,460 --> 00:30:33,510 Sí. 560 00:30:33,510 --> 00:30:36,540 >> ESTUDIANTES 16: Tal vez siempre se puede comprobar si hay algo que leer para, 561 00:30:36,540 --> 00:30:37,970 como la siguiente línea? 562 00:30:37,970 --> 00:30:39,550 Que son como la línea siguiente, ver si existe. 563 00:30:39,550 --> 00:30:40,660 >> [ELECTRÓNICA BEEP] 564 00:30:40,660 --> 00:30:41,095 >> JASON HIRSCHHORN: Vaya. 565 00:30:41,095 --> 00:30:43,120 Esa es mi software de diario. 566 00:30:43,120 --> 00:30:43,580 ¿Sí? 567 00:30:43,580 --> 00:30:44,960 >> ESTUDIANTES 16: Así es. 568 00:30:44,960 --> 00:30:48,940 >> JASON HIRSCHHORN: Así que dar a mí una vez más. 569 00:30:48,940 --> 00:30:51,640 >> ESTUDIANTES 16: Compruebe si hay siendo una próxima línea de la 570 00:30:51,640 --> 00:30:52,920 archivo de fuente para leer. 571 00:30:52,920 --> 00:30:53,500 >> JASON HIRSCHHORN: OK. 572 00:30:53,500 --> 00:30:56,060 Así que no estamos leyendo las líneas - estaban leyendo bytes aquí - 573 00:30:56,060 --> 00:30:57,590 pero estás en lo correcto. 574 00:30:57,590 --> 00:31:00,040 Queremos leer y escribir hasta no existen más bytes. 575 00:31:00,040 --> 00:31:11,430 576 00:31:11,430 --> 00:31:11,735 Aceptar. 577 00:31:11,735 --> 00:31:16,940 Y lo que estos deben ser realmente sangría un poco, porque están ahí abajo. 578 00:31:16,940 --> 00:31:17,470 ¿Cierto? 579 00:31:17,470 --> 00:31:20,620 Hasta que no estamos fuera de bytes, que vamos a leer desde el archivo de origen y escribir 580 00:31:20,620 --> 00:31:22,160 al archivo de destino. 581 00:31:22,160 --> 00:31:24,510 >> Y entonces, ¿qué es lo último línea de pseudocódigo? 582 00:31:24,510 --> 00:31:26,380 Alguien que no es dado mí algo todavía. 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> ESTUDIANTES 17: Cierre los archivos? 585 00:31:30,260 --> 00:31:31,510 >> JASON HIRSCHHORN: Exactamente. 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 Cierre los archivos. 588 00:31:37,450 --> 00:31:38,400 Así que ahí está nuestro pseudocódigo. 589 00:31:38,400 --> 00:31:41,870 Voy a poner el pseudocódigo en gedit, y en un par de minutos que 590 00:31:41,870 --> 00:31:44,626 cifrará esto juntos. 591 00:31:44,626 --> 00:33:55,280 592 00:33:55,280 --> 00:33:56,000 >> Aceptar. 593 00:33:56,000 --> 00:33:58,290 Vamos a empezar como un grupo. 594 00:33:58,290 --> 00:33:59,940 Nishant, tengo mi nuevo archivo. 595 00:33:59,940 --> 00:34:01,130 Acabo de abrir esto. 596 00:34:01,130 --> 00:34:01,880 Untitled document 1. 597 00:34:01,880 --> 00:34:05,490 ¿Qué es lo primero que debo hacer? 598 00:34:05,490 --> 00:34:07,040 >> NISHANT: Incluya las bibliotecas? 599 00:34:07,040 --> 00:34:08,219 >> JASON HIRSCHHORN: OK. 600 00:34:08,219 --> 00:34:11,070 ¿Qué bibliotecas? 601 00:34:11,070 --> 00:34:17,570 >> NISHANT: stdio.h, stdlib.h, creo? 602 00:34:17,570 --> 00:34:18,000 >> JASON HIRSCHHORN: OK. 603 00:34:18,000 --> 00:34:21,592 ¿Qué es stdlib para? 604 00:34:21,592 --> 00:34:23,010 >> NISHANT: se me olvidó. 605 00:34:23,010 --> 00:34:23,219 >> JASON HIRSCHHORN: OK. 606 00:34:23,219 --> 00:34:24,179 Así incluir stdio. 607 00:34:24,179 --> 00:34:28,630 ¿Qué debo hacer antes incluso de Empiezo codificación? 608 00:34:28,630 --> 00:34:29,710 >> NISHANT: Escribe un encabezado? 609 00:34:29,710 --> 00:34:31,830 >> JASON HIRSCHHORN: ¿Cómo Qué debo hacer para que color? 610 00:34:31,830 --> 00:34:34,060 >> [VOCES interponiendo] 611 00:34:34,060 --> 00:34:35,040 >> NISHANT: ¿Cómo conseguir que color? 612 00:34:35,040 --> 00:34:38,060 >> JASON HIRSCHHORN: ¿Cómo Qué debo hacer para la codificación de colores? 613 00:34:38,060 --> 00:34:38,570 >> NISHANT: No sé. 614 00:34:38,570 --> 00:34:38,830 Oh. 615 00:34:38,830 --> 00:34:39,389 Guardar. 616 00:34:39,389 --> 00:34:39,929 >> JASON HIRSCHHORN: Save. 617 00:34:39,929 --> 00:34:40,270 Sí. 618 00:34:40,270 --> 00:34:41,760 Debería guardarlo como un archivo. C. 619 00:34:41,760 --> 00:34:46,239 Así que guardarlo en el escritorio como cp.c. 620 00:34:46,239 --> 00:34:47,280 Sweet. 621 00:34:47,280 --> 00:34:51,199 Y si quiero conseguir el estilo completo puntos, lo que habría de hacerlo 622 00:34:51,199 --> 00:34:53,085 incluir en la parte superior? 623 00:34:53,085 --> 00:34:58,390 >> NISHANT: Se puede escribir su nombre, nombre del programa, y ​​el propósito 624 00:34:58,390 --> 00:34:59,640 del programa así? 625 00:34:59,640 --> 00:35:08,400 626 00:35:08,400 --> 00:35:10,040 >> JASON HIRSCHHORN: Tiene buena pinta. 627 00:35:10,040 --> 00:35:10,470 Excelente. 628 00:35:10,470 --> 00:35:12,940 Así que nos has empezado perfectamente. 629 00:35:12,940 --> 00:35:13,720 # Include - 630 00:35:13,720 --> 00:35:15,365 nosotros también vamos a escribir - 631 00:35:15,365 --> 00:35:30,050 632 00:35:30,050 --> 00:35:30,870 Aceptar. 633 00:35:30,870 --> 00:35:33,520 Así que creo que todo lo que estoy listo para ir. 634 00:35:33,520 --> 00:35:38,003 ¿Quién tiene la primera línea de código para mí - o las primeras líneas de código que 635 00:35:38,003 --> 00:35:41,280 que se necesita para satisfacer nuestra primera comentar en pseudocódigo? 636 00:35:41,280 --> 00:35:41,985 Usted. 637 00:35:41,985 --> 00:35:48,780 >> ESTUDIANTES 18: ¿No debería ser int argc, y luego char * argv? 638 00:35:48,780 --> 00:35:49,490 >> JASON HIRSCHHORN: Creo que tienes razón. 639 00:35:49,490 --> 00:35:56,270 Vamos a cambiarlo a int principales, paren abiertas, int argc, coma, char * argv? 640 00:35:56,270 --> 00:35:57,150 Al igual que? 641 00:35:57,150 --> 00:35:57,410 >> ESTUDIANTES 18: Soportes. 642 00:35:57,410 --> 00:35:58,260 >> JASON HIRSCHHORN: Soportes. 643 00:35:58,260 --> 00:35:59,860 Soporte Abrir, cerrar el paréntesis, cerca de los padres. 644 00:35:59,860 --> 00:36:00,240 Perfect. 645 00:36:00,240 --> 00:36:02,160 Ahora puedo tomar argumentos de línea de comandos. 646 00:36:02,160 --> 00:36:02,430 Aceptar. 647 00:36:02,430 --> 00:36:04,250 Asegurarnos de que nos dan dos archivos. 648 00:36:04,250 --> 00:36:07,905 Usted me puede dar eso también. 649 00:36:07,905 --> 00:36:09,180 >> ESTUDIANTES 18: Si argc - 650 00:36:09,180 --> 00:36:11,060 éste no es igual a 3. 651 00:36:11,060 --> 00:36:14,360 >> JASON HIRSCHHORN: Si paren abiertas argc no es igual a 3? 652 00:36:14,360 --> 00:36:16,970 >> ESTUDIANTES 18: Sí, regrese 1 ni nada. 653 00:36:16,970 --> 00:36:17,460 >> JASON HIRSCHHORN: Lo siento. 654 00:36:17,460 --> 00:36:19,120 >> ESTUDIANTES 18: Retorno 1 ni nada. 655 00:36:19,120 --> 00:36:20,270 >> JASON HIRSCHHORN: Vuelta 1. 656 00:36:20,270 --> 00:36:22,230 ¿De acuerdo? 657 00:36:22,230 --> 00:36:22,970 Grande. 658 00:36:22,970 --> 00:36:24,290 Abra ambos archivos. 659 00:36:24,290 --> 00:36:26,160 ¿Quién puede ayudarme a abrir ambos archivos? 660 00:36:26,160 --> 00:36:28,125 ¿Quién no me ha dado el código todavía? 661 00:36:28,125 --> 00:36:31,510 662 00:36:31,510 --> 00:36:32,320 Kurt? 663 00:36:32,320 --> 00:36:36,145 >> KURT: Así que todas las tapas de origen estrella F-I-L-E. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> JASON HIRSCHHORN: Voy para sacar las vocales. 666 00:36:40,920 --> 00:36:41,570 Esos son cool. 667 00:36:41,570 --> 00:36:42,716 Es como Tumblr. 668 00:36:42,716 --> 00:36:44,610 >> ESTUDIANTES 18: igual a fopen - 669 00:36:44,610 --> 00:36:46,612 >> JASON HIRSCHHORN: igual a fopen? 670 00:36:46,612 --> 00:36:49,870 >> ESTUDIANTES 18: paren Abiertas, argv, soporte abierto. 671 00:36:49,870 --> 00:36:50,055 >> JASON HIRSCHHORN: Espera. 672 00:36:50,055 --> 00:36:50,240 Lo siento. 673 00:36:50,240 --> 00:36:51,050 Paren en Abrir. 674 00:36:51,050 --> 00:36:51,456 Aceptar. 675 00:36:51,456 --> 00:36:53,080 >> ESTUDIANTES 18: Así es. 676 00:36:53,080 --> 00:36:55,110 Argv sub 1. 677 00:36:55,110 --> 00:36:55,860 >> JASON HIRSCHHORN: Sub 1? 678 00:36:55,860 --> 00:36:56,140 >> ESTUDIANTES 18: Así es. 679 00:36:56,140 --> 00:36:58,540 Argv paréntesis abierto 1 - 680 00:36:58,540 --> 00:36:59,730 Sí. 681 00:36:59,730 --> 00:37:06,470 Y luego coma y haga doble abierta cita, r, comillas dobles, 682 00:37:06,470 --> 00:37:08,250 cerca paren, y coma. 683 00:37:08,250 --> 00:37:09,450 >> JASON HIRSCHHORN: Sweet. 684 00:37:09,450 --> 00:37:10,950 Y ¿qué pasa con el otro? 685 00:37:10,950 --> 00:37:16,030 >> ESTUDIANTES 18: Muy similar, pero en lugar de S-R-C, que se dice que D-S-T. 686 00:37:16,030 --> 00:37:17,060 >> JASON HIRSCHHORN: Oo! 687 00:37:17,060 --> 00:37:17,772 Me gusta eso. 688 00:37:17,772 --> 00:37:20,010 >> ESTUDIANTES 18: Sólo D-S-T. Sí. 689 00:37:20,010 --> 00:37:23,057 Y entonces argv, soporte abierto, 2. 690 00:37:23,057 --> 00:37:23,200 Sí. 691 00:37:23,200 --> 00:37:26,720 Y entonces w en lugar de r. 692 00:37:26,720 --> 00:37:27,620 Sí. 693 00:37:27,620 --> 00:37:29,630 >> JASON HIRSCHHORN: Muy bien. 694 00:37:29,630 --> 00:37:31,360 Siguiente par de líneas. 695 00:37:31,360 --> 00:37:34,040 Además, si alguien tiene cosas que añadir a líneas que hemos hecho, no dude en 696 00:37:34,040 --> 00:37:35,690 añadir esos también. 697 00:37:35,690 --> 00:37:37,520 Asegúrese de que no es NULL. 698 00:37:37,520 --> 00:37:41,450 ¿Quién me puede dar el código que necesito satisfacer esa línea de pseudocódigo? 699 00:37:41,450 --> 00:37:44,430 700 00:37:44,430 --> 00:37:45,870 Archer. 701 00:37:45,870 --> 00:37:58,645 >> ARQUERO: Si el original es igual a los iguales NULL o dst es igual a los iguales 702 00:37:58,645 --> 00:38:04,590 NULL, entonces regresa - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> JASON HIRSCHHORN: ¿Qué? 705 00:38:07,976 --> 00:38:08,890 >> ARQUERO: Return 2? 706 00:38:08,890 --> 00:38:09,760 >> JASON HIRSCHHORN: Return 2. 707 00:38:09,760 --> 00:38:14,400 Así que si src paren abierto es igual a es igual a NULL, o - 708 00:38:14,400 --> 00:38:15,590 lo que thing's - pipa? 709 00:38:15,590 --> 00:38:16,346 Pipe? 710 00:38:16,346 --> 00:38:17,140 Lo llamaremos tubería. 711 00:38:17,140 --> 00:38:22,340 Tubería, tubería, dst es igual a los iguales NULL, devuelve 2. 712 00:38:22,340 --> 00:38:23,900 ¿De acuerdo? 713 00:38:23,900 --> 00:38:26,060 Hasta que no estamos fuera de bytes - 714 00:38:26,060 --> 00:38:29,820 que tipo de saltamos este paso de la parte pseudocódigo para ir a aquí. 715 00:38:29,820 --> 00:38:31,970 >> Pero hasta que estemos fuera de bytes - lo que hace que el sonido tiene? 716 00:38:31,970 --> 00:38:34,680 ¿Qué tipo de estructura C - 717 00:38:34,680 --> 00:38:36,160 pero yo no uso la palabra estructura, porque vamos a empezar a utilizar 718 00:38:36,160 --> 00:38:37,350 que en otros casos - 719 00:38:37,350 --> 00:38:39,495 pero la herramienta C suena eso? 720 00:38:39,495 --> 00:38:39,970 >> ESTUDIANTES 19: Un bucle. 721 00:38:39,970 --> 00:38:40,980 >> JASON HIRSCHHORN: Un bucle. 722 00:38:40,980 --> 00:38:43,060 Suena como un bucle. 723 00:38:43,060 --> 00:38:49,670 Entonces, ¿quién me puede dar la primera línea del código del bucle aquí? 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 También puede elegir qué tipo de bucle que desea, si me das 726 00:39:01,980 --> 00:39:03,215 esta línea de código. 727 00:39:03,215 --> 00:39:04,150 Hay tres tipos. 728 00:39:04,150 --> 00:39:06,530 Te dan a elegir. 729 00:39:06,530 --> 00:39:08,080 Yo sugeriría una de esas. 730 00:39:08,080 --> 00:39:08,410 Avi. 731 00:39:08,410 --> 00:39:09,230 ¿Qué quieres? 732 00:39:09,230 --> 00:39:09,960 >> AVI: FOR. 733 00:39:09,960 --> 00:39:11,460 >> JASON HIRSCHHORN: FOR. 734 00:39:11,460 --> 00:39:15,180 >> AVI: int i es igual a cero. 735 00:39:15,180 --> 00:39:17,360 >> JASON HIRSCHHORN: OK. 736 00:39:17,360 --> 00:39:18,570 >> AVI: Esta parte no estoy seguro. 737 00:39:18,570 --> 00:39:29,080 Pero i es menor que el tamaño de la fuente de estrella? 738 00:39:29,080 --> 00:39:31,128 No estoy seguro de eso. 739 00:39:31,128 --> 00:39:32,580 >> JASON HIRSCHHORN: OK. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Debido a que usted desea que el tamaño de un archivo, ¿no? 741 00:39:35,870 --> 00:39:41,090 >> JASON HIRSCHHORN: Así que esto probablemente no lo hará nos dan el tamaño de la actual 742 00:39:41,090 --> 00:39:43,010 archivo en bytes. 743 00:39:43,010 --> 00:39:47,680 Entonces, ¿qué otra cosa podíamos hacer? 744 00:39:47,680 --> 00:39:48,810 ¿Qué otro tipo de bucle? 745 00:39:48,810 --> 00:39:50,180 ¿O debemos seguir con el bucle PARA? 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> ESTUDIANTES 20: ¿Puedes un bucle WHILE? 748 00:39:57,900 --> 00:40:01,350 Y entonces, lo que haría es you'd - 749 00:40:01,350 --> 00:40:03,930 porque tenemos un char * para el archivo. 750 00:40:03,930 --> 00:40:07,950 Así que si sólo seguimos incrementando que hasta que nos íbamos a encontrar el carácter NULL en 751 00:40:07,950 --> 00:40:08,500 Al final de la misma? 752 00:40:08,500 --> 00:40:11,130 O no, es que no se como funcionan los archivos? 753 00:40:11,130 --> 00:40:14,300 >> JASON HIRSCHHORN: Así podemos mantener incrementando el char * 754 00:40:14,300 --> 00:40:16,340 hasta que encontremos el NULL - 755 00:40:16,340 --> 00:40:18,580 >> ESTUDIANTES 20: mantener Esencialmente ir carácter a carácter hasta que llegamos a 756 00:40:18,580 --> 00:40:21,250 el final del archivo. 757 00:40:21,250 --> 00:40:21,600 >> JASON HIRSCHHORN: Si. 758 00:40:21,600 --> 00:40:22,560 Así que eso es lo que queremos hacer. 759 00:40:22,560 --> 00:40:24,545 Queremos seguir leyendo, carácter por su carácter, hasta llegar a 760 00:40:24,545 --> 00:40:25,080 el final del archivo. 761 00:40:25,080 --> 00:40:25,375 >> ESTUDIANTES 20: Así es. 762 00:40:25,375 --> 00:40:25,860 Encontrar - 763 00:40:25,860 --> 00:40:28,540 ¿cuál es el fin o la señal de stop al final de un archivo de texto. 764 00:40:28,540 --> 00:40:28,620 >> JASON HIRSCHHORN: OK. 765 00:40:28,620 --> 00:40:30,140 Así que cuando llegamos al final del archivo - ¿cómo sabemos que hemos llegado 766 00:40:30,140 --> 00:40:33,200 el final de un archivo? 767 00:40:33,200 --> 00:40:34,710 Si estoy llamando - 768 00:40:34,710 --> 00:40:35,910 así que vamos a dar un paso atrás. 769 00:40:35,910 --> 00:40:37,550 ¿Qué es una función? 770 00:40:37,550 --> 00:40:39,360 Vamos a ir a esta línea aquí. 771 00:40:39,360 --> 00:40:40,630 Leer desde el archivo de origen. 772 00:40:40,630 --> 00:40:41,880 ¿Quién me puede dar esa línea de código? 773 00:40:41,880 --> 00:40:45,592 774 00:40:45,592 --> 00:40:47,590 >> ESTUDIANTES 21: fscanf? 775 00:40:47,590 --> 00:40:49,110 >> JASON HIRSCHHORN: fscanf. 776 00:40:49,110 --> 00:40:49,510 Aceptar. 777 00:40:49,510 --> 00:40:52,240 ¿Qué pasa si quiero leer, muy específicamente, un byte? 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> ESTUDIANTES 21: No sé. 780 00:40:56,860 --> 00:40:57,110 >> JASON HIRSCHHORN: OK. 781 00:40:57,110 --> 00:40:59,380 Incluso más simple que fscanf - lo que es una - 782 00:40:59,380 --> 00:41:01,890 Quiero leer de un archivo de origen? 783 00:41:01,890 --> 00:41:03,720 Leer de un archivo de origen. 784 00:41:03,720 --> 00:41:04,850 ¿Qué es una función - sí. 785 00:41:04,850 --> 00:41:05,380 >> ESTUDIANTES 22: Es fread? 786 00:41:05,380 --> 00:41:06,070 >> JASON HIRSCHHORN: Fread. 787 00:41:06,070 --> 00:41:07,550 Creo que vamos a seguir con que uno por ahora. 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 ¿Qué tipo de argumentos embargo, toma fread? 790 00:41:13,650 --> 00:41:17,410 >> ESTUDIANTES 22: Probablemente el tipo de archivo, y luego ubicación en el archivo? 791 00:41:17,410 --> 00:41:19,550 >> JASON HIRSCHHORN: ¿Qué puedo escribir aquí para averiguar qué tipo de argumentos 792 00:41:19,550 --> 00:41:20,950 fread necesita? 793 00:41:20,950 --> 00:41:23,710 >> ESTUDIANTES MÚLTIPLES: Hombre fread. 794 00:41:23,710 --> 00:41:24,740 >> JASON HIRSCHHORN: Hombre fread y fwrite. 795 00:41:24,740 --> 00:41:25,980 Parece que pasar el rato juntos. 796 00:41:25,980 --> 00:41:29,589 Así fread toma cuántos argumentos? 797 00:41:29,589 --> 00:41:30,920 >> ESTUDIANTES 23: Cuatro. 798 00:41:30,920 --> 00:41:32,690 >> JASON HIRSCHHORN: Se necesita cuatro argumentos. 799 00:41:32,690 --> 00:41:41,100 Se necesita un puntero, un tamaño, y que cosa, lo cual es raro, y algunos archivos. 800 00:41:41,100 --> 00:41:42,000 ¿De acuerdo? 801 00:41:42,000 --> 00:41:43,990 Vamos a leer sobre ello aquí. 802 00:41:43,990 --> 00:41:49,370 "La función fread lee n memb elementos de datos, cada uno de bytes de tamaño 803 00:41:49,370 --> 00:41:53,840 de longitud, desde el flujo apuntado por transmitir, almacenándolos en la ubicación 804 00:41:53,840 --> 00:41:56,170 dada por el puntero ". 805 00:41:56,170 --> 00:41:57,960 >> Así que cuatro argumentos. 806 00:41:57,960 --> 00:42:04,510 ¿Por qué no puedo simplemente copiar esto, y pegarlo aquí. 807 00:42:04,510 --> 00:42:10,060 808 00:42:10,060 --> 00:42:10,770 Aceptar. 809 00:42:10,770 --> 00:42:13,673 Entonces, ¿quién puede empezar a llenar estos argumentos para mí? 810 00:42:13,673 --> 00:42:15,840 Avi. 811 00:42:15,840 --> 00:42:17,720 >> AVI: Saque el vacío. 812 00:42:17,720 --> 00:42:20,530 Ponga simplemente src. 813 00:42:20,530 --> 00:42:23,142 Saque puntero y la estrella. 814 00:42:23,142 --> 00:42:26,102 Coloque el original. 815 00:42:26,102 --> 00:42:27,050 Entonces - 816 00:42:27,050 --> 00:42:28,500 >> JASON HIRSCHHORN: Así que voy a dejar de Estás ahí, porque eso es incorrecto. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Tienes razón con el original, pero donde src debería ir? 819 00:42:34,710 --> 00:42:35,960 >> [VOCES interponiendo] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> JASON HIRSCHHORN: debe ir por aquí. 822 00:42:41,610 --> 00:42:43,790 Ese es el src - nuestra src es un tipo. 823 00:42:43,790 --> 00:42:44,610 Echemos un vistazo aquí. 824 00:42:44,610 --> 00:42:49,610 Esto es pedir para un tipo FILE *, que en realidad suele verlos así. 825 00:42:49,610 --> 00:42:57,630 Así que esto es pedir un argumento de Tipo de archivo * llamado arroyo que es el original. 826 00:42:57,630 --> 00:42:58,480 ¿De acuerdo? 827 00:42:58,480 --> 00:43:00,410 >> ¿Qué tamaño de las cosas hacen queremos leer? 828 00:43:00,410 --> 00:43:03,340 Yo te di esto en el descripción del problema. 829 00:43:03,340 --> 00:43:04,370 >> ESTUDIANTES 24: Un byte a la vez. 830 00:43:04,370 --> 00:43:05,340 >> JASON HIRSCHHORN: Un byte. 831 00:43:05,340 --> 00:43:08,205 ¿Qué tan grande es un byte? 832 00:43:08,205 --> 00:43:11,642 Su tamaño es en bytes, así que lo que puedo poner ahí? 833 00:43:11,642 --> 00:43:12,910 >> ESTUDIANTES 25: Primero. 834 00:43:12,910 --> 00:43:14,730 >> JASON HIRSCHHORN: Primero. 835 00:43:14,730 --> 00:43:17,020 Derecha. 836 00:43:17,020 --> 00:43:19,940 Su tamaño se encuentra en la unidad de bytes, de modo 1 es de 1 byte. 837 00:43:19,940 --> 00:43:22,284 ¿Cuántos no quiero leer a la vez. 838 00:43:22,284 --> 00:43:23,520 >> ESTUDIANTES 26: One? 839 00:43:23,520 --> 00:43:24,270 >> JASON HIRSCHHORN: Una de las cosas. 840 00:43:24,270 --> 00:43:28,540 Quiero leer una cosa de tamaño 1, un bocado a la vez. 841 00:43:28,540 --> 00:43:32,110 ¿Y dónde lo pongo, una vez que lo leo? 842 00:43:32,110 --> 00:43:35,050 843 00:43:35,050 --> 00:43:36,510 >> ESTUDIANTES 27: Destino? 844 00:43:36,510 --> 00:43:39,270 >> JASON HIRSCHHORN: Así que no puedo poner en línea recta en destino. 845 00:43:39,270 --> 00:43:40,800 >> ESTUDIANTES 28: Eres a poner en un tercer puntero? 846 00:43:40,800 --> 00:43:41,780 >> ESTUDIANTES 27: Para el destino. 847 00:43:41,780 --> 00:43:42,270 >> JASON HIRSCHHORN: OK. 848 00:43:42,270 --> 00:43:42,630 Sí. 849 00:43:42,630 --> 00:43:46,820 >> ESTUDIANTES 29: Se puede declarar algo que actuar como un almacenamiento temporal anterior. 850 00:43:46,820 --> 00:43:47,350 >> JASON HIRSCHHORN: OK. 851 00:43:47,350 --> 00:43:50,080 Dame eso. 852 00:43:50,080 --> 00:43:53,930 >> ESTUDIANTES 29: Otro archivo puntero, tal vez? 853 00:43:53,930 --> 00:43:54,220 >> JASON HIRSCHHORN: OK. 854 00:43:54,220 --> 00:43:55,585 Así que esta es nula estrellas - 855 00:43:55,585 --> 00:43:57,750 que es un tipo void estrella, por lo que no hace tiene que ser un apuntador de archivo. 856 00:43:57,750 --> 00:44:02,520 Y si estoy leyendo un byte, donde sería un buen lugar 857 00:44:02,520 --> 00:44:03,850 para almacenar un byte? 858 00:44:03,850 --> 00:44:04,660 >> ESTUDIANTES 29: Una matriz? 859 00:44:04,660 --> 00:44:05,770 >> JASON HIRSCHHORN: Una matriz. 860 00:44:05,770 --> 00:44:07,730 Aceptar. 861 00:44:07,730 --> 00:44:14,040 ¿Y qué otra cosa es algo que es sólo el tamaño de un byte? 862 00:44:14,040 --> 00:44:16,980 863 00:44:16,980 --> 00:44:18,060 >> ESTUDIANTES 30: Un char *? 864 00:44:18,060 --> 00:44:18,530 >> ESTUDIANTES 29: Así es. 865 00:44:18,530 --> 00:44:19,880 >> JASON HIRSCHHORN: Un char * no es de un byte. 866 00:44:19,880 --> 00:44:20,440 >> ESTUDIANTES 29: A car. 867 00:44:20,440 --> 00:44:21,810 >> JASON HIRSCHHORN: Un char es un byte. 868 00:44:21,810 --> 00:44:22,920 ¿Cierto? 869 00:44:22,920 --> 00:44:26,740 Así que vamos a llamar a este buffer es un genérico nombre usado para estas cosas que almacenar 870 00:44:26,740 --> 00:44:27,910 algo temporal. 871 00:44:27,910 --> 00:44:30,880 Así que creo un búfer. 872 00:44:30,880 --> 00:44:31,150 ¿Cierto? 873 00:44:31,150 --> 00:44:32,990 Pero hace falta ser un void *. 874 00:44:32,990 --> 00:44:38,660 Así que tal vez tienes razón, que debe ser un tampón de tamaño 0. 875 00:44:38,660 --> 00:44:41,070 Así que almacena uno - 876 00:44:41,070 --> 00:44:41,280 derecha. 877 00:44:41,280 --> 00:44:43,560 >> Debido a que esta aquí - Char buffer es un personaje, pero 878 00:44:43,560 --> 00:44:45,110 esto toma un void * - 879 00:44:45,110 --> 00:44:45,870 un puntero. 880 00:44:45,870 --> 00:44:50,640 Así que yo podía hacer esto y ahora tampón es un puntero. 881 00:44:50,640 --> 00:44:53,214 ¿Qué otra cosa podía hacer? 882 00:44:53,214 --> 00:44:55,775 >> ESTUDIANTES 31: Ponga una estrella junto a char. 883 00:44:55,775 --> 00:44:58,380 >> JASON HIRSCHHORN: pude han creado char *. 884 00:44:58,380 --> 00:45:00,216 Aceptar. 885 00:45:00,216 --> 00:45:03,131 ¿Cuál es otra cosa que podía hacer? 886 00:45:03,131 --> 00:45:04,050 ¿O vamos a ir con éste. 887 00:45:04,050 --> 00:45:05,740 Char * buffer, así que lo que Cómo puedo poner aquí? 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> ESTUDIANTES 31: Buffer. 890 00:45:09,310 --> 00:45:10,560 >> JASON HIRSCHHORN: Buffer. 891 00:45:10,560 --> 00:45:12,640 892 00:45:12,640 --> 00:45:14,500 Buffer es un puntero a un char. 893 00:45:14,500 --> 00:45:19,480 Y en ese lugar, estamos poniendo un byte de algo que hemos leído. 894 00:45:19,480 --> 00:45:19,980 Sí. 895 00:45:19,980 --> 00:45:20,700 Avi. 896 00:45:20,700 --> 00:45:21,230 >> AVI: Sólo una pregunta rápida. 897 00:45:21,230 --> 00:45:24,440 ¿Quieres malloc tampón? 898 00:45:24,440 --> 00:45:25,930 >> JASON HIRSCHHORN: ¿Quién puede responder a esa pregunta? 899 00:45:25,930 --> 00:45:30,210 >> ESTUDIANTES 32: Bueno, en realidad no punto a nada en este momento, por lo que - 900 00:45:30,210 --> 00:45:32,610 >> JASON HIRSCHHORN: Pero hacer queremos malloc él? 901 00:45:32,610 --> 00:45:35,600 >> ESTUDIANTES 32: Si se va a hacer de esa manera, supongo, sí, porque lo que se necesita 902 00:45:35,600 --> 00:45:36,990 un lugar para que apunte a. 903 00:45:36,990 --> 00:45:38,350 >> JASON HIRSCHHORN: ¿Tenemos que malloc él? 904 00:45:38,350 --> 00:45:40,580 >> ESTUDIANTES 33: Si usted va a usarlo fuera del bucle. 905 00:45:40,580 --> 00:45:42,524 >> JASON HIRSCHHORN: ¿Vamos a utilizarlo fuera del bucle? 906 00:45:42,524 --> 00:45:44,392 >> ESTUDIANTES 34: Si. 907 00:45:44,392 --> 00:45:44,860 >> ESTUDIANTES 35: Espera. 908 00:45:44,860 --> 00:45:46,980 ¿Queremos declarar en el bucle hasta más allá? 909 00:45:46,980 --> 00:45:50,100 >> JASON HIRSCHHORN: Así que supongo que tenemos algunos seudo bucle WHILE aquí donde estamos 910 00:45:50,100 --> 00:45:51,950 tratando de averiguar, que no hemos llegado a todavía. 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 No necesitamos a malloc ella. 913 00:45:56,010 --> 00:45:59,310 Estamos operando en el principal, que sólo va para ser utilizado dentro de este bucle. 914 00:45:59,310 --> 00:46:00,540 No tiene por qué existir , fuera de esta. 915 00:46:00,540 --> 00:46:02,340 >> Así que puede ser una variable local. 916 00:46:02,340 --> 00:46:03,925 Usted tiene un puntero a una variable local. 917 00:46:03,925 --> 00:46:07,984 918 00:46:07,984 --> 00:46:09,590 >> ESTUDIANTES 36: Pero no es apuntando a nada. 919 00:46:09,590 --> 00:46:11,540 >> JASON HIRSCHHORN: No, no lo es inicializado a nada. 920 00:46:11,540 --> 00:46:12,790 Pero no vamos a utilizarlo también. 921 00:46:12,790 --> 00:46:15,300 Vamos a poner algo en es la primera vez que lo utilizan. 922 00:46:15,300 --> 00:46:16,580 Así que parece que está bien. 923 00:46:16,580 --> 00:46:17,780 Así que no necesitamos malloc aquí. 924 00:46:17,780 --> 00:46:19,360 Y creo que está bien como está. 925 00:46:19,360 --> 00:46:24,350 926 00:46:24,350 --> 00:46:25,790 Aceptar. 927 00:46:25,790 --> 00:46:27,190 Tenemos la línea fread. 928 00:46:27,190 --> 00:46:28,490 Vamos a hacer la siguiente línea. 929 00:46:28,490 --> 00:46:32,984 >> Si queremos escribir en un archivo, lo que es una buena función a utilizar para hacer eso? 930 00:46:32,984 --> 00:46:33,770 >> ESTUDIANTES 37: fwrite? 931 00:46:33,770 --> 00:46:35,140 >> ESTUDIANTES 38: fprintf? 932 00:46:35,140 --> 00:46:36,010 >> JASON HIRSCHHORN: fprintf es uno. 933 00:46:36,010 --> 00:46:37,260 ¿Qué otro? 934 00:46:37,260 --> 00:46:37,680 >> ESTUDIANTES 39: fwrite. 935 00:46:37,680 --> 00:46:38,510 >> JASON HIRSCHHORN: fwrite. 936 00:46:38,510 --> 00:46:41,250 Y para nuestros propósitos, fwrite, que hemos visto aquí, es 937 00:46:41,250 --> 00:46:42,500 probablemente la mejor opción. 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 Lleva cuatro argumentos también. 940 00:46:53,950 --> 00:46:57,570 Nishant, le puede dar me los argumentos? 941 00:46:57,570 --> 00:47:00,570 >> NISHANT: El primer curso de una ser sólo tampón. 942 00:47:00,570 --> 00:47:02,210 >> JASON HIRSCHHORN: OK. 943 00:47:02,210 --> 00:47:06,752 >> NISHANT: El segundo de sólo va a ser 1. 944 00:47:06,752 --> 00:47:09,510 En tercer lugar uno va a ser 1. 945 00:47:09,510 --> 00:47:11,470 Y el cuarto va a ser el horario de verano. 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> JASON HIRSCHHORN: ¿Alguien tiene alguna pregunta acerca de esa línea? 948 00:47:19,550 --> 00:47:28,370 949 00:47:28,370 --> 00:47:29,130 Eso se ve bien. 950 00:47:29,130 --> 00:47:29,590 Aceptar. 951 00:47:29,590 --> 00:47:34,250 Así que ahora parece que lo único que estamos faltante - en realidad, vamos a escribir 952 00:47:34,250 --> 00:47:35,090 esta última línea. 953 00:47:35,090 --> 00:47:36,300 Cierre los archivos. 954 00:47:36,300 --> 00:47:38,880 ¿Quién puede acabar con nosotros a la escritura estas dos últimas líneas? 955 00:47:38,880 --> 00:47:39,120 Sí. 956 00:47:39,120 --> 00:47:39,850 Lo sentimos, ¿cómo te llamas? 957 00:47:39,850 --> 00:47:40,580 >> LUCY: Lucy. 958 00:47:40,580 --> 00:47:41,580 >> JASON HIRSCHHORN: Lucy. 959 00:47:41,580 --> 00:47:47,560 >> LUCY: src fclose y luego destino fclose. 960 00:47:47,560 --> 00:47:52,430 >> JASON HIRSCHHORN: fclose, paren abierta, src, cerca paren, punto y coma. 961 00:47:52,430 --> 00:47:53,680 Y fclose - 962 00:47:53,680 --> 00:47:57,560 963 00:47:57,560 --> 00:47:58,090 ¿si? 964 00:47:58,090 --> 00:48:01,710 >> LUCY: Abrir paréntesis, dst y luego por punto y coma. 965 00:48:01,710 --> 00:48:02,520 >> JASON HIRSCHHORN: Muy bien. 966 00:48:02,520 --> 00:48:04,338 ¿Y qué tengo que incluir al final? 967 00:48:04,338 --> 00:48:05,210 >> LUCY: Devuelve 0. 968 00:48:05,210 --> 00:48:05,570 >> JASON HIRSCHHORN: Devuelve 0. 969 00:48:05,570 --> 00:48:06,820 ¿Tengo que hacerlo? 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 Sólo una pregunta. 972 00:48:12,590 --> 00:48:14,957 ¿Tenemos que incluir la rentabilidad 0? 973 00:48:14,957 --> 00:48:16,240 >> ESTUDIANTES MÚLTIPLES: No. 974 00:48:16,240 --> 00:48:16,430 >> JASON HIRSCHHORN: No. 975 00:48:16,430 --> 00:48:18,090 Principal lo hace automáticamente si se llega a la final. 976 00:48:18,090 --> 00:48:20,580 Pero creo que es bueno incluir de forma explícita. 977 00:48:20,580 --> 00:48:23,860 Sobre todo cuando estamos volviendo otra cosas a lo largo del programa. 978 00:48:23,860 --> 00:48:24,810 Aceptar. 979 00:48:24,810 --> 00:48:26,230 Esto es lo que nos falta - 980 00:48:26,230 --> 00:48:28,520 MIENTRAS qué? 981 00:48:28,520 --> 00:48:31,630 ¿Quién puede pensar en alguna - 982 00:48:31,630 --> 00:48:35,240 tiene un cierto sentido de lo que las cosas podría entrar ahí? 983 00:48:35,240 --> 00:48:37,350 Incluso si es sólo en algunos pseudocódigo como el lenguaje? 984 00:48:37,350 --> 00:48:41,330 >> ¿Qué somos en realidad - lo que Qué queremos ir hasta? 985 00:48:41,330 --> 00:48:41,980 Sí, Lucy. 986 00:48:41,980 --> 00:48:43,240 >> LUCY: El final del archivo. 987 00:48:43,240 --> 00:48:44,990 >> JASON HIRSCHHORN: El final del archivo. 988 00:48:44,990 --> 00:48:49,280 Entonces, ¿qué quiere usted decir con fines de archivo? 989 00:48:49,280 --> 00:48:50,955 >> LUCY: Una vez que llegue a la final del archivo, para. 990 00:48:50,955 --> 00:48:51,240 >> JASON HIRSCHHORN: OK. 991 00:48:51,240 --> 00:48:53,460 Así que una vez que lleguemos al final del archivo. 992 00:48:53,460 --> 00:48:56,893 ¿Cómo sabemos si hemos llegado el final del archivo? 993 00:48:56,893 --> 00:48:59,900 >> ESTUDIANTES 40: Creo búfer se establecerá en NULL. 994 00:48:59,900 --> 00:49:01,885 >> ESTUDIANTES 41: Buffer se declara dentro del bucle. 995 00:49:01,885 --> 00:49:03,670 >> JASON HIRSCHHORN: Así que usted piensa búfer se establece en NULL. 996 00:49:03,670 --> 00:49:05,850 ¿Por qué habría de búfer se establece en NULL? 997 00:49:05,850 --> 00:49:10,420 >> ESTUDIANTES 40: Porque cuando fread, usted está tratando de poner 998 00:49:10,420 --> 00:49:13,528 nada en la memoria tampón. 999 00:49:13,528 --> 00:49:13,980 >> JASON HIRSCHHORN: OK. 1000 00:49:13,980 --> 00:49:15,550 Así que usted está pensando fread - 1001 00:49:15,550 --> 00:49:19,000 cuando hemos llegado al final de la archivo, lo que se fread va a hacer? 1002 00:49:19,000 --> 00:49:21,230 Creo que esa es la cuestión lo que tenemos que averiguar. 1003 00:49:21,230 --> 00:49:21,960 ¿Qué hace fread? 1004 00:49:21,960 --> 00:49:25,640 ¿Pone NULL en tampón o Qué hacer otra cosa? 1005 00:49:25,640 --> 00:49:27,510 ¿Cómo podemos averiguar lo que hace? 1006 00:49:27,510 --> 00:49:28,190 >> ESTUDIANTES 42: Hombre. 1007 00:49:28,190 --> 00:49:28,810 >> JASON HIRSCHHORN: Hombre. 1008 00:49:28,810 --> 00:49:32,280 Así que echemos un vistazo por aquí. 1009 00:49:32,280 --> 00:49:34,000 Valor de retorno. 1010 00:49:34,000 --> 00:49:39,620 En caso de éxito, fread y fwrite devolver el número de artículos leídos o escritos. 1011 00:49:39,620 --> 00:49:43,700 Este número es igual al número de bytes transferido sólo cuando el tamaño es 1. 1012 00:49:43,700 --> 00:49:47,780 Si se produce un error, o el extremo de la se alcanza archivo, el valor de retorno es un 1013 00:49:47,780 --> 00:49:51,490 número de elementos a corto o 0. 1014 00:49:51,490 --> 00:49:57,860 >> Así que para nuestros propósitos, si alcanza fread el final del archivo, y lee desde 1015 00:49:57,860 --> 00:50:02,100 al final del archivo, no hay nada a la izquierda para leer, ¿qué va a volver? 1016 00:50:02,100 --> 00:50:03,290 >> ESTUDIANTES 43: Zero? 1017 00:50:03,290 --> 00:50:04,540 >> JASON HIRSCHHORN: ¿Qué? 1018 00:50:04,540 --> 00:50:05,300 >> ESTUDIANTES 43: Zero? 1019 00:50:05,300 --> 00:50:05,690 >> JASON HIRSCHHORN: Zero. 1020 00:50:05,690 --> 00:50:06,940 Se va a volver a cero. 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 Así que sabemos que fread, cuando hemos alcanzado el final del archivo, que está pasando 1023 00:50:13,010 --> 00:50:13,690 para volver a cero. 1024 00:50:13,690 --> 00:50:17,460 ¿Cómo podemos usar eso a nuestro favor? 1025 00:50:17,460 --> 00:50:21,733 >> AVI: Puede declarar una variable fuera del bucle de llamada de verificación. 1026 00:50:21,733 --> 00:50:27,040 Si el control es igual a - 1027 00:50:27,040 --> 00:50:28,190 por ahora - uno. 1028 00:50:28,190 --> 00:50:28,920 >> JASON HIRSCHHORN: OK. 1029 00:50:28,920 --> 00:50:38,050 >> AVI: Y entonces usted puede poner un IF declaración de la derecha después de fread diciendo que si 1030 00:50:38,050 --> 00:50:42,600 fread es igual a cero - 1031 00:50:42,600 --> 00:50:43,850 No. 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> JASON HIRSCHHORN: ¿Quién puede ayudar a Avi? 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: ¿Cuál es el valor devuelto por fread? 1036 00:50:52,410 --> 00:50:54,060 >> JASON HIRSCHHORN: Acabamos se fue por arriba de eso. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: ¿Cómo se representa esto? 1038 00:50:55,450 --> 00:50:57,190 >> JASON HIRSCHHORN: Así que regresa - vamos a mirar hacia arriba aquí - devuelve una 1039 00:50:57,190 --> 00:50:59,340 size_t, que es esencialmente un número entero. 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 Por lo tanto, devuelve un entero. 1042 00:51:03,410 --> 00:51:05,160 Y en nuestro caso, lo hará devuelve 1 o 0 - 1043 00:51:05,160 --> 00:51:08,760 1 si dijera una cosa - un byte, y 0 si hemos llegado al final. 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 Así que si fread - 1046 00:51:16,450 --> 00:51:16,855 ¿si? 1047 00:51:16,855 --> 00:51:20,330 >> ESTUDIANTES 45: No se puede simplemente poner la plena fread (tampón, 1, 1, SRC) en el 1048 00:51:20,330 --> 00:51:21,660 while? 1049 00:51:21,660 --> 00:51:26,510 >> JASON HIRSCHHORN: Así que usted propone haciendo esto en allí? 1050 00:51:26,510 --> 00:51:27,600 >> [VOCES interponiendo] 1051 00:51:27,600 --> 00:51:29,520 >> JASON HIRSCHHORN: Espera. 1052 00:51:29,520 --> 00:51:30,885 Así que estamos librando de eso. 1053 00:51:30,885 --> 00:51:33,300 Así que usted está proponiendo poner fread en allí? 1054 00:51:33,300 --> 00:51:35,457 ¿Qué debemos también mover si quieres hacer eso? 1055 00:51:35,457 --> 00:51:36,740 >> ESTUDIANTES 45: El buffer exterior. 1056 00:51:36,740 --> 00:51:38,110 >> JASON HIRSCHHORN: Deberíamos también mover esto hacia fuera aquí. 1057 00:51:38,110 --> 00:51:41,700 >> ESTUDIANTES 45: ¿Pero que constantemente moverlo hacia adelante? 1058 00:51:41,700 --> 00:51:42,950 >> [VOCES interponiendo] 1059 00:51:42,950 --> 00:51:46,540 1060 00:51:46,540 --> 00:51:47,470 >> JASON HIRSCHHORN: OK. 1061 00:51:47,470 --> 00:51:50,570 Así que esto es lo que Okshar propuso. 1062 00:51:50,570 --> 00:51:51,930 Creamos nuestro buffer. 1063 00:51:51,930 --> 00:51:57,020 Nos fread MIENTRAS, entonces llamemos fwrite. 1064 00:51:57,020 --> 00:51:59,760 Los pensamientos sobre esto? 1065 00:51:59,760 --> 00:52:04,050 >> ESTUDIANTES 46: Mi única pregunta es, ¿lo haría que en realidad ejecuta el comando fread? 1066 00:52:04,050 --> 00:52:06,175 >> JASON HIRSCHHORN: Muy buena pregunta. 1067 00:52:06,175 --> 00:52:11,050 Cuando usted está poniendo una llamada a la función en el interior de una condición, que hace 1068 00:52:11,050 --> 00:52:12,300 llamada a la función ejecutar? 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 Hemos visto ejemplos de esto antes. 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 ¿Cierto? 1073 00:52:25,660 --> 00:52:26,125 >> ESTUDIANTES 46: OK. 1074 00:52:26,125 --> 00:52:26,590 Sí. 1075 00:52:26,590 --> 00:52:30,140 Así lo hace ejecutar. 1076 00:52:30,140 --> 00:52:31,790 >> JASON HIRSCHHORN: Hemos visto cosas así antes, donde tenemos una 1077 00:52:31,790 --> 00:52:33,550 llamada de función dentro de una condición. 1078 00:52:33,550 --> 00:52:35,540 ¿Se ejecuta dicha llamada de función? 1079 00:52:35,540 --> 00:52:36,350 Sí. 1080 00:52:36,350 --> 00:52:37,410 Así que la respuesta es sí. 1081 00:52:37,410 --> 00:52:41,010 Esta llamada a la función se ejecutará. 1082 00:52:41,010 --> 00:52:42,418 Pero de nuevo, ¿es lo que queremos? 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> ¿Cuál es una manera de que pudiéramos averiguar si eso es lo que queremos? 1085 00:52:52,204 --> 00:52:53,470 >> ESTUDIANTES MÚLTIPLES: Ejecutar esto? 1086 00:52:53,470 --> 00:52:54,460 >> JASON HIRSCHHORN: Podríamos ejecutarlo. 1087 00:52:54,460 --> 00:52:57,500 Pero antes de hacer eso, podríamos También razonar a través de este. 1088 00:52:57,500 --> 00:52:57,920 Si - 1089 00:52:57,920 --> 00:53:01,920 digamos que tenemos un byte en nuestra archivo, vamos a llegar a aquí, 1090 00:53:01,920 --> 00:53:02,660 vamos a llegar a este código. 1091 00:53:02,660 --> 00:53:03,620 Esto ejecutará. 1092 00:53:03,620 --> 00:53:07,780 fread devolverá un byte y almacenarlo en la memoria intermedia. 1093 00:53:07,780 --> 00:53:11,290 Y esto va a evaluar a 1, derecho, después de su regreso 1. 1094 00:53:11,290 --> 00:53:12,640 >> Así, mientras que 1. 1095 00:53:12,640 --> 00:53:15,325 ¿Significa eso que el código dentro El bucle while se ejecutará? 1096 00:53:15,325 --> 00:53:15,453 >> ESTUDIANTES 47: Así es. 1097 00:53:15,453 --> 00:53:16,040 Es cierto. 1098 00:53:16,040 --> 00:53:16,290 >> JASON HIRSCHHORN: Si. 1099 00:53:16,290 --> 00:53:17,490 1 es verdadera. 1100 00:53:17,490 --> 00:53:18,240 No es 0. 1101 00:53:18,240 --> 00:53:20,360 Así que el código dentro de aquí se ejecutará. 1102 00:53:20,360 --> 00:53:22,300 Así que vamos a escribir eso. 1103 00:53:22,300 --> 00:53:25,340 Vamos a pasar de nuevo a este línea una vez más. 1104 00:53:25,340 --> 00:53:26,850 Ahora que tenemos - 1105 00:53:26,850 --> 00:53:28,550 estamos en el final de nuestro archivo. 1106 00:53:28,550 --> 00:53:30,980 Leemos en el final de nuestro archivo, porque sólo tenía un byte en el mismo. 1107 00:53:30,980 --> 00:53:34,270 >> Fread devuelve 0, tiendas algo en tampón. 1108 00:53:34,270 --> 00:53:35,890 Sinceramente, no sé qué almacena en la memoria intermedia. 1109 00:53:35,890 --> 00:53:38,380 Probablemente podríamos mirar hacia arriba para ver lo que hace. 1110 00:53:38,380 --> 00:53:40,130 Eso, sinceramente, no lo sé. 1111 00:53:40,130 --> 00:53:43,090 No sabemos a quién le importa lo que almacena en tampón? 1112 00:53:43,090 --> 00:53:44,010 Pero no devolverá 0. 1113 00:53:44,010 --> 00:53:45,440 Y se MIENTRAS 0 ejecutar? 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> MIENTRAS 0 no se ejecute. 1116 00:53:51,180 --> 00:53:54,030 Así que vamos a pasar por aquí. 1117 00:53:54,030 --> 00:53:58,870 Así que vamos a tener una votación a mano alzada si este es el código que debemos correr, o si 1118 00:53:58,870 --> 00:54:00,140 debe hacer cambios primero. 1119 00:54:00,140 --> 00:54:02,180 Así que si usted piensa - tienes que votar. 1120 00:54:02,180 --> 00:54:06,885 Si crees que debemos ejecutar este código como es, por favor, levanten la mano. 1121 00:54:06,885 --> 00:54:12,440 1122 00:54:12,440 --> 00:54:13,400 >> Aceptar. 1123 00:54:13,400 --> 00:54:14,315 Hay uno - 1124 00:54:14,315 --> 00:54:17,260 ¿tienes una pregunta, preocupación? 1125 00:54:17,260 --> 00:54:18,080 Sí. 1126 00:54:18,080 --> 00:54:21,240 >> ESTUDIANTES 48: Después de que nos movemos búfer fuera del bucle, ¿nos 1127 00:54:21,240 --> 00:54:22,670 que malloc él? 1128 00:54:22,670 --> 00:54:23,310 >> JASON HIRSCHHORN: Muy buena pregunta. 1129 00:54:23,310 --> 00:54:26,670 Después nos movemos búfer fuera de la lazo, tenemos para malloc él? 1130 00:54:26,670 --> 00:54:28,400 Esta es una pregunta alcance. 1131 00:54:28,400 --> 00:54:32,130 Si inicializamos amortiguar fuera de este bucle, va a existir 1132 00:54:32,130 --> 00:54:33,534 en el interior del bucle? 1133 00:54:33,534 --> 00:54:35,230 >> ESTUDIANTES MÚLTIPLES: Si. 1134 00:54:35,230 --> 00:54:35,580 >> JASON HIRSCHHORN: Si. 1135 00:54:35,580 --> 00:54:40,100 Su ámbito de aplicación abarca el interior del bucle, y, en definitiva, cualquier cosa por debajo de ella en el interior 1136 00:54:40,100 --> 00:54:42,460 de este código, incluyendo el dentro de las cosas aquí. 1137 00:54:42,460 --> 00:54:43,930 Así que no necesitamos a malloc ella. 1138 00:54:43,930 --> 00:54:47,766 Es una variable local, y su alcance todavía incluye el bucle. 1139 00:54:47,766 --> 00:54:49,540 >> ESTUDIANTES 49: ¿Es necesario para liberarlo? 1140 00:54:49,540 --> 00:54:51,770 >> JASON HIRSCHHORN: ¿Tenemos necesitar búfer libre? 1141 00:54:51,770 --> 00:54:53,860 >> ESTUDIANTES 49: Sí, si no lo hacemos malloc. 1142 00:54:53,860 --> 00:54:55,750 >> JASON HIRSCHHORN: ¿Tenemos necesitar búfer libre? 1143 00:54:55,750 --> 00:54:57,160 No lo sabemos. 1144 00:54:57,160 --> 00:55:01,280 De nuevo, es una variable local, así que no tenemos que liberarla. 1145 00:55:01,280 --> 00:55:02,170 Aceptar. 1146 00:55:02,170 --> 00:55:03,480 Vamos a ver qué pasa. 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 Por lo que es sin inicializar. 1149 00:55:18,220 --> 00:55:20,830 Eso era lo que algo que Marcus propuso anteriormente. 1150 00:55:20,830 --> 00:55:25,340 Así tenemos que el error, variable buffer no está inicializado cuando se utiliza aquí. 1151 00:55:25,340 --> 00:55:26,590 >> ¿Cómo podemos solucionar este problema? 1152 00:55:26,590 --> 00:55:29,460 1153 00:55:29,460 --> 00:55:30,960 >> ESTUDIANTES 50: malloc él? 1154 00:55:30,960 --> 00:55:31,770 >> ESTUDIANTES 51: igual a NULL? 1155 00:55:31,770 --> 00:55:33,000 >> ESTUDIANTES 52: Di búfer es igual NULL. 1156 00:55:33,000 --> 00:55:34,250 >> JASON HIRSCHHORN: OK. 1157 00:55:34,250 --> 00:55:40,040 1158 00:55:40,040 --> 00:55:40,770 Se ve bien. 1159 00:55:40,770 --> 00:55:42,410 Tenemos ahora. 1160 00:55:42,410 --> 00:55:45,630 Vamos a crear algo para tratar de copiar. 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 Así que tenemos nuestro archivo de texto. 1163 00:56:10,490 --> 00:56:11,740 ¿Cómo podemos ejecutar este programa? 1164 00:56:11,740 --> 00:56:14,140 1165 00:56:14,140 --> 00:56:15,472 Sí. 1166 00:56:15,472 --> 00:56:22,230 >> ESTUDIANTES 53: Puedes hacer punto slash cp, test.txt. 1167 00:56:22,230 --> 00:56:25,140 Y entonces usted puede nombrar a otro archivo el cual se almacenan en. 1168 00:56:25,140 --> 00:56:25,510 >> JASON HIRSCHHORN: OK. 1169 00:56:25,510 --> 00:56:27,380 Lo llamaremos out.txt. 1170 00:56:27,380 --> 00:56:28,630 ¿De acuerdo? 1171 00:56:28,630 --> 00:56:31,700 1172 00:56:31,700 --> 00:56:34,320 Culpa Seg. 1173 00:56:34,320 --> 00:56:35,570 Reflexiones sobre el fallo seg? 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 Esto es genial. 1176 00:56:41,390 --> 00:56:45,040 ¿Cómo podemos averiguar dónde el fallo segmento es? 1177 00:56:45,040 --> 00:56:45,680 ¿Qué? 1178 00:56:45,680 --> 00:56:45,990 >> ESTUDIANTES 54: Gdb. 1179 00:56:45,990 --> 00:56:47,240 >> JASON HIRSCHHORN: Gdb. 1180 00:56:47,240 --> 00:56:51,400 1181 00:56:51,400 --> 00:56:55,300 Corremos gdb escribiendo slash dot gdb, el nombre de nuestro programa. 1182 00:56:55,300 --> 00:56:57,020 No hay argumentos de línea de comandos allí. 1183 00:56:57,020 --> 00:56:59,570 Vamos a establecer un punto de ruptura en principal. 1184 00:56:59,570 --> 00:57:02,190 Si quiero empezar gdb, ¿qué hago? 1185 00:57:02,190 --> 00:57:02,730 >> ESTUDIANTES 55: R. 1186 00:57:02,730 --> 00:57:08,910 >> JASON HIRSCHHORN: R. ¿Y luego qué? 1187 00:57:08,910 --> 00:57:09,400 >> ESTUDIANTES 55: Los argumentos? 1188 00:57:09,400 --> 00:57:10,650 >> JASON HIRSCHHORN: Entonces el argumentos de la línea de comandos. 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 Vamos a caminar a través. 1191 00:57:17,120 --> 00:57:19,090 N es sólo me lleva línea por línea. 1192 00:57:19,090 --> 00:57:21,450 Yo voy a ir hasta que Me sale mi culpa seg. 1193 00:57:21,450 --> 00:57:22,700 No es mi culpa seg. 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 Parece fread causado mi culpa seg. 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 Sé fread causó mi culpa seg, porque esa era la 1198 00:57:32,770 --> 00:57:34,950 la línea que acabamos de ejecutar. 1199 00:57:34,950 --> 00:57:36,530 >> Y la única cosa que era pasando en esa línea - 1200 00:57:36,530 --> 00:57:37,520 dos cosas estaban sucediendo. 1201 00:57:37,520 --> 00:57:40,610 Fread iba, y luego nos quedamos haciendo algunas comprobaciones WHILE. 1202 00:57:40,610 --> 00:57:44,820 Estoy dispuesto a apostar que la MIENTRAS comprobación no estaba causando mi culpa seg. 1203 00:57:44,820 --> 00:57:46,950 Lo más probable era fread causando mi culpa seg. 1204 00:57:46,950 --> 00:57:49,260 También veo algo aquí, memcopy. 1205 00:57:49,260 --> 00:57:50,500 >> Copia de la memoria. 1206 00:57:50,500 --> 00:57:53,820 Suena como la mudanza de memoria de un lugar a otro. 1207 00:57:53,820 --> 00:57:56,890 Suena como algo que ocurriría en fread, tal vez un poco de memoria 1208 00:57:56,890 --> 00:57:58,910 pasar de aquí hasta aquí. 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 Vamos a pasar por esto otra vez. 1211 00:58:03,860 --> 00:58:06,900 ¿Cómo comienzo a lo largo y ejecutarlo de nuevo? 1212 00:58:06,900 --> 00:58:08,092 Sí. 1213 00:58:08,092 --> 00:58:15,140 >> ESTUDIANTES 56: ¿Es necesario poner un símbolo de unión antes de búfer? 1214 00:58:15,140 --> 00:58:17,800 >> JASON HIRSCHHORN: Así ampersand antes búfer me daría la dirección del 1215 00:58:17,800 --> 00:58:22,330 buffer, que es un char *. 1216 00:58:22,330 --> 00:58:25,250 Repasemos esto una vez más. 1217 00:58:25,250 --> 00:58:28,248 ¿Cómo se ejecuta a través de él una vez más? 1218 00:58:28,248 --> 00:58:29,210 >> ESTUDIANTES 57: ¿Puede usted acaba Escriba Ejecutar de nuevo? 1219 00:58:29,210 --> 00:58:32,050 >> JASON HIRSCHHORN: Sólo tienes que escribir run nuevo. 1220 00:58:32,050 --> 00:58:33,415 Así que no vamos a ejecutar esta línea. 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 Así buffer es un puntero NULL. 1223 00:58:39,240 --> 00:58:40,490 Corrija? 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 Está apuntando a - vamos a ver. 1226 00:58:47,060 --> 00:58:48,500 Si tenemos nuestra - 1227 00:58:48,500 --> 00:58:50,430 hacer un dibujo rápido de esto. 1228 00:58:50,430 --> 00:58:53,500 ¿Todos pueden ver si Yo escribo por aquí? 1229 00:58:53,500 --> 00:59:02,890 >> Así que en la pila, tenemos un local de variable y se llama buffer, y 1230 00:59:02,890 --> 00:59:08,230 que es un puntero a un char. 1231 00:59:08,230 --> 00:59:10,325 ¿Qué es esta dirección en caracteres? 1232 00:59:10,325 --> 00:59:12,550 >> ESTUDIANTES 58: 0x0. 1233 00:59:12,550 --> 00:59:13,400 >> JASON HIRSCHHORN: Así es. 1234 00:59:13,400 --> 00:59:14,200 Eso es lo que es esto. 1235 00:59:14,200 --> 00:59:17,600 Aquí, en el interior de amortiguamiento, se almacena 0x0. 1236 00:59:17,600 --> 00:59:20,480 Eso es lo que tenemos - el configuración que tenemos en estos momentos. 1237 00:59:20,480 --> 00:59:27,540 Así que esta línea, fread, pone algo desde la fuente de dónde? 1238 00:59:27,540 --> 00:59:30,560 Dentro de esta caja, o de esta caja? 1239 00:59:30,560 --> 00:59:31,060 ¿Qué caja? 1240 00:59:31,060 --> 00:59:33,290 Caja o cuadro de la derecha, dejando? 1241 00:59:33,290 --> 00:59:34,750 Este cuadro de la derecha. 1242 00:59:34,750 --> 00:59:38,440 >> De ello se sigue el puntero, y lo pone en aquí. 1243 00:59:38,440 --> 00:59:42,620 Cuando tratamos y la memoria táctil en ubicación 0, ¿qué obtenemos? 1244 00:59:42,620 --> 00:59:45,050 Un fallo de segmentación. 1245 00:59:45,050 --> 00:59:46,550 Ese es el error que tenemos en estos momentos. 1246 00:59:46,550 --> 00:59:46,970 Sí. 1247 00:59:46,970 --> 00:59:48,410 >> ESTUDIANTES 59: ¿No tienes poner búfer estrella? 1248 00:59:48,410 --> 00:59:49,180 ¿O no? 1249 00:59:49,180 --> 00:59:50,050 Para fread? 1250 00:59:50,050 --> 00:59:51,450 >> JASON HIRSCHHORN: Así fread toma un puntero. 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 Por lo tanto, pasa en tampón. 1253 00:59:55,900 --> 00:59:58,980 Y entonces va a de-referencia que en algún lugar dentro fread. 1254 00:59:58,980 --> 01:00:00,700 Pero, de nuevo, vimos, se necesita un puntero. 1255 01:00:00,700 --> 01:00:02,560 No necesitamos pasarlo búfer estrellas. 1256 01:00:02,560 --> 01:00:05,350 Eso sería pasando él lo que está aquí. 1257 01:00:05,350 --> 01:00:07,980 Y eso probablemente nos daría un error porque estamos de-referencia a ella. 1258 01:00:07,980 --> 01:00:08,150 >> ¿Cierto? 1259 01:00:08,150 --> 01:00:10,690 Cuando nos de-referencia este puntero, cuando tratamos de acceder a este lugar, 1260 01:00:10,690 --> 01:00:13,140 estamos llegando a un error - nuestro fallo de segmentación. 1261 01:00:13,140 --> 01:00:15,800 Por lo tanto - 1262 01:00:15,800 --> 01:00:16,690 ¡Uy. 1263 01:00:16,690 --> 01:00:19,090 Vamos a salir de gdb. 1264 01:00:19,090 --> 01:00:20,160 Nuestra línea - 1265 01:00:20,160 --> 01:00:22,990 nuestro problema - que es correcto aquí en esta línea. 1266 01:00:22,990 --> 01:00:26,410 Y es un problema porque de esta línea. 1267 01:00:26,410 --> 01:00:31,780 >> ¿Cómo podemos crear un cuadro que es accesible en fread. 1268 01:00:31,780 --> 01:00:31,980 ¿Cierto? 1269 01:00:31,980 --> 01:00:35,190 Tenemos que crear un cuadro que es uno byte grande, el tamaño de un char. 1270 01:00:35,190 --> 01:00:38,590 Pero necesitamos que la caja sea accesible Cuando esta función se ejecuta. 1271 01:00:38,590 --> 01:00:39,390 Entonces, ¿dónde - 1272 01:00:39,390 --> 01:00:39,640 sí. 1273 01:00:39,640 --> 01:00:40,440 ¿Alguna idea? 1274 01:00:40,440 --> 01:00:43,615 >> ESTUDIANTES 60: Sólo tienes que configurar como cualquier carácter aleatorio. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Sólo hacer iguales char buffer el carácter. 1277 01:00:51,640 --> 01:00:53,795 Y luego, cuando hayas amortiguar allí - 1278 01:00:53,795 --> 01:00:54,110 >> JASON HIRSCHHORN: Espera. 1279 01:00:54,110 --> 01:00:55,110 Carácter tampón? 1280 01:00:55,110 --> 01:00:55,880 Así que no hay estrellas? 1281 01:00:55,880 --> 01:00:56,390 >> ESTUDIANTES 60: Así es. 1282 01:00:56,390 --> 01:00:58,560 Saque la estrella. 1283 01:00:58,560 --> 01:01:00,690 Igual a un personaje al azar. 1284 01:01:00,690 --> 01:01:01,460 >> JASON HIRSCHHORN: OK. 1285 01:01:01,460 --> 01:01:02,420 Así que dame una. 1286 01:01:02,420 --> 01:01:03,170 >> ESTUDIANTES 60: Al igual que un o algo así. 1287 01:01:03,170 --> 01:01:06,160 Y luego, cuando usted tiene búfer allí, se utiliza un - 1288 01:01:06,160 --> 01:01:06,420 >> ESTUDIANTES 61: Star? 1289 01:01:06,420 --> 01:01:07,650 ¡Oh, no, el signo. 1290 01:01:07,650 --> 01:01:09,000 >> ESTUDIANTES 60: Utilice el signo. 1291 01:01:09,000 --> 01:01:09,470 >> JASON HIRSCHHORN: OK. 1292 01:01:09,470 --> 01:01:11,320 ¿Y qué hay en fwrite? 1293 01:01:11,320 --> 01:01:14,150 >> ESTUDIANTES 60: Utilice el signo más. 1294 01:01:14,150 --> 01:01:14,320 >> JASON HIRSCHHORN: Muy bien. 1295 01:01:14,320 --> 01:01:20,970 Así que su idea es, creamos un char y poner algo en él, y luego 1296 01:01:20,970 --> 01:01:22,612 grabar en ese carbón. 1297 01:01:22,612 --> 01:01:23,760 >> ESTUDIANTES 60: Así es. 1298 01:01:23,760 --> 01:01:25,916 >> JASON HIRSCHHORN: ¿Qué Qué piensa la gente? 1299 01:01:25,916 --> 01:01:27,770 >> ESTUDIANTES 62: Ha enrevesado. 1300 01:01:27,770 --> 01:01:28,460 >> JASON HIRSCHHORN: OK. 1301 01:01:28,460 --> 01:01:29,760 Dibujemos a cabo. 1302 01:01:29,760 --> 01:01:35,720 Así que esta vez, voy a sacar esto en rojo en la pila de aquí, y luego 1303 01:01:35,720 --> 01:01:36,410 tendrá - 1304 01:01:36,410 --> 01:01:36,822 ooh! 1305 01:01:36,822 --> 01:01:38,060 Lo siento. 1306 01:01:38,060 --> 01:01:45,930 Así que esta vez tenemos algo que se llama tampón, y es en la pila. 1307 01:01:45,930 --> 01:01:48,430 Corrija? 1308 01:01:48,430 --> 01:01:51,520 Y estamos ahorrando en ella un principio. 1309 01:01:51,520 --> 01:01:53,830 >> Entonces tenemos nuestra llamada a fread. 1310 01:01:53,830 --> 01:02:01,300 ¿Qué fread hace es que toma un byte de nuestro archivo y lo pone en alguna parte. 1311 01:02:01,300 --> 01:02:04,570 Se pone en cualquiera que sea el lo está señalando. 1312 01:02:04,570 --> 01:02:09,130 Bueno, antes de que tuviéramos esta dirección - 1313 01:02:09,130 --> 01:02:10,250 0x0. 1314 01:02:10,250 --> 01:02:13,349 Ahora, ¿qué dirección tenemos? 1315 01:02:13,349 --> 01:02:14,650 >> ESTUDIANTES 63: Lo que sea buffer de dirección es. 1316 01:02:14,650 --> 01:02:15,970 >> JASON HIRSCHHORN: Lo que sea buffer de dirección es. 1317 01:02:15,970 --> 01:02:22,370 Probablemente va a ser algo así. 1318 01:02:22,370 --> 01:02:26,950 Probablemente va a comenzar con una b y una f, y luego tiene otros seis 1319 01:02:26,950 --> 01:02:27,970 dígitos hexadecimales. 1320 01:02:27,970 --> 01:02:28,480 No tiene importancia. 1321 01:02:28,480 --> 01:02:29,470 Algunos de direcciones. 1322 01:02:29,470 --> 01:02:31,410 Y estamos de paso, que la dirección pulg 1323 01:02:31,410 --> 01:02:34,790 >> Y vamos a poner nuestro único Lo byte en esa dirección. 1324 01:02:34,790 --> 01:02:38,470 Así que vamos a poner nuestro único Lo byte aquí dentro. 1325 01:02:38,470 --> 01:02:40,800 Y luego vamos a escribir desde lo que es siempre aquí dentro. 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 ¿Alguien tiene alguna pregunta acerca de eso? 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 ¿Quién piensa que este código va a funcionar? 1330 01:02:54,690 --> 01:02:56,020 >> Levante su mano si usted piensa Este código funcionará. 1331 01:02:56,020 --> 01:02:57,270 Usted tiene que tomar una postura. 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 ¿Y quién cree que este código no funcionará? 1334 01:03:02,500 --> 01:03:04,610 Levanten la mano. 1335 01:03:04,610 --> 01:03:06,750 Todo el mundo debe ser levantando la mano. 1336 01:03:06,750 --> 01:03:07,670 Aceptar. 1337 01:03:07,670 --> 01:03:09,390 Michael, ¿dónde estás parado? 1338 01:03:09,390 --> 01:03:10,680 >> MICHAEL: No puedo decidir. 1339 01:03:10,680 --> 01:03:12,070 Tipo de en medio. 1340 01:03:12,070 --> 01:03:12,736 >> JASON HIRSCHHORN: Eres en el medio. 1341 01:03:12,736 --> 01:03:13,092 Elige una. 1342 01:03:13,092 --> 01:03:14,400 >> MICHAEL: Voy a tener fe y dicen que va a funcionar. 1343 01:03:14,400 --> 01:03:14,660 >> JASON HIRSCHHORN: OK. 1344 01:03:14,660 --> 01:03:16,047 Vas a tener fe y dicen que funciona? 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 ¿Qué pasó? 1347 01:03:27,020 --> 01:03:28,270 >> [VOCES interponiendo] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> JASON HIRSCHHORN: Sin culpa seg. 1350 01:03:35,950 --> 01:03:40,320 ¿Cómo se puede comprobar que para ver si dos cosas son iguales? 1351 01:03:40,320 --> 01:03:42,060 Dos archivos son iguales. 1352 01:03:42,060 --> 01:03:43,300 >> ESTUDIANTES 64: Diff. 1353 01:03:43,300 --> 01:03:45,490 >> JASON HIRSCHHORN: Diff. 1354 01:03:45,490 --> 01:03:51,630 Cheques de diferencias para las diferencias entre dos archivos, y si devuelve 1355 01:03:51,630 --> 01:03:52,890 nada, son idénticos. 1356 01:03:52,890 --> 01:03:59,030 Y si abrimos, tenemos nuestro archivo. 1357 01:03:59,030 --> 01:04:00,490 Así que esa era la solución correcta. 1358 01:04:00,490 --> 01:04:01,780 Echemos un vistazo hacia atrás en ella una vez más. 1359 01:04:01,780 --> 01:04:04,080 En realidad, ni siquiera necesitará inicializarlo. 1360 01:04:04,080 --> 01:04:05,520 >> Sería probablemente un aspecto un poco limpio si usted no puso 1361 01:04:05,520 --> 01:04:07,680 algo al azar en ese país. 1362 01:04:07,680 --> 01:04:13,070 El punto es, que necesita crear un un poco de espacio para almacenar algo de 1363 01:04:13,070 --> 01:04:15,530 fread y tomar algo de fwrite. 1364 01:04:15,530 --> 01:04:18,400 Y eso tenía que ser un local de variables en la pila - que 1365 01:04:18,400 --> 01:04:19,890 podría haber malloc'd algo de espacio. 1366 01:04:19,890 --> 01:04:23,030 >> Así que en realidad podría tener malloc escrito aquí, y 1367 01:04:23,030 --> 01:04:25,420 eso habría funcionado. 1368 01:04:25,420 --> 01:04:28,660 Y entonces habríamos estado almacenando nuestras cosas en algún lugar en el montón. 1369 01:04:28,660 --> 01:04:31,940 Pero esto es en realidad, probablemente, la solución más elegante. 1370 01:04:31,940 --> 01:04:34,490 Basta con crear un poco de espacio en la pila para que estas cosas pasan. 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> Me gustaría tener otros dos comentarios. 1373 01:04:38,990 --> 01:04:44,650 Si usted fuera a tomar a su vez en esto, y entonces quedan marcados en esto, mis comentarios 1374 01:04:44,650 --> 01:04:47,400 sería de la siguiente manera. 1375 01:04:47,400 --> 01:04:54,300 Estos 1 es aquí, para mí, mirar como números mágicos. 1376 01:04:54,300 --> 01:04:56,860 Este 1, en términos de fread, tiene sentido. 1377 01:04:56,860 --> 01:04:59,580 Ese es el número de cosas para leer o escribir. 1378 01:04:59,580 --> 01:05:03,740 >> Pero esta de aquí debe Probablemente sea algo más. 1379 01:05:03,740 --> 01:05:05,180 Entonces, ¿qué es una solución? 1380 01:05:05,180 --> 01:05:06,545 >> ESTUDIANTES 65: Tamaño de byte. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> JASON HIRSCHHORN: ¿Así? 1383 01:05:11,080 --> 01:05:13,130 >> ESTUDIANTES 65: Tamaño de caracteres. 1384 01:05:13,130 --> 01:05:13,820 >> JASON HIRSCHHORN: Tamaño de caracteres. 1385 01:05:13,820 --> 01:05:15,290 Sí, el byte no es un tipo. 1386 01:05:15,290 --> 01:05:16,320 Así que el tamaño de las obras carac. 1387 01:05:16,320 --> 01:05:30,270 Podríamos tener, en la parte superior de nuestro código, # define que. 1388 01:05:30,270 --> 01:05:33,410 Llamado algo BYTE y es realmente un char. 1389 01:05:33,410 --> 01:05:37,675 En realidad, un enfoque aún mejor que podría haber sido este - 1390 01:05:37,675 --> 01:05:39,391 uint. 1391 01:05:39,391 --> 01:05:40,780 ¿Alguien sabe lo que es eso? 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> Lo siento. 1394 01:05:44,840 --> 01:05:46,090 Lo tengo al revés. 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 Espera, no. 1397 01:05:52,200 --> 01:05:53,450 Por dónde se va? 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 ¿Alguien sabe lo que es eso? 1400 01:05:59,660 --> 01:06:00,950 Sí. 1401 01:06:00,950 --> 01:06:05,650 >> ESTUDIANTES 67: Se supone que ayudará a estandarizar a través de los sistemas de las cosas que 1402 01:06:05,650 --> 01:06:08,760 tener - como enteros sin signo que tiene 8 bytes? 1403 01:06:08,760 --> 01:06:11,785 >> JASON HIRSCHHORN: Eso es exactamente correcto. 1404 01:06:11,785 --> 01:06:14,310 En diferentes máquinas, el tamaño de un char - 1405 01:06:14,310 --> 01:06:15,180 no generalmente un char. 1406 01:06:15,180 --> 01:06:16,100 Chars suelen ser un byte. 1407 01:06:16,100 --> 01:06:19,590 Pero el tamaño de otros tipos de datos son diferentes tamaños en una máquina de 32 bits 1408 01:06:19,590 --> 01:06:21,370 frente a un equipo de 64 bits. 1409 01:06:21,370 --> 01:06:25,180 A uint8_t es siempre de 8 bits - 1410 01:06:25,180 --> 01:06:27,210 siempre un byte. 1411 01:06:27,210 --> 01:06:29,580 >> Y tengo que incluir esa archivo de cabecera estándar int. 1412 01:06:29,580 --> 01:06:35,040 Así que ahora, esto habría sido probablemente la mejor manera de escribir este código. 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 Así que me libro de los números mágicos. 1415 01:06:41,450 --> 01:06:44,690 Y también tengo un más lógico tipo de búfer. 1416 01:06:44,690 --> 01:06:49,450 No es simplemente un char, es un byte, que es lo que esperamos que sea. 1417 01:06:49,450 --> 01:06:53,400 >> Y hasta aquí, hemos hecho sido un poco más robusto. 1418 01:06:53,400 --> 01:06:55,190 No vamos a llamar a un char, que - 1419 01:06:55,190 --> 01:06:58,630 tal vez, quién sabe - podría ser una diferente tamaño en diferentes máquinas. 1420 01:06:58,630 --> 01:07:02,025 En realidad estamos diciendo que esto es exactamente un byte, siempre, no importa qué. 1421 01:07:02,025 --> 01:07:05,810 Y si miramos aquí, hacemos cp. 1422 01:07:05,810 --> 01:07:08,340 Uh-oh. 1423 01:07:08,340 --> 01:07:09,590 ¿Qué pasó? 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> ESTUDIANTES 68: Podría estar encendido. 1426 01:07:16,170 --> 01:07:17,880 >> JASON HIRSCHHORN: ¿Qué? 1427 01:07:17,880 --> 01:07:19,130 >> ESTUDIANTES 69: ¿Lo es? 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> ESTUDIANTES 70: Usted no lo hizo lo definen como un tipo. 1430 01:07:25,080 --> 01:07:28,684 >> ESTUDIANTES 71: Pero lo que debería ser definido en la norma. 1431 01:07:28,684 --> 01:07:29,934 >> ESTUDIANTES 72: ¿Qué está pasando? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> ESTUDIANTES 73: En caso de definir estar todo en mayúsculas? 1434 01:07:40,210 --> 01:07:41,370 >> JASON HIRSCHHORN: Así que no es # define. 1435 01:07:41,370 --> 01:07:45,490 En realidad, en este caso, estoy va a utilizar typedef. 1436 01:07:45,490 --> 01:07:48,590 Debido a que estamos usando como un tipo en un solo lugar. 1437 01:07:48,590 --> 01:07:51,990 Así que en este caso, en realidad queremos typedef que estamos imprimiendo un nuevo tipo 1438 01:07:51,990 --> 01:07:54,490 byte, y es, esencialmente, este. 1439 01:07:54,490 --> 01:07:56,590 Es un poco diferente a # define. 1440 01:07:56,590 --> 01:08:02,740 >> Y ahora, nuestro código funciona perfectamente. 1441 01:08:02,740 --> 01:08:05,230 Así que, de nuevo, # define toma algo, reemplaza todas partes 1442 01:08:05,230 --> 01:08:06,780 con lo otro. 1443 01:08:06,780 --> 01:08:07,920 Es sólo una macro - 1444 01:08:07,920 --> 01:08:09,420 taquigrafía para deshacerse de números mágicos. 1445 01:08:09,420 --> 01:08:11,360 Pero en este caso, porque estamos utilizando como un tipo - 1446 01:08:11,360 --> 01:08:12,180 aquí - 1447 01:08:12,180 --> 01:08:19,880 para que eso funcione, necesitamos typedef a lo byte es. 1448 01:08:19,880 --> 01:08:21,840 >> Y estamos definiendo aquí mismo. 1449 01:08:21,840 --> 01:08:24,750 No es una estructura, en realidad es simplemente un entero sin signo. 1450 01:08:24,750 --> 01:08:27,680 Es un byte de longitud. 1451 01:08:27,680 --> 01:08:31,910 Este código estará disponible en línea, y todos deben tener ahora mismo. 1452 01:08:31,910 --> 01:08:33,830 >> Así que tenemos - 1453 01:08:33,830 --> 01:08:34,250 perfecto - 1454 01:08:34,250 --> 01:08:41,359 13 minutos a la izquierda para ir problema por set 5. 1455 01:08:41,359 --> 01:08:44,270 Quiero caminar por copy.c juntos, y entonces hablaremos brevemente 1456 01:08:44,270 --> 01:08:47,120 sobre las otras partes del conjunto de problemas. 1457 01:08:47,120 --> 01:08:48,899 Así que permítanme levanto copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 Y lo bueno es que hemos hecho ya se ha escrito mucho de este código. 1460 01:09:08,810 --> 01:09:11,180 >> El código que escribimos, literalmente, sólo salió de aquí cuando era 1461 01:09:11,180 --> 01:09:13,120 escribiendo esto en mi cuenta. 1462 01:09:13,120 --> 01:09:16,990 Pero esto es copy.c, constituye la base para las dos primeras partes de 1463 01:09:16,990 --> 01:09:22,340 el problema establecido para whodunit.c, que que necesita para escribir, y resize.c. 1464 01:09:22,340 --> 01:09:27,050 Recover.c, que es el tercero y último parte del conjunto de problemas, no es 1465 01:09:27,050 --> 01:09:29,529 con sede fuera de este archivo. 1466 01:09:29,529 --> 01:09:32,200 >> Vas a tener que escribir ese archivo, te damos una plantilla para que 1467 01:09:32,200 --> 01:09:34,620 presentar, pero no tiene nada que ver con copy.c. 1468 01:09:34,620 --> 01:09:38,675 Pero debido copy.c es la base para las dos primeras partes, vamos 1469 01:09:38,675 --> 01:09:42,000 caminar a través de él ahora, para que tenga un buen sentido de lo que hace. 1470 01:09:42,000 --> 01:09:43,640 >> Y los comentarios dan de parte de ella. 1471 01:09:43,640 --> 01:09:45,120 Ya hemos escrito algo de esto. 1472 01:09:45,120 --> 01:09:49,220 En primer lugar, nos estamos asegurando de tenemos tres argumentos. 1473 01:09:49,220 --> 01:09:50,560 A continuación, estamos recordando el nombre del archivo. 1474 01:09:50,560 --> 01:09:52,960 Así que nos saltamos este paso cuando codificamos lo nuestro - 1475 01:09:52,960 --> 01:09:54,700 cuando nuestro cp. 1476 01:09:54,700 --> 01:09:56,750 Pero aquí, están haciendo un poco más limpio. 1477 01:09:56,750 --> 01:09:59,350 >> Están vigilando para asegurarse ambos archivos son buenas, en 1478 01:09:59,350 --> 01:10:00,450 Además de la apertura de ellos. 1479 01:10:00,450 --> 01:10:04,760 Se escribió todo este código en este momento, así que estoy No voy a detenerme en este código. 1480 01:10:04,760 --> 01:10:09,670 El siguiente es un poco de materia que es específico para los tipos de archivos que estamos utilizando, que 1481 01:10:09,670 --> 01:10:12,240 son archivos de mapa de bits. 1482 01:10:12,240 --> 01:10:15,660 Archivos de mapa de bits tienen algunos metadatos asociado con ellos. 1483 01:10:15,660 --> 01:10:20,190 >> Así que el primer par de bytes le informará sobre el archivo. 1484 01:10:20,190 --> 01:10:23,460 Ellos no son los colores de el píxel en esa imagen. 1485 01:10:23,460 --> 01:10:25,120 Te dicen sobre el archivo. 1486 01:10:25,120 --> 01:10:28,220 Y si usted lee a través del conjunto de problemas, usted tendrá mucha más información 1487 01:10:28,220 --> 01:10:33,100 sobre qué tipos de estructuras de metadatos se incluyen con los mapas de bits. 1488 01:10:33,100 --> 01:10:39,350 >> Pero es por eso que tenemos esta primera conjunto de - el código aquí. 1489 01:10:39,350 --> 01:10:42,490 Estamos leyendo los metadatos - 1490 01:10:42,490 --> 01:10:45,800 dos piezas de metadatos - el archivo encabezado y el encabezado de información. 1491 01:10:45,800 --> 01:10:51,030 Y estamos revisando algunas partes del mismo a asegúrese de que es un archivo de mapa de bits verdadera 1492 01:10:51,030 --> 01:10:52,420 antes de continuar. 1493 01:10:52,420 --> 01:10:55,470 >> Y una vez más, estos son los detalles que no es necesario ir a ahora. 1494 01:10:55,470 --> 01:10:57,720 Si usted lee a través del conjunto de problemas, usted entenderá esto. 1495 01:10:57,720 --> 01:11:01,370 Larga historia corta, estos son sólo diciendo, Este es un archivo de mapa de bits y 1496 01:11:01,370 --> 01:11:02,810 confirmando que. 1497 01:11:02,810 --> 01:11:05,180 >> A continuación, vamos a escribir los al archivo de salida. 1498 01:11:05,180 --> 01:11:05,660 Vemos que aquí. 1499 01:11:05,660 --> 01:11:06,910 Estamos escribiendo al puntero fuera. 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 A continuación, estamos determinando relleno. 1502 01:11:11,320 --> 01:11:15,240 Así que de nuevo, ya que es la particularidad con un archivo de mapa de bits, algunas líneas incluyen 1503 01:11:15,240 --> 01:11:16,840 relleno en el extremo. 1504 01:11:16,840 --> 01:11:19,000 Y si usted lee a través del conjunto de problemas, usted aprenderá más sobre el relleno. 1505 01:11:19,000 --> 01:11:22,330 Esta es la fórmula para encontrar relleno. 1506 01:11:22,330 --> 01:11:23,610 >> Importante recordar - 1507 01:11:23,610 --> 01:11:29,720 cuando se cambia el tamaño de un mapa de bits archivo, los cambios de relleno. 1508 01:11:29,720 --> 01:11:31,970 Cuando se cambia el tamaño de un archivo, los cambios de relleno. 1509 01:11:31,970 --> 01:11:34,310 Nunca va a ser mayor que 3 - 1510 01:11:34,310 --> 01:11:36,510 que va a ser de 0 a 3, inclusive. 1511 01:11:36,510 --> 01:11:38,930 Pero cuando se cambia el tamaño de algo, los cambios de relleno. 1512 01:11:38,930 --> 01:11:47,100 >> Si sólo tengo un píxel en la fila, me necesita tres bytes de relleno, porque 1513 01:11:47,100 --> 01:11:51,190 cada fila tiene que ser múltiplos de cuatro bytes de longitud en un archivo de mapa de bits. 1514 01:11:51,190 --> 01:11:56,120 Pero si me doblo, para ir de un pixel a dos píxeles, cada uno de los cuales, 1515 01:11:56,120 --> 01:11:59,510 digamos, es un byte, entonces necesito dos bytes de relleno para hacer 1516 01:11:59,510 --> 01:12:00,970 que igual a cuatro. 1517 01:12:00,970 --> 01:12:04,200 >> Así que cuando se cambia el tamaño de algo, Tengo que cambiar la cantidad 1518 01:12:04,200 --> 01:12:06,551 de relleno de lo que tengo. 1519 01:12:06,551 --> 01:12:08,100 ¿Eso tiene sentido para todo el mundo? 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 A continuación, iterar sobre cada fila, o a través de todas las filas. 1522 01:12:18,720 --> 01:12:21,400 Y luego iterar a través cada columna en cada fila. 1523 01:12:21,400 --> 01:12:25,330 Estamos tratando a este mapa de bits como una cuadrícula, como hemos tratado 1524 01:12:25,330 --> 01:12:26,490 el tablero en 15. 1525 01:12:26,490 --> 01:12:29,200 >> Como tratamos los ladrillos cuando nosotros los imprimimos en la pantalla. 1526 01:12:29,200 --> 01:12:31,350 Una cuadrícula de filas y columnas. 1527 01:12:31,350 --> 01:12:32,350 Entonces - vimos esto. 1528 01:12:32,350 --> 01:12:33,840 En realidad solo codificamos esto. 1529 01:12:33,840 --> 01:12:35,780 Hemos creado algunos de almacenamiento temporal. 1530 01:12:35,780 --> 01:12:38,710 Leemos allí, y luego escribimos a cabo. 1531 01:12:38,710 --> 01:12:42,680 Esto es exactamente lo que acabamos de hacer. 1532 01:12:42,680 --> 01:12:46,760 >> A continuación, porque dije: cada línea termina en algo de relleno, que 1533 01:12:46,760 --> 01:12:48,260 pasar por alto que el relleno - 1534 01:12:48,260 --> 01:12:51,000 el viejo relleno. 1535 01:12:51,000 --> 01:12:52,630 Y luego añadimos ti. 1536 01:12:52,630 --> 01:12:55,140 En este caso, estamos creando exactamente el mismo archivo. 1537 01:12:55,140 --> 01:12:56,180 Estamos copiarlo. 1538 01:12:56,180 --> 01:12:57,700 Así que esta línea es un poco tonto. 1539 01:12:57,700 --> 01:12:59,660 Podríamos literalmente sólo poner el relleno pulg 1540 01:12:59,660 --> 01:13:04,290 >> Pero si cambia el tamaño del archivo, ¿Todavía quieres esta línea? 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 Así que si queremos cambiar el tamaño de un archivo, Por qué seguimos queriendo saltar 1543 01:13:11,560 --> 01:13:12,810 sobre el viejo acolchado? 1544 01:13:12,810 --> 01:13:15,170 1545 01:13:15,170 --> 01:13:15,970 >> ESTUDIANTES 74: Si. 1546 01:13:15,970 --> 01:13:17,090 >> JASON HIRSCHHORN: Así que lo que hacemos. 1547 01:13:17,090 --> 01:13:19,290 Debido a esto, de nuevo, ofertas con el archivo de origen. 1548 01:13:19,290 --> 01:13:21,570 Nosotros no nos preocupamos por el relleno desde el archivo de origen. 1549 01:13:21,570 --> 01:13:23,410 Queremos ir a la línea siguiente. 1550 01:13:23,410 --> 01:13:28,850 Pero no nos limitamos a poner de nuevo la vieja cantidad de relleno. 1551 01:13:28,850 --> 01:13:31,540 Tenemos que volver a poner el nueva cantidad de relleno. 1552 01:13:31,540 --> 01:13:35,810 >> Así que cuando estamos cambiando el tamaño de una archivo, todavía queremos pasar por alto el 1553 01:13:35,810 --> 01:13:38,270 relleno en el archivo antiguo - lo estamos leyendo desde. 1554 01:13:38,270 --> 01:13:40,370 Pero lo que estamos escribiendo a, vamos a necesitar volver a poner un poco diferente 1555 01:13:40,370 --> 01:13:41,890 número de relleno que hemos determinado. 1556 01:13:41,890 --> 01:13:42,780 Sí. 1557 01:13:42,780 --> 01:13:44,550 >> ESTUDIANTES 75: El orden de los dos líneas no importa, ¿verdad? 1558 01:13:44,550 --> 01:13:46,160 Debido a que usted está manejando diferentes archivos. 1559 01:13:46,160 --> 01:13:46,620 >> JASON HIRSCHHORN: Exactamente. 1560 01:13:46,620 --> 01:13:48,220 El orden de estas dos líneas no importa. 1561 01:13:48,220 --> 01:13:49,790 Escribimos esta línea. 1562 01:13:49,790 --> 01:13:51,430 Esto está aquí para el archivo estamos escribiendo a. 1563 01:13:51,430 --> 01:13:54,370 Eso es importante, por lo que tenemos la cantidad correcta de relleno. 1564 01:13:54,370 --> 01:13:57,560 Esto tiene que ver con el archivo en formato. 1565 01:13:57,560 --> 01:13:58,560 Queremos pasar directamente sobre el relleno. 1566 01:13:58,560 --> 01:13:59,470 >> No queremos leer - 1567 01:13:59,470 --> 01:14:01,500 si estamos leyendo un byte a la vez, nos no se preocupan por los bytes de relleno. 1568 01:14:01,500 --> 01:14:04,070 Queremos pasar a la siguiente línea. 1569 01:14:04,070 --> 01:14:11,800 Por último al igual que Lucy le dio para nosotros, cerramos los archivos y volvemos 0. 1570 01:14:11,800 --> 01:14:13,890 Así que esto es copy.c. 1571 01:14:13,890 --> 01:14:17,850 Y que en realidad escribió - que pasamos la mayor parte de sección de escribir esto, en esencia. 1572 01:14:17,850 --> 01:14:18,740 >> Usted ha hecho esto. 1573 01:14:18,740 --> 01:14:22,440 Así que espero que usted tiene un buen sentido de lo que está pasando aquí. 1574 01:14:22,440 --> 01:14:25,890 La gran diferencia, la verdad, es sólo esta primera parte que se ocupa de 1575 01:14:25,890 --> 01:14:29,970 peculiaridades de los archivos de mapa de bits. 1576 01:14:29,970 --> 01:14:33,570 Así que tengo como mi siguiente diapositiva, ¿Qué necesitamos hacer? 1577 01:14:33,570 --> 01:14:35,510 Bueno, vamos a pensar en quién lo hizo. 1578 01:14:35,510 --> 01:14:38,080 >> Y para alguien que lee a través de establecer el problema, ¿qué hacemos 1579 01:14:38,080 --> 01:14:41,410 que tenga que hacer en novela policíaca? 1580 01:14:41,410 --> 01:14:42,080 Simplemente. 1581 01:14:42,080 --> 01:14:42,460 Aleja. 1582 01:14:42,460 --> 01:14:48,570 >> ALEJA: ¿Se puede sacar la parte de cada píxel que denota rojo. 1583 01:14:48,570 --> 01:14:49,730 Y entonces - 1584 01:14:49,730 --> 01:14:50,730 tipo de? 1585 01:14:50,730 --> 01:14:51,860 >> JASON HIRSCHHORN: OK. 1586 01:14:51,860 --> 01:14:54,460 Así que sacar la parte de cada píxel que denota rojo. 1587 01:14:54,460 --> 01:14:57,234 Eso es cerca, pero no todos de la misma. 1588 01:14:57,234 --> 01:14:59,780 >> ESTUDIANTES 76: Bueno, hay diferentes maneras de hacerlo. 1589 01:14:59,780 --> 01:14:59,870 >> JASON HIRSCHHORN: OK. 1590 01:14:59,870 --> 01:15:03,070 Dame una manera. 1591 01:15:03,070 --> 01:15:08,240 >> ESTUDIANTES 76: Saque todo el rojo, y a continuación, hacer hincapié en el azul y el verde. 1592 01:15:08,240 --> 01:15:10,010 >> JASON HIRSCHHORN: OK. 1593 01:15:10,010 --> 01:15:11,830 Así que teniendo en cuenta estos dos sentidos - 1594 01:15:11,830 --> 01:15:15,210 suena como que le damos un píxel, que tiene un nivel de color rojo, azul y verde. 1595 01:15:15,210 --> 01:15:19,350 Queremos cambiar los niveles relativos de el rojo, azul, y verde, dependiendo 1596 01:15:19,350 --> 01:15:20,740 en ese píxel. 1597 01:15:20,740 --> 01:15:28,380 Cuando en este código debemos cambiar el familiar color rojo, azul y verde 1598 01:15:28,380 --> 01:15:29,720 los niveles de un píxel dado. 1599 01:15:29,720 --> 01:15:30,600 Después de que hemos leído - 1600 01:15:30,600 --> 01:15:32,520 antes de escribir esto? 1601 01:15:32,520 --> 01:15:34,564 Dame el número de línea. 1602 01:15:34,564 --> 01:15:35,950 >> ESTUDIANTES MÚLTIPLES: 83. 1603 01:15:35,950 --> 01:15:37,320 >> JASON HIRSCHHORN: 83. 1604 01:15:37,320 --> 01:15:38,570 Así que aquí. 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 Para quién lo hizo, el código es necesario escribir todos deben ir a la derecha allí. 1607 01:15:45,710 --> 01:15:47,640 Y eso es el único código que necesita para escribir. 1608 01:15:47,640 --> 01:15:51,520 Porque, como hemos escuchado, todo lo que necesita hacer es cambiar estos azul relativa, 1609 01:15:51,520 --> 01:15:54,420 niveles de rojo y verde de cada píxel. 1610 01:15:54,420 --> 01:15:58,250 >> Usted ha leído todo, y ahora que está va a escribirlo. 1611 01:15:58,250 --> 01:16:03,100 ¿Cómo puedo conseguir - si tengo esta cosa llama triple, justo aquí, y es de 1612 01:16:03,100 --> 01:16:04,570 escriba RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 bien, si nos fijamos en bmp.h, ¿cuál es RGBTRIPLE? 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> ESTUDIANTES 77: Es una estructura. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> JASON HIRSCHHORN: RGBTRIPLE es una estructura. 1618 01:16:18,900 --> 01:16:22,330 Vemos que aquí abajo. 1619 01:16:22,330 --> 01:16:26,600 Y así, si quería acceder, por ejemplo, la nivel rojo de la estructura, ¿cómo puedo 1620 01:16:26,600 --> 01:16:30,005 acceder al nivel rojo de esta estructura? 1621 01:16:30,005 --> 01:16:37,280 >> [CLASE SOPLOS] 1622 01:16:37,280 --> 01:16:38,530 >> ESTUDIANTES 78: RGBTRIPLE.rgbtred? 1623 01:16:38,530 --> 01:16:47,250 1624 01:16:47,250 --> 01:16:48,856 >> JASON HIRSCHHORN: ¿Eso es correcto? 1625 01:16:48,856 --> 01:16:53,040 >> ESTUDIANTES 79: Debe ser el triple punto, en lugar de RGBTRIPLE punto? 1626 01:16:53,040 --> 01:16:54,120 >> JASON HIRSCHHORN: Triple. 1627 01:16:54,120 --> 01:16:56,700 Triple es la variable local, por lo que aquí, no hay punteros aquí. 1628 01:16:56,700 --> 01:16:58,400 Entonces sólo tiene que utilizar la notación de puntos. 1629 01:16:58,400 --> 01:17:00,480 Esto me dará el nivel de rojo. 1630 01:17:00,480 --> 01:17:06,180 Si quiero cambiar, me acaba de establecer que iguala a algo diferente. 1631 01:17:06,180 --> 01:17:13,190 Así que de nuevo, esta línea de código tiene acceso a esta variable dentro de esta estructura, y 1632 01:17:13,190 --> 01:17:15,070 podemos configurarlo para que algo nuevo. 1633 01:17:15,070 --> 01:17:20,040 >> Así que para quién lo hizo, de nuevo, esto es, en esencia, lo que tenemos que hacer. 1634 01:17:20,040 --> 01:17:21,170 Muy simple. 1635 01:17:21,170 --> 01:17:25,020 Sólo tienes que cambiar algunos niveles relativos y aquí es donde ese código va. 1636 01:17:25,020 --> 01:17:27,720 Cambiar el tamaño, por otra parte, es un poco más complicado. 1637 01:17:27,720 --> 01:17:30,900 De hecho, el cambio de tamaño es probablemente el más difícil parte de este problema establece. 1638 01:17:30,900 --> 01:17:32,720 Tenemos tres minutos para el final del mismo. 1639 01:17:32,720 --> 01:17:34,910 >> Pero una vez más, ya hemos escrito la mayor parte de este código, por lo que 1640 01:17:34,910 --> 01:17:36,500 debe ser bastante familiar. 1641 01:17:36,500 --> 01:17:40,750 ¿Cuáles son algunas cosas que queremos hacer en cambiar el tamaño, si usted ha leído sobre el 1642 01:17:40,750 --> 01:17:43,470 establece problema? 1643 01:17:43,470 --> 01:17:45,290 Si usted les da a mí, que se puede hablar de ellos. 1644 01:17:45,290 --> 01:17:47,340 ¿Cuáles son algunas cosas que queremos hacer? 1645 01:17:47,340 --> 01:17:47,970 >> ESTUDIANTES 80: Verticalmente - 1646 01:17:47,970 --> 01:17:52,360 lo que tiene que cambiar su tamaño en sentido horizontal, pero verticalmente cambiar su tamaño, así? 1647 01:17:52,360 --> 01:17:58,475 >> JASON HIRSCHHORN: Así que una si se nos da pixel, y queremos cambiar su tamaño por un 1648 01:17:58,475 --> 01:18:03,460 factor de dos, ahora tiene que ser cambiar de tamaño horizontal y cambiar de tamaño 1649 01:18:03,460 --> 01:18:05,220 verticalmente. 1650 01:18:05,220 --> 01:18:06,640 ¿Eso tiene sentido? 1651 01:18:06,640 --> 01:18:07,060 Sí. 1652 01:18:07,060 --> 01:18:09,300 Así que esa es probablemente la mayor desafío. 1653 01:18:09,300 --> 01:18:10,430 Y hablaremos de eso en un segundo. 1654 01:18:10,430 --> 01:18:11,065 Sí. 1655 01:18:11,065 --> 01:18:15,270 >> ESTUDIANTES 81: La forma en que pensaba de ella eras tú necesitabas imprimirlo - 1656 01:18:15,270 --> 01:18:15,490 >> JASON HIRSCHHORN: Espera. 1657 01:18:15,490 --> 01:18:17,580 No nos digan lo que hiciste. 1658 01:18:17,580 --> 01:18:20,620 Vamos a hablar de la lógica. 1659 01:18:20,620 --> 01:18:21,870 >> ESTUDIANTES 81: OK. 1660 01:18:21,870 --> 01:18:25,090 1661 01:18:25,090 --> 01:18:27,410 ¿Cuál era la pregunta? 1662 01:18:27,410 --> 01:18:28,892 >> JASON HIRSCHHORN: Usted acaba de levantado la mano. 1663 01:18:28,892 --> 01:18:31,600 No había duda. 1664 01:18:31,600 --> 01:18:32,520 Permítanme presentarles ella. 1665 01:18:32,520 --> 01:18:34,560 Permítanme discutir esto brevemente. 1666 01:18:34,560 --> 01:18:38,400 Así que hemos un píxel, queremos replicarlo, tanto horizontales como 1667 01:18:38,400 --> 01:18:39,360 verticalmente. 1668 01:18:39,360 --> 01:18:48,920 Así que lo ideal lo que hacemos aquí es, que leer en nuestro pixel, lo escribimos 1669 01:18:48,920 --> 01:18:51,690 sin embargo muchos de los tiempos. 1670 01:18:51,690 --> 01:18:54,720 >> Pero entonces tenemos nuestro truco aquí, porque entonces queremos pasar a la 1671 01:18:54,720 --> 01:18:57,660 siguiente línea y escribir en el a partir de la siguiente línea. 1672 01:18:57,660 --> 01:19:02,960 Así que si queremos replicar tanto horizontal y verticalmente, lo que es 1673 01:19:02,960 --> 01:19:05,050 una buena manera de hacer eso - 1674 01:19:05,050 --> 01:19:06,780 uno bueno, aunque para hacer eso? 1675 01:19:06,780 --> 01:19:11,950 Así que no necesitamos buscar constantemente alrededor de nuestro archivo a colocar las cosas. 1676 01:19:11,950 --> 01:19:14,360 >> Esa pregunta podría no tener tenía sentido, pero creo que una 1677 01:19:14,360 --> 01:19:15,800 responder a ella le ayudará. 1678 01:19:15,800 --> 01:19:17,210 >> ESTUDIANTES 82: Crear una matriz? 1679 01:19:17,210 --> 01:19:20,090 >> JASON HIRSCHHORN: Así que vamos a pensar de cada archivo como una fila. 1680 01:19:20,090 --> 01:19:22,550 Vamos a pensar en términos de filas. 1681 01:19:22,550 --> 01:19:26,670 Si tenemos nuestra primera fila de nuestra pequeña foto, podemos hacer esa fila 1682 01:19:26,670 --> 01:19:30,640 en una gran fila de una imagen grande, y luego replicar esa fila sin embargo 1683 01:19:30,640 --> 01:19:34,250 muchas veces que necesita para replicarse, en lugar de ir pixel por pixel, 1684 01:19:34,250 --> 01:19:37,260 que se pone confuso cuando tratar con archivos. 1685 01:19:37,260 --> 01:19:38,730 >> Porque si hemos tenido - 1686 01:19:38,730 --> 01:19:41,260 Me estoy quedando sin espacio. 1687 01:19:41,260 --> 01:19:46,490 Si este es nuestro archivo, y tenemos que un píxel allí, y queremos ponerlo 1688 01:19:46,490 --> 01:19:49,840 justo ahí, todavía tenemos algunas cosas esa necesidad de ir allí cuando estamos 1689 01:19:49,840 --> 01:19:51,450 la escritura y la creación de nuestro nuevo archivo - 1690 01:19:51,450 --> 01:19:53,250 nuestro archivo que es el doble de grande. 1691 01:19:53,250 --> 01:19:56,820 >> Pero es realmente difícil con funciones de archivo saltar en torno a las nuevas líneas 1692 01:19:56,820 --> 01:20:00,260 de esa manera y, a continuación, volver aquí y poner las cosas en ese país. 1693 01:20:00,260 --> 01:20:04,500 Es casi imposible hacer algo así, si eso tiene sentido. 1694 01:20:04,500 --> 01:20:10,180 Así que si pensamos en términos de filas, podemos tomar nuestra fila y, a continuación, poner - 1695 01:20:10,180 --> 01:20:11,720 replicar filas verticalmente. 1696 01:20:11,720 --> 01:20:15,860 >> Y así fue como abordamos el cambio de tamaño verticalmente en lugar de horizontalmente. 1697 01:20:15,860 --> 01:20:18,810 Eso fue un poco rápido, y un poco confuso. 1698 01:20:18,810 --> 01:20:22,375 Desafortunadamente nuestro tiempo se ha acabado. 1699 01:20:22,375 --> 01:20:27,340 Voy a estar fuera para aquellos de ustedes aquí que tenga preguntas sobre la 1700 01:20:27,340 --> 01:20:30,500 conjunto de problemas, incluyendo la recuperación. 1701 01:20:30,500 --> 01:20:32,320 >> Así que vamos a levantar la sesión por ahora. 1702 01:20:32,320 --> 01:20:34,480 Y de nuevo, si usted tiene cualquier pregunta, podemos charlar exterior. 1703 01:20:34,480 --> 01:20:38,294