gpt4 book ai didi

c - C语言用二进制文件保存和读取结构体数组

转载 作者:行者123 更新时间:2023-11-30 15:33:25 25 4
gpt4 key购买 nike

我的阅读功能存在一些问题。

我的阅读功能是:

int readFileToPic(FILE* f, pic* picture_Reccord, int picNumber){

int count = 0;

f = fopen("Record.dat", "rb");

if (f == NULL){
printf("\n Unable to open file!\n");
}
else{
count= fread(&picture_Reccord, sizeof(picture_Reccord), Maximun_Picture, f);
fclose(f);
}
if (count <=0 && count >= Maximun_Picture)
return -1;

//breaking the programe
//picture_Reccord[count].fileName[0] = '\n';

return count;
}

这就是我的称呼

case 3:
printf("Read picture records from disk\n");
count= readFileToPic(file, pictureRecord, picNumber);
printf("\n\nRead %d photos\n", count);
//testing
printf("\n%d\n", pictureRecord[0].location);
break;

它每次都会打印“Read 4 photos”并在测试部分进行抓取

这是我的保存功能,以防出现问题

void savePic(FILE* f, pic picture_Record){

f= fopen("Record.dat","wb");
if (f == NULL)
{
printf("\nError! Not able to save!\n");
}

fwrite(&picture_Record, sizeof(picture_Record), 1, f);
fclose(f);

printf("One Pic Saved\n");

}

这是我更新的结构,感谢@Jonathan Leffler

typedef struct picture_Data
{
char fileName[Input_Length_fileName];
char description[Input_Length_description];
char location[Input_Length_fileName];
int peopleCount;
}pic;

有人可以帮助我并告诉我问题出在哪里吗?

最佳答案

当您的结构包含指针时,它无法合理地“序列化”。也就是说,它不能使用诸如 fwrite() 之类的任何函数来编写。

你问为什么不呢?好问题!

这样想:如果您有一个包含指向字符串(例如名称)的指针的结构,那么字符串中的数据通常与该结构不连续,并且当然不包括其大小结构尺寸。

相比之下,如果结构包含(固定大小)字符数组,则您可以编写整个结构,因为数据与结构的其余部分连续,并且计入数组的大小。

灵活数组成员需要稍微小心,但只要主结构记录灵活数组有多大,就可以将其写入磁盘。您可以在一次操作中写入,但需要两次读取。第一次读取读取结构中不灵活的部分;其中的数据项之一告诉您要分配多少空间以及要读取多少数据。

关于c - C语言用二进制文件保存和读取结构体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23719108/

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