2012-03-14 54 views
0

我有一點陣列採用這種結構爲什麼下面不寫數組內容到文件

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

你忘記了分機? – Marlon 2012-03-14 09:59:51

+2

這引出了一個問題,「ROWS」和「COLUMNS」的值是什麼? – 2012-03-14 10:02:14

+2

你檢查過來自fwrite的返回值嗎?和錯誤,如果fwrite表示錯誤?這很可能會給你答案。 – harald 2012-03-14 10:03:41

回答

1

變化

fwrite(bit_table_, sizeof(bit_table_), 1, f); 

fwrite(bit_table_, sizeof(bit_table_[0][0]), ROWS*COLUMNS, f); 

和你應該確定

+1

謝謝!這工作,但我需要將其更改爲** fwrite(bit_table_,sizeof(bit_table_ [0] [0]),ROWS * COLUMNS,f); ** – John 2012-03-14 12:22:56

+0

我的錯誤,編輯 – 2012-03-14 12:29:46

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)

+0

OP說它是'bit_table_ [ROWS] [COLUMNS]',所以我認爲它就是這樣。但即使它是一個指針,'fwrite'仍然會輸出4個字節(或任何指針的大小)。 – 2012-03-14 10:15:00

+0

你幾乎肯定是對的。但是,爲了清楚起見,信息應由OP提供。 – simon 2012-03-14 10:19:09

+0

我已編輯我的帖子 – John 2012-03-14 11:29:55

相關問題