我有以下结构:
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;
我正在尝试使用此功能从文件中读取记录:
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;
}
}
}
我正在尝试使用此函数将record_list写入文件:
int file_write(record_list* list)
{
/* irrelevant code eliminated */
if(fwrite(&list, sizeof(record_list), 1, fp) == 0)
{
return 0;
}
}
但是,它们都不能正常工作。当我尝试在程序中显示record_list时,fread会读取数据,似乎是随机的。而fwrite只是将随机字符写入文件。任何有关为什么不起作用的帮助将不胜感激。
答案 0 :(得分:6)
嗯, 不 工作的一件事就是编写指针(如data
的{{1}}成员):因为(1 )它将写入指针的值(即内存中某个点的数值)和(b)当你再次读回时,你不会在同一个地方分配你的东西。相反,您必须仔细解析结构并以可以重新获取数据的方式记录数据。
此过程称为“序列化”(反过来是“反序列化”)。另请参阅Serialize Data Structures in C。