Básicamente abres un fichero y guardas cada variable por separado por mucha estructura que sea ya que de no ser así puedes tener problemas con el alineamiento de los miembros de la estructura. Si quieres buscar por tu cuenta más sobre el tema busque Byte align o alineamiento de bytes en C.
lo entenderás si haces un sizeof de una estructura como esta:
Código C:
Ver original#include <stdio.h>
struct s{
char c; //1Byte ?
int i; //4Bytes? 1+4 = 8 WTF! Y aun peor... yo veo 8 pero tu puede ver otra cosa =O
}BA; //Byte Align =D
int main (){
return 0;
}
Hace poco ha habido dudas similares donde se explico el problema.
http://www.forosdelweb.com/f96/posic...eda-c-1124666/
Lo que debes evitar es enviar toda la estructura a el archivo
de una sola pieza, ya que el compilador alinea de una forma
automática y poco transparente al programador, por motivos de rendimiento, inflandolos algunos de ellos para que tengan un tamaño más o menos igualados. Pero la cosa no termina ahí, el problema es que cada compilador lo hace a su manera, y dependiendo de una serie de factores como arquitectura, sistema operativo, el orden en los que se presentan los datos en la estructura, y un sin fin de parámetros más, verás como un programa que parecía funcionar bien en tu computadora, puede sin motivos aparentes, fallar en la computadora de tu maestro, ni tu y dependiendo se sus conocimientos, ni el, van a enterarse el porque del fallo, y desde luego os digo que no será por vuestra culpa si no del padding(relleno) y del Byte align(alineamiento de Bytes).
Te recomiendo que si tienes una estructura estilo la de arriba con un char y un int dentro, lo mejor es enviar BA.c y luego BA.i al archivo que enviar BA que contenga ambas, como has visto con el sizeof, para nada se parece a la suma de ambos objetos.
printf("%d",sizeof(BA) ); no se parece para nada a printf("%d",sizeof(BA.c) + sizeof(BA.i) ); que es la suma de los componentes. veras que sizeof(BA) te da un resultado inflado. Eso lo hace por que es mucho más rápido buscar datos de igual tamaño en memoria que de tamaños variados.
Si no sabes como hacer, al menos pega la estructura aquí, y te monto un par de funciones que lean y impriman desde, y hacia un fichero.
Si tienes la oportunidad pregunte a tu maestro por el alineamiento de bytes, y a ver si te puede aprender sobre ese caso especial, te aseguro que es muy importante, ni te lo imaginas. ;)