2016-06-18 69 views
0

我試過這段代碼:如何在C中使用putw()函數將整數寫入文本文件?

int main(void) 
{ 
    FILE *fp; // Assuming fp is initialized 
    putw(11,fp); /* Instead of writing 11 to the file this statement 
        wrote an unwanted character into the file */ 

    /* However when I put 11 in single quotes as, 
    putw('11', fp); 
    It worked properly and wrote integer 11 into the file */ 
} 

,這是什麼行爲,如何解釋呢?

+2

你並沒有真正嘗試這個。該程序因未初始化的「fp」而崩潰。 – Jens

+0

如果你的'int'是16位,你的'putw('11',fp);'只能有「工作正常」。我的32位'int'創建了一個包含'31 31 00 00'' –

回答

2

putw('11',fp);是不是一個有效的字符常量,它只能通過重合。此外,如果您編譯與適當的標誌GCC源,它會向您發出警告:

warning: multi-character character constant [-Wmultichar] 

如果你想寫的文字格式的整數,使用fprintf

fprintf(fp, "%d", 11); 

如果你想寫在二進制格式的整數,在以正確的方式使用fwriteputw

int n = 11; 
fwrite(&n, sizeof n, 1, fp); 

putw(n, fp); 
+0

''11''的文件大小4,但是「一致性」不起作用,儘管我只是通過這些頁面意識到了這一點。 'int i ='1234';'初始化一個值'0x31323334',但我不能引用一個源,抱歉。您收到警告,而不是錯誤。 –

+0

@WeatherVane它不符合C,'int i ='1234';'的結果是實現定義的,所以它不可移植,不同的編譯器可能會給你不同的結果。這就是警告的原因。 – fluter

+0

謝謝,它[這裏覆蓋](http://stackoverflow.com/questions/6944730/multiple-characters-in-a-character-constant),但實現定義,而不是undefined。 –

3

putw()FILE中寫入一個「word」,它是一個二進制文件int。它不是格式 int,它只是寫它。與fwrite()sizeof(int)相同。

你可能會考慮fprintf中()代替:

fprintf(fp, "%d", 11); 

與您的舊代碼,該文件將包含具體取決於系統的端模式00 00 00 0B0B 00 00 00像四個字節。或者如果你有一個64位的int平臺,也許有八個字節。使用新代碼,它總是會寫入兩個字節:31 31(這是'1'的兩個十六進制ASCII碼)。

相關問題