2011-07-01 105 views
11

我一直在試圖寫一個整數到一個文件(打開模式是w)。 fprintf中正確地寫,但FWRITE寫廢話如何寫一個整數到一個文件(fprintf和fwrite之間的差別)

int length; 
char * word = "word"; 

counter = strlen(word); 
fwrite(&length, sizeof(int), 1, file); 
fwrite(word, sizeof(char), length, file); 

,結果在文件中是:

,但如果我用fprintf中,而不是像這樣:

int length; 
char * word = "word"; 

counter = strlen(firstWord); 
fprintf(file, "%d", counter); 
fwrite(word, sizeof(char), length, file); 

我在文件中得到這個結果:

4word

誰能告訴我做錯了什麼? 謝謝!

更新:我最終想改變寫作二進制文件(我將在wb模式下打開文件),我的實施會有所不同嗎?

+2

長度未初始化。 –

+0

@omrib:他可能喜歡把文件寫入文件;) –

回答

19

fprintf寫入一個字符串。 fwrite寫入字節。因此,在第一種情況下,您正在將代表整數的字節寫入文件;如果它的值是「4」,則這四個字節將處於不可打印的ASCII範圍內,所以你不會在文本編輯器中看到它們。但是如果你看一下文件的大小,它可能是8,而不是4字節。

+1

所以如果我想在二進制模式下寫一個整數我應該使用fwrite,但是如果我按文本寫入文件,我應該使用fprintf? –

+3

@hershalle:是的。 – vanza

+0

謝謝!你非常有幫助 –

1

使用printf()將整數轉換爲一系列字符,在本例中爲"4"。使用fwrite()會導致包含整數值的實際字節被寫入,在這種情況下,字符爲'w', 'o', 'r','d'的4個字節。

相關問題