Si no he entendido mal, lo que quieres hacer es guardar la estructura 'persona' como binario en un archivo. La estructura es
Bien, si ese es el objetivo, hay un error. El problema es que cuando guardas la estructura en un archivo copiada de byte a byte, cuando copias la variable 'nombre', en realidad estás copiando la dirección de memoria donde reside el primer byte de la cadena.
Por ejemplo, declaro el siguiente objeto:
Bien, ahora la estructura, a nivel de bits, se vería (por ejemplo), así:
Como ves, en ningún sitio aparece el nombre como tal. Entonces, lo que tendrías que hacer es primero hacer un "write" con la cadena del nombre, y luego tendrías que guardar tanto la renta como la nota en binario... Puedes usar el siguiente fragmento:
Código (cpp) [Seleccionar]
typedef struct {
char nombre[MAX];
int renta;
float nota;
}lista;
Bien, si ese es el objetivo, hay un error. El problema es que cuando guardas la estructura en un archivo copiada de byte a byte, cuando copias la variable 'nombre', en realidad estás copiando la dirección de memoria donde reside el primer byte de la cadena.
Por ejemplo, declaro el siguiente objeto:
Código (cpp) [Seleccionar]
lista persona;
persona.nombre = "Esto es un nombre";
persona.renta = 14000;
persona.nota = 5;
Bien, ahora la estructura, a nivel de bits, se vería (por ejemplo), así:
Código [Seleccionar]
0xF4567E22 // Dirección de memoria
0x000036B0 // 14000
0x00000005 // 5
Como ves, en ningún sitio aparece el nombre como tal. Entonces, lo que tendrías que hacer es primero hacer un "write" con la cadena del nombre, y luego tendrías que guardar tanto la renta como la nota en binario... Puedes usar el siguiente fragmento:
Código (cpp) [Seleccionar]
archivodat.write(persona.nombre, MAX);
archivodat.write(reinterpret_cast<const char*>(&persona.renta), sizeof(int) + sizeof(float));