问题描述
我目前在此代码中遇到分段错误 11。我正在尝试读取输入文件并将其存储到我的结构中。每当我运行时,它只打印出文本文件的第一项,然后它会给我一个 Segmentation Fault 11 错误。什么可能导致这种情况?
这是我的代码:
typedef struct{
int serialNum;
char giftName[50];
int price;
char store[50];
} product;
void read_File(const char *filename)
{
filename = "items.txt";
product p[4] = {0};
int i = 0;
FILE *file = fopen(filename,"r");
if (file){
char line[100];
while(fgets(line,sizeof line,file) && i < 6){
fputs(line,stdout);
if (sscanf(line,"%d %s %d %s",p[i].serialNum,p[i].giftName,p[i].price,p[i].store) == 5)
{
printf("Storing information in structure complete.");
}
}
fclose(file);
}
else{
perror(filename);
}
}
解决方法
要通过sscanf()
(或其他scanf()
系列)读取整数,您必须传递指针,以便sscanf()
可以写入使用指针读取的整数.
另一方面,要通过sscanf()
读取字符串,您不需要也不应该添加&
,因为数组将自动转换为指向第一个元素。
此外,在只有 4 件事要阅读的情况下检查 == 5
也很奇怪。
if (sscanf(line,"%d %s %d %s",&p[i].serialNum,/* add & to pass pointer */
p[i].giftName,&p[i].price,/* add & to pass pointer */
p[i].store) == 4) /* correct number */