为什么我必须以二进制模式打开文件才能在c中写入?

时间:2010-04-24 09:13:38

标签: c fopen

fprintf(file, "%d %d %d", array[0], array[1], array[2]);

要使此语句起作用,我必须以'wb'模式而不是'w'模式打开文件。二进制模式如何使语法有效?

2 个答案:

答案 0 :(得分:2)

我假设您在打开文件时使用此功能:

FILE *fopen(const char *path, const char *mode);

当您在Linux下进行编程时b被忽略,因为它没有任何效果。来自 man page

  

模式字符串还可以包含   字母'b'或作为最后一个字符 -          作为任何一个人物之间的角色或角色   两煤焦          上面描述的acter字符串。这完全是为了兼容性   同          C89并没有效果;所有符合POSIX标准的'b'都会被忽略   SYS-          tems,包括Linux。 (其他系统可能会处理文本文件和   二进制          文件不同,如果你这样做,添加'b'可能是一个好主意   I / O          到二进制文件,并期望您的程序可以移植到   非Unix          环境。)

至于Windows(来源 here ):

  

b:以二进制打开(未翻译)   模式;翻译涉及   回车和换行   字符被抑制。

所以结论:
如果您希望以C代码方式访问二进制数据,出于兼容性原因,请使用“b”。

答案 1 :(得分:1)

首先使用fopen获取文件指针 FILE * fp = fopen(“file.bin”,“r +”); 然后使用fread来读取和写入...写入。见this 另外请仔细阅读本手册并注意fread和fwrite返回一个整数,检查以查看确切读取/写入的数量。