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

使用结构数组成员(C)二进制保存结构?,c,dynamic,file-io,struct,C,Dynamic,File Io,Struct,我目前正在开发一个使用以下两种结构的程序: //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 *listEntr

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

//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
数组一样。我试图将
好友列表
保存为二进制记录,但当我尝试使用
fwrite()
执行此操作,然后使用
fread()
将其读回时,从文件读取的
好友列表
列表项
数组为空。有没有办法保存这样的动态结构

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

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()
转储结构来完成此操作,因为这不会遵循指针


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

请提供执行fread/fwrite.Oops的代码,不知道为什么我一开始没有这么做。编辑。哦,好吧,这是有道理的。我回去,改变了程序,使用CSV格式的文件,它的工作非常完美。谢谢