gpt4 book ai didi

c - 使用指针写入和读取 (fwrite - fread) 结构

转载 作者:行者123 更新时间:2023-12-04 06:03:54 25 4
gpt4 key购买 nike

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

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;
}

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 *) 字段也写入零终止字节,以便您在读回时始终知道它在哪里结束。

    关于c - 使用指针写入和读取 (fwrite - fread) 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8601816/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com