使用指针编写和读取(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; }
你可以帮帮我吗?我试图到处寻找,但我从未找到过要求保存两个结构的人,一个在另一个内部. 解决方法
当然,这将不会像字符串那样复制指针的大小(通常是4个字节).我在这里看到3个选项:
>序列化数据,二进制文件(http://en.wikipedia.org/wiki/Serialization). 在任何情况下,您都需要遍历结构的每个字段才能将其写入数据文件.至于阅读,在前两种情况下,您必须完全按照编写数据的顺序进行阅读,在第三种情况下,您可以按任何顺序独立阅读字段. 如果您选择第一个方法,对于每个字符串(char *)字段,还要写入零终止字节,以便在读取它时始终知道它的结束位置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- postgresql9.5 安装使用
- 对’INVALID_HANDLE_VALUE’检查’HWND’是一个错误吗?
- actionscript-3 – 是否可以使用as3播放.m4a文件?
- c# – 如何以编程方式确定从主页功能区创建的Outlook新项 –
- c# – 微软对ReaderWriterLockSlim.IsReadLockHeld / IsWri
- 打包依赖.aar文件以及坑总结
- 关于Oracle数据库中的employee实例表
- swift 快速奔跑的兔几 本节的内容是:OS X和iOS的应用程序
- AJAX 拖动图片效果(删除 和复位)
- c# – ASP.NET MVC 4捆绑 – DEBUG模式下的单个文件URL