我正在尝试编写一个小型数据库程序,它将有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 回答
解决了,我试图直接打印int,我应该使用:
忘了%d