我们说我有这些参数:
name | row
------+-----
a | 1
b | 2
c | 3
d | 4
e | 5
(5 rows)
假设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
- 这是指向要写入的元素数组的指针。ptr
- 这是要写入的每个元素的大小(以字节为单位)。size
- 这是元素的数量,每个元素的大小都是字节大小。nmemb
- 这是指向输出流的stream
对象的指针。但我遇到的问题是FILE
属于*dst_file
类型。如何将其转换为适当的类型才能使用const char
?
我试过了
fwrite
但显然这是不正确的。
同样适用于fwrite(src_data, elem_size, elem_count, dst_file);
的问题。
答案 0 :(得分:3)
最后一个参数应该是文件ponter,所以这样做:
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);
}
答案 1 :(得分:0)
const char实际上是一种字节类型,您可以将其强制转换为您想要的任何类型。 如果你有一个存储有已知模式的二进制文件(你最好),你可以通过成员大小将类型读入目标结构。
例如,如果你有一个包含两个变量的结构
struct foo {
int f1;
int f2;
};
而且你知道整个文件都是由这些组成的,那么你可以像这样从文件中获取值
fread(&target, sizeof(foo), num_elems, fp)
您可以根据您正在阅读或书写的文件进行冲洗和重复。
此外,您可以构建文件以包含标题,告诉您存储的数据类型以及存储的数据数量,这样您就可以在单个文件中包含变量结构。