我有这个结构:
struct data
{
int id;
char *title;
char *description;
int year;
};
现在我必须使用fwrite将列表保存在文件中,然后使用fread读取它。
最好的方法是什么?我不能做像
这样的事情fwrite(info, sizeof(struct data), 1, ptr_file);
因为结构有两个指针。如果我逐字段编写并使用strlen来编写字符串,那么在阅读时如何知道每个字符串的大小?
感谢。
答案 0 :(得分:2)
您不能使用指向文件的指针编写结构,因为它会写入指针而不是它们指向文件的内容。这意味着当您稍后尝试读取结构时,指针将指向“随机”内存。
您可能想了解serialization。
一个简单的方案是分别编写id
和year
成员,然后是第一个字符串的长度(作为固定大小的值),后跟字符串,然后是字符串的长度。第二个字符串和实际字符串。
另一种更简单的方法是使用固定大小的数组而不是字符串的指针。这样做的缺点是,如果不使用为阵列分配的所有空间,那么就会浪费一些内存。更糟糕的缺点是你不能拥有比数组更大的字符串。
答案 1 :(得分:0)
您必须编写自己的序列化函数或不使用指针。这实际上取决于你的任务。我更喜欢在任何地方使用固定长度阵列。
如果您的任务更复杂,请查看tpl等库来序列化您的数据结构。