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