我有一个这种结构的阵列
bit_table_[ROWS][COLUMNS];
我试着把它写成文件
FILE * f;
f = fopen("D:\\test_bf\\bf_file", "a+b");
if (f != NULL)
{
fwrite(bit_table_, sizeof(bit_table_), 1, f);
fclose(f);
}
else
{
std::cout<<"File could not be opend.";
printf("\tError %d\t\t%s", errno,strerror(errno));
}
写入成功但文件大小为0kb且内容为空。我希望文件大小以MB为单位。
我在另一个程序中使用了相同的代码并按预期工作。
它出了什么问题?
编辑:
以下是我在函数
中实际使用上述代码的方法void write_to_file(unsigned char bit_table_[][COLUMNS])
{
FILE * f;
f = fopen("D:\\test_bf\\chunk_bf_file.txt", "a+b");
if (f != NULL)
{
fwrite(bit_table_, sizeof(bit_table_), 1, f);
fclose(f);
}
else
{
std::cout<<"File could not be opend.";
printf("\tError %d\t\t%s", errno,strerror(errno));
}
}
以下是它的调用方式:
write_to_file(bit_table_);
这是它的声明:
static unsigned char bit_table_[ROWS][COLUMNS];
答案 0 :(得分:1)
你是如何宣布bit_table_
的?如果您使用malloc()
,那么sizeof(bit_table)
将只返回指针的大小,而不是数组的大小。
修改:您的write_to_file
函数应显示为write_to_file(unsigned char* bit_table_, int rows, int columns)
。您的fwrite
电话应该看起来像fwrite(bit_table_, sizeof(unsigned char), rows*columns, f)
。
答案 1 :(得分:1)
更改
fwrite(bit_table_, sizeof(bit_table_), 1, f);
到
fwrite(bit_table_, sizeof(bit_table_[0][0]), ROWS*COLUMNS, f);
你应该没问题