using fwrite() to write a struct to a file
c, file, fwrite, struct
Solution
Several reasons:
- When you use scanf, it translates a human readable form (%d) into something the computer uses directly (int). You then write out the computer-readable form into a file. Now, when you view the file, you are NOT using the inverse computer-to-human-readable form but something much lower-level. This will give you something that looks wrong.
- You are writing out the entire x.data even though you may have read partial data into it (say, reading a string that's length 10). The remainder of the x.data is "uninitialized" and contains whatever was left in memory when main() was called.
Problem
I have the following program: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #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); } } ``` What I am doing is creating records from user input, and then storing these "records" into a file. However, when I use fwrite(), the file that is created has a lot of strange characters written in it, instead of simply having each record with its key and data. Can anyone tell me why it's writing all of these strange characters?