【发布时间】:2017-04-21 06:43:02
【问题描述】:
我不知道为什么,但这会造成分段错误。我认为问题不在于读取文件和编辑结构的代码。头部是一个虚拟节点。我不知道是什么问题,这让我很沮丧。谁能帮我理解一下?
FOOD *New;
FILE *fp = fopen(strcat(fileName,".txt"), "r");
if(fp==NULL) {
printf("File %s is not found.\n", strcat(fileName,".txt"));
return;
}
while(!feof(fp)){
New = (FOOD*)malloc(sizeof(FOOD));
for(i = 0; i < 9; i++){
if(i == 0||i==1||i==2){
fgets(scan, 256, fp);
if(i==0) strcpy(New->category, scan);
else if (i==1) strcpy(New->itemDescription, scan);
else strcpy(New->itemUnit, scan);
//printf("NO");
}
else if (i==3||i==4||i==5){
fscanf(fp, "%f", &fscan);
fgetc(fp);
if(i==3) New->basePrice = fscan;
else if(i==2) New->comboPrice = fscan;
else New->upgradePrice = fscan;
//printf("NO");
}
else{
fscanf(fp, "%i", &iscan);
fgetc(fp);
if(i==6) New->hierarchy = iscan;
else if (i==7) New->numberOfInitialInventory = iscan;
else New->numberOfPresentInventory = iscan;
printf("NO");
}
}
if((*head)->next == NULL){
(*head)->next = New;
temp = New;
}
else{
temp->next = New;
temp = New;
}
}
fclose(fp);
这是食物结构:
typedef struct foodtag{
char category[256];
char itemDescription[256];
char itemUnit[256];
int hierarchy;
int numberOfInitialInventory;
int numberOfPresentInventory;
float basePrice;
float comboPrice;
float upgradePrice;
struct foodtag *prev;
struct foodtag *next;
}FOOD;
【问题讨论】:
-
你应该发布,至少
FOODstruct。最好有MCVE -
什么是食物结构?
-
如果您遇到分段错误,您应该有一个核心文件(取决于 ulimit)来检查。如果没有,您可以在调试器下运行该进程,它将在段错误处停止。
-
提示:不要将
if ()和条件指令放在同一行,这样会很难阅读和调试。 -
您的调试器会告诉您崩溃发生的确切位置。现在该学习如何使用调试器了。
标签: c file linked-list