2010-10-03 35 views
1

爲什麼此代碼無法按預期工作?如何寫C文件到二進制文件?

#include <cstdio> 
    int main() 
{ 
char mona[] =  
        "\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\x00\x01\x90" 
        "\x00\x00\x02\x5d\x01\x03\x00\x00\x00\x26\xef\xb3\x78\x00\x00\x00\x45\x74\x45\x58" 
    // <snip> 
        "\x00\x49\x45\x4e\x44\xae\x42\x60\x82"; 
FILE *fp = fopen("mona.png","wb"); 
fputs(mona,fp); 
fclose(fp); 
return 0; 
} 

回答

13

fputs應該寫一個以空字符結尾的字符串。一旦檢測到'\0',它將停止。 You should use fwrite寫入二進制數據。

fwrite(mona, 1, sizeof(mona), fp); 
2

使用fwrite而不是fputs

fputs用於將字符(非二進制)數據寫入文件。

1

必須如果你不使用「B」,你的所有文件的操作將在文本作案(標準)工作也使用FWRITE 上的fopen二進制標誌,像

fopen("blah.bin","wb"); 

與FWRITE 。