C/Visual C - Desfase de datos.

 
Vista:

Desfase de datos.

Publicado por Phineas Robo (1 intervención) el 02/07/2005 03:52:28
Estoy haciendo un programa en C que utiliza apuntadores a estructuras y archivos. Utilizando las instrucciones fread y fwrite leo y escribo mis estructuras respectivamente. Pero ocurre algo que todavía no he podido determinar. Algunos registros se graban correctamente y otros se graban desfasados, de tal manera que cuando los recupero los datos caen en variables de la estructura que no les corresponden. Cabe señalar que sólo tengo un apuntador a una estructura y un apuntador a un sólo archivo. Cualquier ayuda será bien recibida.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Desfase de datos.

Publicado por chuidiang (677 intervenciones) el 02/07/2005 11:20:26
Hola:

Con lo que cuentas y sin ver el código es dificil determinar el error. Te cuento un par de fallos típicos y dificil de ver con este tipo de cosas. Uno es poner punteros como campos de la estructura. Por ejemplo

struct persona
{
char *nombre;
int edad;
}

Si grabas la estructura en fichero con fwrite, se guardará el valor del puntero nombre, no la cadena de caracteres a la que apunta. Cuando lo recuperes, puede salirte en nombre cualquier cosa. Si este fuese el problema, es mejor esto

struct persona
{
char nombre[25]; // Un array de tamaño fijo
int edad;
}

Otro posible problema es que las estructuras y los campos deben tener un tamaño múltiplo de 4 bytes. En el ejemplo que te he puesto, si haces sizeof(estructura), no sale 25+4, sino 28+4. El motivo es que el compilador, al no ser nombre múltiplo de 4, entre nombre y edad deja bytes en blanco, en concreto, 3. Esto no debe darte problemas si siempre haces fwrite() y fread() de la estructura completa, pero si te los dará si, por ejemplo, haces fwrite() de la estructura completa y luego lees fread() los campos de uno en uno con el tamaño que supones que tiene.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar