Vis*_*ngh 1 c c++ pointers structure fread
struct st {
char *p;
int len;
};
Run Code Online (Sandbox Code Playgroud)
这是我需要写入二进制文件的结构,以及保存在中的字符串
char *p
我应该用字符数组数据编写一个二进制文件。写入二进制文件后。还应该能够从二进制文件中以相同的结构读取它。
我尝试使用 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);
Run Code Online (Sandbox Code Playgroud)
这将向我写入指向二进制文件的指针。但我想在这里写整个字符串,但重点是,它应该用一个 fwrite 完成。
将其写入二进制文件是没有用的。一个文本文件就足够了。
但是,如果这是您的家庭作业(或类似作业),我建议您按以下步骤操作:
将长度写为整数;
写入len字符串的字节。这不包括终止空值。
回读时:
读取整数长度;
分配该长度加一个字节的内存
将字符串读入该内存并添加终止 null。
使用此长度和指向已分配内存的指针填充您的结构。
在您的评论中,您不断重复您想要一步读和写。对于当前的数据结构,这是不可能的,因为字符串始终位于内存中的其他位置,并且fwrite只能写入连续的内存块。
但是,您会将数据结构更改为:
struct st{
char p[128];
int len;
};
Run Code Online (Sandbox Code Playgroud)
然后您可以一次性写入和读取,因为现在该结构是一个连续的内存块。但现在字符串限制为 128 字节(或您指定的任何大小)。
| 归档时间: |
|
| 查看次数: |
1806 次 |
| 最近记录: |