c - 将包含字符串的结构写入二进制文件

标签 c linux binaryfiles

我有一个二进制文件,我在其中记录了写入其他文件的偏移量以及在该偏移量处写入的数据。现在我定义每条日志记录的结​​构为

struct log_record{
                    int offset;
                    char *data;
               }
struct log_record t;

当我将记录写入文件时,我有写入文件的数据长度,因此在分配之前我将空间分配为

t.data = (char*)malloc(sizeof(char)*strlen(buff));/*buf holds the data to be written*/

现在我有了写入文件的记录长度...但问题是在读取时。如何针对我将记录读入的结构分配空间,以及在 fread 中,记录的大小应该是多少。我有些困惑。 将不胜感激

最佳答案

你需要写出字符串的长度,因为字符串的长度是可变的。

请注意,strlen() 不会返回包含终止 NULL 的大小。

EDIT + EDIT 2(感谢 mu 太短)+ EDIT 3(感谢 mu 太短)

我会这样做:

t.data = (char*) malloc(sizeof(char) * strlen(buff) + 1);
strcpy(t.data, buff);

// ...
int data_size = strlen(t.data) + 1;
fwrite(&t.offset,  1, sizeof(t.offset),   file);
fwrite(&data_size, 1, sizeof(data_size),  file);
fwrite(t.data,     1, strlen(t.data) + 1, file);

关于c - 将包含字符串的结构写入二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6530938/

相关文章:

php - 我如何知道我的 php 进程是否具有写入文件的正确权限?

linux - 命令重定向

C++ 将 bitset 写入二进制文件

c++ - 为什么for循环的条件可以留空?

在 vb.net 中调用 winAPI 函数

c - 从哪里开始学习 Linux 内核模块?

python - 在 tensorflow 中与许多输入数据文件很好地混合

linux - 如何在 Unix 系统上编辑二进制文件

c - 多线程读取文件

c - 如何在 C 中批处理 FFT