我的阅读功能存在一些问题。
我的阅读功能是:
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/