Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/09/2015, 23:56
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Inicializar archivo con '/0'

No es necesario inicalizar todo el fichero a '\0'. No suele ser práctico la inmensa mayoría de las veces (imagínate una agenda de contactos, ¿qué haces entonces? limitas la agenda a un número fijo de contactos? creas un fichero de varios gigas por si las moscas?).

Para guardar cadenas en un fichero tienes varias opciones:
  • Almacenar, justo antes de la cadena, la longitud de la misma. Entonces primero vas a leer la longitud de la cadena, lo que te permite leer la cadena correctamente.
  • Asignar un tamaño fijo a la cadena. Si tu coges un char* y lo vuelcas tal cual en un fichero también se almacenará el '\0' final, por lo que al leer el bloque de nuevo la cadena leída será correcta
  • En el caso de ficheros con formato, basta con incluir la secuencia que indique que pasas al siguiente campo (salto de línea, </etiqueta> en el caso del xml, ...)
Por otro lado tu estás volcando el fichero usando 'cat' que es un programa pensado para volcar ficheros de texto, no ficheros binarios. Si a eso le sumas que el caracter terminador de cadena '\0' no es un caracter imprimible directamente pues te puedes imaginar que el resultado final puede no ser el esperado. Para verificar que tu programa funciona correctamente tienes que usar un editor binario.


En cuanto al problema de la lectura poco te puedo decir sin ver el código fuente... si pusieses los dos códigos fuente completos tal vez te podamos dar algo más de información.


Un saludo