2012-09-17 170 views
0

我想用下面的C代碼打印出一個我已經傳入的數組。它應該以十六進制格式輸出每行一個文本,並且我沒有問題打開文件。當我第一次寫它時,我沒有問題,我打開輸出文件,我的數組在那裏。我改變了fileOutName參數,現在我無法打印出任何我曾嘗試將其改回和其他一些東西,似乎沒有任何工作。另外,當我調試它似乎pOutfile是一個糟糕的指針,但就像我說的,它仍然創建文件,它只是不會寫任何東西。任何幫助,將不勝感激。由於fprintf沒有寫入文件

printoutput(int output[], char * fileOutName){ 
    int i = 0; 
    FILE * pOutfile; 
    pOutfile = fopen(fileOutName, "w"); 
    while(output[i] != 0){ 
     fprintf(pOutfile, "0x%0.4X\n", output[i]); 
     i++; 
    } 
} 
+3

總是刷新:-)'fflush(pOutfile);' – oldrinb

+0

同時檢查'fopen'的返回值。這是幾乎必須處理錯誤的API案例之一。它們非常普遍(例如,沒有寫權限,缺少媒體,文件已經存在但鎖定,不允許應用程序使用的魔法文件名(例如,Windows中的/ proc或PRN))。 –

回答

8

總是自己清理。你錯過了fclose(pOutfile)

+0

哇!謝謝!由於某種原因,我從來沒有想過但現在它的工作! – farnett

1

應該輸出十六進制格式每行一個文本...

此行

fprintf(pOutfile, "0x%0.4X\n", 5); 

總是格式相同數目 - 5。它可能應該是

fprintf(pOutfile, "0x%0.4X\n", output[i]); 
+0

對不起,這是我的錯誤我正在使用5進行測試,忘了把它改回來:( – farnett

0

您指望超出數組邊界的元素爲0,除非明確設置,否則可能不是這種情況。如果你是,沒關係。通常,傳遞數組以及它們的大小;這是更安全,更容易閱讀,更便攜。

printoutput(int output[], int size, char * fileOutName){ 
    int i=0; 
    FILE * pOutfile; 
    pOutfile = fopen(fileOutName, "w"); 
    while(i!=size){ 
     fprintf(pOutfile, "0x%0.4X\n", output[i]); 
     ++i; 
     } 
    fclose(pOutfile) 
} 

此外,我強烈建議習慣使用前增量運算符而不是後增量。在這樣的情況下,它可能不會有所作爲,但對於大型輸入或複雜類型,它可以減少執行時間。因此,++我而不是i ++。