我正在开发一个邮箱项目,我有以下两种结构:
结构mmbox_mail
struct mmbox_mail {
char *sender, *recipient;
char *obj, *date;
char flags;
size_t size;
};
and
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;
}
while(mailtmp != NULL){ /* i have a list of mails and i use a mailtmp pointer to save each mail */
你可以帮帮我吗?我试图到处搜索,但从未发现有人要求保存两个结构,一个在另一个内。
当然,这对于字符串来说是行不通的,因为它会复制指针的大小(通常是 4 个字节)。我在这里看到 3 个选项:
- 序列化数据,二进制文件(http://en.wikipedia.org/wiki/Serialization)。
- 创建一种格式以在文本文件中存储数据。
- 使用 XML/JSON 等标记语言
在任何情况下,您都需要遍历结构的每个字段才能将其写入数据文件。至于读取,在前两种情况下,您必须完全按照写入数据的顺序进行读取,在第三种情况下,您将能够以任何顺序独立读取字段。
如果您选择第一种方法,则为每个字符串 (char *) 字段写入零终止字节,以便您在读回时始终知道它的结束位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)