fread/fwrite 在 C 中

fread/fwrite in C

假设我有这些参数:

bool array_serialize(const void *src_data,
                const char *dst_file,
                const size_t elem_size,
                const size_t elem_count);

假设 src_data 是我要写入 dst_file 的数组。

我不太明白如何使用 fwrite。我知道 fwrite 需要四个参数:

但我 运行 遇到的问题是 *dst_fileconst char 类型。如何将其转换为能够使用 fwrite 的适当类型? 我试过

fwrite(src_data, elem_size, elem_count, dst_file);

但显然这是不正确的。

fread 也有类似问题。

首先阅读参考 两次fwrite() and fread()

最后一个参数应该是一个文件指针,所以这样做:

fp = fopen(dst_file, "w+");
if(fp != NULL) {
    fwrite(src_data, elem_size, elem_count, fp);
    rewind(fp);
    fread(result_data, elem_size, elem_count, fp);
}

看看more examples

const char 实际上是一种字节类型,您可以将其转换为您想要的任何类型。 如果您有一个以已知模式存储的二进制文件(最好),您可以按成员大小将类型读入目标结构。

例如,如果您有一个包含两个变量的结构

struct foo {
  int f1;
  int f2;
};

而且你知道整个文件都是由这些组成的,那么你可以像这样从文件中读取值

fread(&target, sizeof(foo), num_elems, fp)

您可以根据您正在阅读或写入的文件冲洗并重复此操作。

此外,您可以将文件结构化为 headers,它会告诉您存储的数据类型以及其中的数量,这允许您在单个文件中拥有可变结构。