gpt4 book ai didi

c++ - 从指针指向内存的二进制文件中读取结构

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:37 25 4
gpt4 key购买 nike

struct st {
char *p;
int len;
};

这是我需要写入二进制文件的结构,以及保存在

中的字符串

字符 *p

我应该用 char 数组数据写一个二进制文件。写入二进制文件后。也应该能够从二进制文件中以相同的结构读取它。

我尝试使用 FSEEK_END 获取二进制大小,并根据文件大小执行 fread,但它没有保存字符串。请建议。任何帮助/建议/指针将不胜感激。

提前致谢。

示例代码:

 struct st {
char *p;
int len;
};

struct st varr;
varr.len = 100;
varr.p = new char[gen];
strcpy(varr.p, "Hello World");

FILE *p;
p=fopen("address","wb");
fwrite(&varr,sizeof(struct st),1,p);
fclose(p);

这会把指向二进制文件的指针写给我。但我想在这里写整个字符串,但关键是,它应该用一个 fwrite 完成。

最佳答案

将其写入二进制文件是没有用的。一个文本文件就足够了。

但是,如果这是你的家庭作业(或如此),我建议你按以下方式进行:

  • 将长度写成整数;

  • 写入 len 个字节的字符串。这不包括终止空值。

回读时:

  • 读取整数长度;

  • 分配这个长度的内存加一个字节

  • 将字符串读入该内存并添加终止空值

用这个长度和指向已分配内存的指针填充你的结构。


在您的评论中,您不断迭代您想要一步读和写。 对于您当前的数据结构,这是不可能的,因为字符串将始终位于内存中的其他位置,而 fwrite 只能写入一个连续的内存块。

但是,您是否会将数据结构更改为:

struct st{
char p[128];
int len;
};

然后您可以一次写入和读取,因为现在该结构是一个连续的内存块。但现在该字符串被限制为这 128 个字节(或您设置的任何大小)。

关于c++ - 从指针指向内存的二进制文件中读取结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56149988/

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