使用fread/fwrite在C中读取和写入文件的结构

Lov*_*ink 1 c struct structure fwrite fread

我有以下结构:

typedef struct {
  char last[NAMESIZE];
  char first[NAMESIZE];
} name;

typedef struct {
  int id;
  name name;
  float score;
} record;

typedef struct {
  record *data;
  size_t nalloc;
  size_t nused;
} record_list;
Run Code Online (Sandbox Code Playgroud)

我试图使用此函数从文件中读取记录:

int file_read(record_list *list, record* rec)
{
  /* irrelevant code eliminated */

  while(fread(&records, sizeof(record), 1, fp))
  {
    *rec = records;
    valid_list_insert = list_insert(list, rec);
    if(!valid_list_insert)
    {
      return 0;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用此函数将record_list写入文件:

int file_write(record_list* list)
{
  /* irrelevant code eliminated */

  if(fwrite(&list, sizeof(record_list), 1, fp) == 0)
  {
    return 0;
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,它们都不能正常工作.当我尝试在程序中显示record_list时,fread会读取数据,似乎是随机的.而fwrite只是将随机字符写入文件.任何有关为什么不起作用的帮助将不胜感激.

dmc*_*kee 6

好了,一两件事,将无法正常工作是写指针(作为data成员record_list):因为(1)它会写指针的值(即在内存中的一些点的数值)和(b)你赢了"当你再次阅读它时,将你的东西分配到同一个地方.相反,您必须仔细解析结构并以可以再次获取数据的方式记录数据.

此过程称为"序列化"(反过来是"反序列化").另请参见C中的序列化数据结构.