#include <stdio.h>
#include <stdlib.h>
struct SomeStruct{
int id;
int* dynamicArray;
};
int main(){
struct SomeStruct test;
test.id = 5;
// allocate array
test.dynamicArray = malloc(sizeof(int)*100);
// save struct to a file
FILE* handle = fopen("data", "wb");
fwrite(&test, sizeof(test), 1, handle);
fclose(handle);
return 0;
}
运行此代码后,data
文件的大小为16个字节。显然,整数指针已写入文件而不是整个dynamicArray
元素。如何在文件中正确编写此类结构?
答案 0 :(得分:3)
fwrite(&test.id, sizeof(test.id), 1, handle);
fwrite(test.dynamicArray , sizeof(test.dynamicArray[0]), 100, handle);
我想指出使用硬编码的数字100
是有问题的。
最好将大小存储在struct
本身。
struct SomeStruct{
int id;
size_t size;
int* dynamicArray;
};
和
test.id = 5;
test.size = 100;
// allocate array
test.dynamicArray = malloc(sizeof(int)*test.size);
然后您可以将写入逻辑更新为:
fwrite(&test.id, sizeof(test.id), 1, handle);
fwrite(&test.size, sizeof(test.size), 1, handle);
fwrite(test.dynamicArray , sizeof(test.dynamicArray[0]), test.size, handle);
当您重读数据时,您将获得可用的大小信息,您可以为dynamicArray
成员分配正确的内存。