0

私は現在、次の 2 つの構造体を使用するプログラムに取り組んでいます。

//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;

Friendstruct内の各文字列メンバーは、 内のlistEntries配列と同様に動的に割り当てられFriendListます。FriendListをバイナリ レコードとして保存しようとしていますが、 を使用してこれを実行fwrite()し、 で読み戻そうとすると、ファイルから読み取られたfread()listEntries配列FriendListが空になります。このような動的構造体を保存する方法はありますか?

編集:構造体の読み取り/書き込みに使用する関数は次のとおりです。

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);
}
4

1 に答える 1

2

ポインター自体ではなく、ポインターが指すデータを保存する必要があります。ポインターは、プロセスの外ではその瞬間に存在するため意味がないため、ポインター値をディスクに保存しても意味がありません。

一般に、シングルを使用して構造体をダンプすることによってこれを行うことはできません。これfwrite()は、ポインターに従わないためです。

使用する実際の外部ファイル形式を発明し、それを保存およびロードするコードを記述する必要があります。ほとんどのデータはテキストであるため、テキストベースの形式をお勧めします。おそらくCSV

于 2012-11-14T16:38:23.477 に答える