Segfault scanf和fprintf

时间:2016-06-20 20:38:32

标签: struct segmentation-fault printf scanf fgets

我试图编写一个包含5个函数的小型数据库程序,第一个是Add(),但我在scanf上遇到SegFault错误:


    void Add();

    struct data{
        char name[20];
        char description[300];
        int quantity;
    };

    typedef struct data dataobj;

    dataobj element;

    int main()
    {
        Add();

        return 0;

    }

    Add() {

        FILE *database;
        database = fopen("database.txt", "a+");

        printf("Object: \n");
        fgets(element.name,20,stdin);
        fprintf(database, element.name);

        printf("Description: \n");
        fgets(element.description,300,stdin);
        fprintf(database, element.description);

        printf("Quantity: \n");
        scanf("%d",&element.quantity);
        fprintf(database, element.quantity);

        fclose(database);
    }


这是错误:程序接收信号SIGSEGV,分段故障。 在ungetwc()(C:\ WINDOWS \ SysWOW64 \ msvcrt.dll)

调试器窗口:


    #0 0x77bea965   ungetwc() (C:\WINDOWS\SysWOW64\msvcrt.dll:??)
    #1 0x77c21268   msvcrt!_iob() (C:\WINDOWS\SysWOW64\msvcrt.dll:??)
    #2 ??   ?? () (??:??)

另外我注意到如果我在scanf指令后写fgets,fgets将不会因某些原因被执行。所以,在原型中我必须保持这个顺序:char char int(例如我不能写:char int char )

1 个答案:

答案 0 :(得分:0)

解决了,我试图直接打印int,我应该使用:

 printf("Quantity: \n");
    scanf("%d",&element.quantity);
    fprintf(database,"%d",element.quantity);

忘了%d