I'm trying to use fscanf to read and print every character on the screen, but I'm getting a segmentation fault (core dumped) when I run the program. Here's my code:
#include <stdio.h>
main(int argc, char * argv[]) {
int *a ;
FILE *input;
if (argc>=2) {
input= fopen(argv[1],"r");
if (input!=NULL) {
while (feof(input)==0) {
fscanf(input,"%d\n",a);
printf("%d\n",*a);
}
fclose(input);
} else {
printf("Error!\n");
}
}
}
I provide the file as an argument, like this:
./myprog input.txt
The file input.txt
contains this:
23
47
55
70
Variable
a
is not initialized to point to a valid memory address.Therefore, it is most likely pointing to an invalid memory address.
Here is one way to fix it:
Here is another way to fix it:
But I suggest that you follow the steps below in order to make it simpler and cleaner...
Change this:
To this:
And this:
To this:
When you write:
then
a
is a pointer, but currently it does not point anywhere.You have to make it point to valid storage for an
int
, before you supply it tofscanf
.For example, inside
main()
:Also, your loop is wrong. It is almost always an error to use
feof
(let alone, as a loop condition). Instead, you should test the actual read operation. In your case: