【发布时间】:2021-02-21 14:38:13
【问题描述】:
我目前在此代码中遇到分段错误 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);
}
}
【问题讨论】:
-
当
p只有4成员时,为什么你的限制是i < 6(即i <= 5)? -
这里有几个问题。您的
while循环永远不会增加i,因此它的值始终为0。您已为4 个产品分配空间,但您的i < 6建议您最多允许6 个。您正在检查sscanf的结果为5 ,但您只扫描 4 个项目。 -
实际上允许无限行读取,因为
i没有改变。 -
提示一下,不要使用
sscanf()作为条件。它使调试更加困难,if的可读性大大降低 -
您正在使用
sscanf完成 4 项作业。为什么将结果与 5 进行比较?
标签: c segmentation-fault structure fault