2017-02-14 18 views
0

這裏是我的代碼沒有表現:fprintf中(FP, 「%C」,10)如預期

#include <stdio.h> 
#include <stdlib.h> 

main(){ 
    FILE* fp = fopen("img.ppm","w"); 
    fprintf(fp,"%c", 10); 
    fclose(fp); 
    return 0; 
} 

出於某種原因,我無法揭開,這寫2個字節的文件:「0X0D的0x0A 「而我期望的行爲是因爲它只寫了十進制數爲10的」0x0A「。它似乎可以正常工作,包括0到255之間的每個其他值,它只是向文件寫入一個字節。我完全失去了,有什麼幫助?

+6

嘗試'FILE * fp = fopen(「img.ppm」,「wb」);' – BLUEPIXY

+1

如果您想要將單個'\ xA'字節寫入二進制文件,則使用''wb''是解決方案。如果你想創建一個文本文件,那麼這個雙字符序列正是你想要的。 –

回答

3

假設您使用的是Windows C運行時庫,換行符將被編寫爲\r\n13 10。這是0x0D 0x0A。這是唯一的字符實際上是寫成兩個字符(通過使用Windows工具鏈編譯的軟件)。

您需要用fopen("img.ppm","wb")打開文件來編寫二進制文件。

+0

這不是一個Windows問題,它是一個編譯器問題。例如:_windows_上的Cygwin gcc用OP的代碼寫入1個字節。 – chux

+0

哇,我現在感覺非常愚蠢。這解決了這個問題並且非常有意義,謝謝! – Kwantuum

+1

好點@chux,我會相應地更新我的答案。 – Amy