首页 文章

Segfault scanf和fprintf

提问于
浏览
0

我正在尝试编写一个小型数据库程序,它将有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

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

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

    忘了%d

相关问题