C 从二进制文件读取结构
很抱歉问了这个愚蠢的问题,但我对C还是新手 这是我的结构:C 从二进制文件读取结构,c,file-handling,C,File Handling,很抱歉问了这个愚蠢的问题,但我对C还是新手 这是我的结构: struct Questions { unsigned number, correctanswer, difficulty; char question[SIZE], otg1[SIZE], otg2[SIZE], otg3[SIZE], otg4[SIZE], date[SIZE], author[SIZE]; struct Questions *next; }; 我需要将信息存储在结构指针中,同时为其每个字符串分配内存。我
struct Questions
{
unsigned number, correctanswer, difficulty;
char question[SIZE], otg1[SIZE], otg2[SIZE], otg3[SIZE], otg4[SIZE], date[SIZE], author[SIZE];
struct Questions *next;
};
我需要将信息存储在结构指针中,同时为其每个字符串分配内存。我在二进制文件中用逗号分隔了字符串,因此我可以找出每个字符串的结束位置,以及下一个字符串的开始位置。我在另一个函数中打开了该文件,但我确实认为问题出在这里:
Questions *readQuestionFromBin(FILE *fp)
{
Questions *temp=NULL;
char *ptr;
temp=(Questions*)malloc(sizeof(Questions));
if(temp==NULL)
{
printf("vtorata funkciq nqma pamet za vuprosa");
return NULL;
}
if(fread(&temp->number,sizeof(unsigned),1,fp)!=1)
{
return NULL;
}
ptr=(char*)malloc(SIZE*sizeof(char));
if(ptr==NULL)
{
printf("nqma pamet za vuprosa");
return NULL;
}
ptr=temp->question;
int i=0;
while(1)
{
*(ptr+i)=getc(fp);
if(*(ptr+i)==',')
{
*(ptr+i)='\0';
break;
}
i++;
}
ptr=(char*)realloc(temp->question,sizeof(char)*(i+1));
if(ptr==NULL)
{
printf("ima pamet za vuprosa ama ne moje da reallocne");
return NULL;
}
ptr=(char*)malloc(SIZE*sizeof(char));
if(ptr==NULL)
{
printf("nqma pamet za otg1");
return NULL;
}
ptr=temp->otg1;
i=0;
while(1)
{
*(ptr+i)=getc(fp);
if(*(ptr+i)==',')
{
*(ptr+i)='\0';
break;
}
i++;
}
ptr=(char*)realloc(temp->question,sizeof(char)*(i+1));
if(ptr==NULL)
{
printf("ima pamet za otg1 ama ne moje da reallocne");
return NULL;
}
ptr=(char*)malloc(SIZE*sizeof(char));
if(ptr==NULL)
{
printf("nqma pamet za otg2");
return NULL;
}
ptr=temp->otg2;
i=0;
while(1)
{
*(ptr+i)=getc(fp);
if(*(ptr+i)==',')
{
*(ptr+i)='\0';
break;
}
i++;
}
ptr=(char*)realloc(temp->question,sizeof(char)*(i+1));
if(ptr==NULL)
{
printf("ima pamet za otg2 ama ne moje da reallocne");
return NULL;
}
ptr=(char*)malloc(SIZE*sizeof(char));
if(ptr==NULL)
{
printf("nqma pamet za otg3");
return NULL;
}
ptr=temp->otg3;
i=0;
while(1)
{
*(ptr+i)=getc(fp);
if(*(ptr+i)==',')
{
*(ptr+i)='\0';
break;
}
i++;
}
ptr=(char*)realloc(temp->question,sizeof(char)*(i+1));
if(ptr==NULL)
{
printf("ima pamet za otg3 ama ne moje da reallocne");
return NULL;
}
ptr=(char*)malloc(SIZE*sizeof(char));
if(ptr==NULL)
{
printf("nqma pamet za otg4");
return NULL;
}
ptr=temp->otg4;
i=0;
while(1)
{
*(ptr+i)=getc(fp);
if(*(ptr+i)==',')
{
*(ptr+i)='\0';
break;
}
i++;
}
ptr=(char*)realloc(temp->question,sizeof(char)*(i+1));
if(ptr==NULL)
{
printf("ima pamet za otg4 ama ne moje da reallocne");
return NULL;
}
if(fread(&temp->correctanswer,sizeof(unsigned),1,fp)!=1)
return NULL;
ptr=(char*)malloc(SIZE*sizeof(char));
if(ptr==NULL)
{
printf("nqma pamet za data");
return NULL;
}
ptr=temp->date;
i=0;
while(1)
{
*(ptr+i)=getc(fp);
if(*(ptr+i)==',')
{
*(ptr+i)='\0';
break;
}
i++;
}
ptr=(char*)realloc(temp->question,sizeof(char)*(i+1));
if(ptr==NULL)
{
printf("ima pamet za data ama ne moje da reallocne");
return NULL;
}
ptr=(char*)malloc(SIZE*sizeof(char));
if(ptr==NULL)
{
printf("nqma pamet za avtor");
return NULL;
}
ptr=temp->author;
i=0;
while(1)
{
*(ptr+i)=getc(fp);
if(*(ptr+i)==',')
{
*(ptr+i)='\0';
break;
}
i++;
}
ptr=(char*)realloc(temp->question,sizeof(char)*(i+1));
if(ptr==NULL)
{
printf("ima pamet za avtor ama ne moje da reallocne");
return NULL;
}
if(fread(&temp->difficulty,sizeof(unsigned),1,fp)!=1)
return NULL;
temp->next=NULL;
return temp;
}
“我确实认为问题就在这里的某个地方”。什么问题?您没有提出任何问题,也没有描述任何具体问题。这段长代码对其他人帮助您没有帮助。它没有正确读取文件,我不知道问题可能出在哪里。您的代码很难理解,其中包含一些毫无意义的内容<代码>ptr=(char*)malloc(SIZE*sizeof(char));ptr=临时->问题代码>您是否意识到第二条语句会丢弃第一条语句的结果?我真的不知道你在那里做什么。此外,您似乎在一遍又一遍地重复相同/相似的代码-您了解函数了吗?我使用第二条语句,以便将指针设置为指向temp->question的地址。