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:
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:
int *a = malloc(sizeof(int));
...
free(a); // when done using it
Here is another way to fix it:
int b;
int *a = &b;
But I suggest that you follow the steps below in order to make it simpler and cleaner...
Change this:
int *a;
To this:
int a;
And this:
fscanf(input,"%d\n",a);
To this:
fscanf(input,"%d\n",&a);
When you write:
int *a;
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 to fscanf
.
For example, inside main()
:
int b;
a = &b;
fscanf(input,"%d\n",a);
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:
while ( 1 == fscanf(input,"%d\n",a) )
{
printf("%d\n", a);
}