Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Inicializar archivo con '/0'

Estas en el tema de Inicializar archivo con '/0' en el foro de C/C++ en Foros del Web. Buenas! Tengo un archivo de un tamano ej 100 bytes, y me gustaria inicializar cada byte con el caracter '\0', a fin de que cuando ...
  #1 (permalink)  
Antiguo 14/09/2015, 10:53
 
Fecha de Ingreso: abril-2015
Mensajes: 13
Antigüedad: 7 años, 1 mes
Puntos: 0
Pregunta Inicializar archivo con '/0'

Buenas!

Tengo un archivo de un tamano ej 100 bytes, y me gustaria inicializar cada byte con el caracter '\0', a fin de que cuando lea un dato sepa cuando deje de leer.

He intentado algo como esto pero no me funciona::

Código:
int main(void) {

FILE* archivo_swap = fopen(RUTA_ARCHIVO,"wb");

	int i;
	int tamanio= 100;

	for(i=0;i<tamanio;i++){

		fputc('\0',archivo_swap);

	}

	close(archivo_swap);


return 0;

}
Bueno, luego en otro main escribo hola, y al abrir una terminal y ejecutar cat archivo, me muesta hola seguido de muchos 0, esta bien esto??, asi deberia de verse el \0?

Otra cosa, ejecuto otro programa para leer el contenido, y hago un for en el cual deberia de leer hasta encontrar el '\0' que indique el fin de cadena, al ejecutarlo por la terminal me devuelve un simbolo de ? y no la cadena escrita.

Tambien me gustaria cada vez que escribo en el archivo poder terminar con un byte de '\0', con el mismo fin de saber cundo termina la cadena

Última edición por aleixen; 14/09/2015 a las 12:44
  #2 (permalink)  
Antiguo 14/09/2015, 23:56
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 7 años, 7 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
  #3 (permalink)  
Antiguo 15/09/2015, 17:09
 
Fecha de Ingreso: abril-2015
Mensajes: 13
Antigüedad: 7 años, 1 mes
Puntos: 0
Respuesta: Inicializar archivo con '/0'

Cita:
Iniciado por eferion Ver Mensaje
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
Gracias por responder, lo pude resolver, utilizando fputc que guarda el caracter el archivo.

Con respecto a lo de escribir, yo recibo un char* por lo que me decis ya tengo incluido el '\0', con eso ya se cuando parar para no leer basura.

En fin, gracias por la mano!

Etiquetas: caracteres-especiales, ficheros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:30.