gpt4 book ai didi

c - 保存和读取二进制列表?

转载 作者:行者123 更新时间:2023-11-30 17:51:19 24 4
gpt4 key购买 nike

你能告诉我哪里做错了吗...为什么它不能正常工作?

这是我的二进制保存文件:

int SaveToBinary(FILE *fp,struct node *kvartiras){
int l;
struct node *tmp=NULL;

for(tmp=kvartiras; tmp; tmp = tmp->next){
l=fwrite(&(tmp->s),1,sizeof(Kvartira),fp);
if (l != (sizeof(Kvartira))) {
printf("\nгрешка - неуспешно записване на данните !");
return 1;
}
}
system("cls");
return 0;

}

从二进制文件中读取:

struct node * ReadBinary(FILE *fp,struct node *kvartiras){
struct node *tmp=NULL;
struct node *tmp2=NULL;
int l;
if((kvartiras) && (kvartiras->next)) {
*tmp = *kvartiras;
*tmp2 = *kvartiras->next;
}
while(tmp2) {
free(tmp);
tmp=tmp2;
tmp2 = tmp2->next;
}


rewind(fp);
while(!feof(fp))
{
tmp=(struct node*) malloc(sizeof(struct node));
if(!tmp){
printf("\nГрешка при заделяне на паметта !\n");
return kvartiras;
}
l=fread(&(tmp->s),1,sizeof(Kvartira),fp);
if (l != (sizeof(Kvartira)))
{
free(tmp);
return kvartiras;
}
tmp->next=kvartiras;
kvartiras=tmp;
}
return kvartiras;
}

这是我使用的案例:

        case 6:
if(kvartiras){
for(i=0;i<256;i++) check[i]='\0';
fflush(stdin);
printf("\nВъведете име на файл:");
scanf_s("%s",check);
fp_out= fopen(check,"wb");
if(fp_out)
{
if(!(SaveToBinary(fp_out,kvartiras))){
//-- извикване на ф-я за запис на данните в двоичен файл --
printf("\nданните са записани във файл <%s> успешно !",check);
if(fp_out) fclose(fp_out);
}
}else printf("\nгрешка - неуспешно създаване на файла !");
}else printf("\nгрешка - базата данни е празна !");
break;
case 7:
for(i=0;i<256;i++) check[i]='\0';
fflush(stdin);
printf("\nВъведете име на файл:");
scanf_s("%s",check);
fp_in=fopen(check,"rb");
if(fp_in){
kvartiras=ReadBinary(fp_in,kvartiras);
//-- извикване на ф-я за прочитане на данни от двоичен файл --
if(kvartiras) printf("\nданните са прочетени успешно !");
if(fp_in) fclose(fp_in);
}else printf("\nгрешка - неуспешно създаване на файла !");
break;
}
}while (mode != 8 );
return 0;
}

结构:

typedef struct {
int kod;
char adres[51];
int plo6t;
int stai;
int naem;
} Kvartira;

struct node {
Kvartira s;
struct node *next;
};

最佳答案

可能有一个错误:

 if (l != (sizeof(Kvartira))) 

这永远是正确的,sizeof(Kvartira) 至少是 sizeof(int) * 4 + 51。

关于c - 保存和读取二进制列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16776000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com