为什么以下没有将数组内容写入文件

时间:2012-03-14 09:55:05

标签: c file-io

我有一个这种结构的阵列

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];

2 个答案:

答案 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);

你应该没问题