fwrite write an integer
-
01-10-2019 - |
Question
I'm trying to write a word to a file using this function:
extern void write_int(FILE * out, int num) {
fwrite(&num,sizeof(int),1, out);
if(ferror(out)){
perror(__func__);
exit(EXIT_FAILURE);
}
}
But I get a segmentation fault whenever it tries to run the fwrite. I looked at the man page for fwrite(3) and I feel like I used it correctly, is there something I'm missing?
Solution
Try this instead:
void write_int(FILE * out, int num) {
if (NULL==out) {
fprintf(stderr, "I bet you saw THAT coming.\n");
exit(EXIT_FAILURE);
}
fwrite(&num,sizeof(int),1, out);
if(ferror(out)){
perror(__func__);
exit(EXIT_FAILURE);
}
}
And why was your original function extern
?
OTHER TIPS
Is the file handle valid? Did you fopen() with "w"? fwrite() will segfault if it's not.
The function itself really does nothing, so it's obviously the fwrite call that's the problem. Examine the arguments.
out
does not contain the address of the file, rather it contains the address of the file pointer your passing in main. This function prototype should be like:
extern void write_int(FILE * & out, int num);
In this way you are making a double pointer to the pointer in main which is then pointing to the file.