我的目标是从“menu.bin”创建一个列表。这是函数:
pitem recupera_menu(pitem p){
pitem novo,aux;
FILE *f;
f=fopen("menu.bin","rb");
if(f == NULL)
printf("Erro ao caregar o ficheiro 'menu.bin' \n");
novo = (struct item*)malloc(sizeof(item));
if(novo == NULL)
return p;
novo->prox=NULL;
while((fread(novo,sizeof(item),1,f))!=NULL){
if(p==NULL){
p=novo;
aux=p;
}
else{
aux->prox=novo;
aux=aux->prox;
}
printf("%s\n OLE\n",aux->id);
}
fclose(f);
system("pause");
return p;
}
这是我的结构:
typedef struct item item, *pitem;
struct item{
char id[5];
int ing[10];
float qtd[10];
pitem prox;
};
由于某种原因,文件的结果不应该是(它不会读取文件海峡)。也许有人可以帮助我。
编辑: 它确实运行,并打印“ole”行。问题是文件.bin已完成,具有以下结构类型:
struct item{
char id[5];
int ing[10];
float qtd[10];}
当我执行malloc时,我将内存分配给以下结构类型:
struct item{
char id[5];
int ing[10];
float qtd[10];
pitem prox;
};
答案 0 :(得分:0)
struct item{
char id[5];
int ing[10];
float qtd[10];
};
struct list{
struct list *next;
struct item payload;
};
分配:
struct list *p;
p = malloc (sizeof *p);
从文件中读取:
ret = fread(&p->payload, sizeof p->payload, 1, fp);
额外:消毒循环:
int recupera_menu(struct list **pp){
int ret,cnt;
FILE *fp;
fp = fopen("menu.bin","rb");
if (!fp) {
fprintf(stderr, "Erro ao caregar o ficheiro 'menu.bin' \n");
return 0;
}
for (cnt=0; ;cnt++) {
*pp = malloc(sizeof **pp);
if( !*pp ) break;
(*pp)->next = NULL;
ret = fread(&(*pp)->payload, sizeof &(*pp)->payload, 1, fp);
if (ret < 1) break;
pp = &(*pp)->next;
}
free (*pp);
*pp = NULL;
fclose(fp);
return cnt
}