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

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

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()不返回包含终止空值的大小。
编辑+编辑2(由于mu太短)+编辑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);

    公众号
    关注公众号订阅更多技术干货!