gpt4 book ai didi

c - 使用结构体数组成员二进制保存结构体 (C)?

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

我目前正在开发一个使用这两个结构的程序:

//Struct to hold contact info about a friend
typedef struct
{
char *firstName, *lastName;
char *home, *cell;
} Friend;

//Struct to hold a list of friends and keep track of its size.
typedef struct
{
Friend *listEntries;
size_t listSize;
} FriendList;

Friend 结构中的每个字符串成员都是动态分配的,FriendList 中的 listEntries 数组也是如此。我正在尝试将 FriendList 保存为二进制记录,但是当我尝试使用 fwrite() 执行此操作,然后使用 fread() 读回它时,从文件中读取的FriendListlistEntries数组为空。有没有办法保存这样的动态结构?

编辑:我用来读/写结构的函数是:

void writeList(FriendList *fl, char* filename)
{
FILE *fp = fopen(filename, "wb+");

if(fp != NULL)
{
fwrite(fl, sizeof(FriendList), 1, fp);
}

fclose(fp);
}

void readList(FriendList *dest, char* filename)
{
FILE *fp = fopen(filename, "rb");

if(fp == NULL)
{
printf("oops...");
}
else
{
fread(dest, sizeof(FriendList), 1, fp);
}

close(fp);
}

最佳答案

您必须保存指针指向的数据,而不是指针本身。指针在进程之外毫无意义,因为它当时就存在,因此将指针值保存到磁盘没有任何意义。

一般来说,您不能通过使用单个 fwrite() 转储结构来实现此目的,因为它不会遵循指针。

您需要发明一种实际的外部文件格式来使用,并编写代码来保存和加载它。我建议使用基于文本的格式,因为大多数数据都是文本。 Perhaps CSV

关于c - 使用结构体数组成员二进制保存结构体 (C)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13382821/

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