使用指针编写和读取(fwrite – fread)结构

我正在研究一个邮箱项目,我有这两个结构:

struct mmbox_mail

struct mmbox_mail {
  char *sender,*recipient; 
  char *obj,*date;
  char flags; 
  size_t size; 
};

mail_t

typedef struct{
  struct mmbox_mail info;
  void *body;
  void *next;
} mail_t;

我无法修改结构的字段,因为我需要可变数据(为此我使用char *而不是char []).

每个mail_t结构都是一封邮件.我需要将用户的每个邮件保存在一个文件中,可以是二进制文件或文本文件(但我认为使用二进制文件更好,因为我有一个很难用纯文本保存的void *体.

我试图这样做,但似乎它不起作用:

while(mailtmp != NULL){
  fwrite(mailtmp,sizeof(mail_t),1,fp);

  /* next mail */
  mailtmp=mailtmp->next;
}

06003

你可以帮帮我吗?我试图到处寻找,但我从未找到过要求保存两个结构的人,一个在另一个内部.

解决方法

当然,这将不会像字符串那样复制指针的大小(通常是4个字节).我在这里看到3个选项:

>序列化数据,二进制文件(http://en.wikipedia.org/wiki/Serialization).
>创建一种格式以在文本文件中存储数据.
>使用XML / JSON等标记语言

在任何情况下,您都需要遍历结构的每个字段才能将其写入数据文件.至于阅读,在前两种情况下,您必须完全按照编写数据的顺序进行阅读,在第三种情况下,您可以按任何顺序独立阅读字段.

如果您选择第一个方法,对于每个字符串(char *)字段,还要写入零终止字节,以便在读取它时始终知道它的结束位置.

相关文章

一.C语言中的static关键字 在C语言中,static可以用来修饰局...
浅谈C/C++中的指针和数组(二) 前面已经讨论了指针...
浅谈C/C++中的指针和数组(一)指针是C/C++...
从两个例子分析C语言的声明 在读《C专家编程》一书的第三章时...
C语言文件操作解析(一)在讨论C语言文件操作之前,先了解一下...
C语言文件操作解析(三) 在前面已经讨论了文件打开操作,下面...