Моя цель - создать список из «menu.bin». Это FUNC:Создание списка из файла «.bin» в C
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;
};
По какой-то причине результата файла не тот, который должен быть (он не читает документ пролива) Может быть, кто-то может мне помочь.
EDIT: хорошо это работать, и печатает «оле» проблема line.The в том, что файл .bin был завершен со следующим типом структуры:
struct item{
char id[5];
int ing[10];
float qtd[10];}
и когда я делать таНос, я выделить память на следующие типа структуры:
struct item{
char id[5];
int ing[10];
float qtd[10];
pitem prox;
};
Я думаю, что это может быть из-за pitem Prox; (указатель на следующий элемент списка) – DmitryK
Вам известно о выравнивании структуры? Ваша структура, как определено, будет иметь неиспользуемые байты пэдов, чтобы каждый член был выровнен с естественными границами. Вам либо нужно сопоставить это в файле bin, либо вы хотите использовать что-то вроде #pragma pack (1) – TJD
Если вызов этой функции выполняется с непустым p, он почти наверняка будет аварийно (aux будет доступен неинициализированный). Если p всегда является нулевым при первом вызове, я не уверен в его передаче. Но помимо этого ли линия печати «OLE» когда-либо печатается? Я пытаюсь понять, является ли это ошибкой чтения или неудачей в создании связанного списка. Кроме того, после выхода из цикла, aux-> prox должен быть установлен в NULL –