2010-10-03 50 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 。