Segmentation fault (core dumped) when using fscanf to read into a pointer

后端 未结 2 1968
自闭症患者
自闭症患者 2021-01-29 11:24

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:



        
相关标签:
2条回答
  • 2021-01-29 11:59

    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);
    
    0 讨论(0)
  • 2021-01-29 12:07

    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);
    }
    
    0 讨论(0)
提交回复
热议问题