我试图编写一个包含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 )
答案 0 :(得分:0)
解决了,我试图直接打印int,我应该使用:
printf("Quantity: \n"); scanf("%d",&element.quantity); fprintf(database,"%d",element.quantity);
忘了%d