usando fwrite () para escribir una estructura en un archivo

Tengo el siguiente progtwig:

#include  #include  #include  #define MAXLEN 100 typedef struct {int key; char data[MAXLEN];} record; main(int argc, char *argv[]) { int n, i; record x; FILE *fp; fp = fopen(argv[1], "w+"); printf("How many records will be entered? \n"); scanf("%d", &n); for (i=0; i<n; i++) { printf("Enter record: \n"); scanf("%d", &x.key); scanf("%s", &x.data); fwrite(&x, sizeof(record), 1, fp); } } 

Lo que estoy haciendo es crear registros a partir de la entrada del usuario y luego almacenar estos “registros” en un archivo. Sin embargo, cuando uso fwrite (), el archivo que se crea tiene muchos caracteres extraños escritos, en lugar de tener cada registro con su clave y sus datos. ¿Alguien puede decirme por qué está escribiendo todos estos personajes extraños?

Muchas rasones:

  1. Cuando usa scanf, traduce una forma legible para el ser humano (% d) en algo que la computadora usa directamente (int). Luego escribe la forma legible por computadora en un archivo. Ahora, cuando ve el archivo, NO está utilizando la forma inversa de computadora a persona, sino algo mucho más bajo. Esto te dará algo que se ve mal.
  2. Está escribiendo el x.data completo a pesar de que puede haber leído datos parciales en él (por ejemplo, leyendo una cadena de longitud 10). El rest de x.data está “sin inicializar” y contiene todo lo que quedó en la memoria cuando se llamó a main ().

También he tenido el mismo tipo de problema al leer la estructura de bloque de parámetros de BIOS desde una imagen de disquete. Lo resolví usando la directiva #pragma pack(1) . El código de muestra está abajo:

 #pragma pack(1) struct bpb { unsigned char jmpinstruction[3]; unsigned char oem[8]; short bytespersector; .... }; #pragma pack() 

Está almacenando los datos como registros binarios, no como texto plano.

No podrás verlo utilizando el bloc de notas.

Para ver los registros, deberá escribir otro progtwig que lea los registros del archivo en la misma estructura.