gpt4 book ai didi

c - 如何将包含动态分配数组的结构写入二进制文件?

转载 作者:太空宇宙 更新时间:2023-11-04 06:52:25 25 4
gpt4 key购买 nike

#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 元素。如何在文件中正确写入这样的结构?

最佳答案

  1. 写下 id。
  2. 然后写入数组。

fwrite(&test.id, sizeof(test.id), 1, handle);
fwrite(test.dynamicArray , sizeof(test.dynamicArray[0]), 100, handle);

我想指出使用硬编码数字 100 是有问题的。

  1. 您必须确保读取函数也假定了这一点。
  2. 如果您决定更改分配的元素数量,则必须记住返回到这两个地方(写入和读取)来更新它们。

最好将大小存储在 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 成员分配适当数量的内存。

关于c - 如何将包含动态分配数组的结构写入二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49391706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com