加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:09:57 所属栏目:百科 来源:网络整理
导读:我正在研究一个邮箱项目,我有这两个结构: 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; 我无法修
我正在研究一个邮箱项目,我有这两个结构:

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 *)字段,还要写入零终止字节,以便在读取它时始终知道它的结束位置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读