fopen中r和rb之间的区别是什么?

Sha*_*ang 58 c linux windows file

我尝试在C中使用fopen,第二个参数是打开模式.两种模式"r"和"rb"往往让我很困惑.看来它们是一样的.但有时候使用"rb"会更好.那么,为什么"r"存在?请向我详细解释或通过示例解释.谢谢.

caf*_*caf 70

您应该"r"用于打开文本文件.不同的操作系统存储文本的方式略有不同,这将执行正确的翻译,因此您无需了解本地操作系统的特性.例如,"\n"无论代码在何处运行,您都会知道换行符总是显示为简单换行符.

"rb"如果您打开非文本文件,则应该使用,因为在这种情况下,翻译不合适.

  • 这与平台有关.在Unix上,text-mode没有什么特别之处,因此它仍然不会将`\ r \n`作为`\n`来处理. (3认同)

Alo*_*hal 28

在Linux和Unix在一般情况下,"r""rb"是相同的.更具体地说,FILE通过fopen()文本模式和二进制模式获得的指针在Unix上的行为方式相同.在Windows上,通常,在使用多个字符表示" 换行符 "的系统上,以文本模式打开的文件就像所有这些字符只是一个字符一样'\n'.

如果你想可移植性读/任何系统,使用写文本文件"r",并"w"fopen().这将保证文件的正确写入和读取.如果您要打开二进制文件,请使用"rb""wb",以便不幸的换行符不会弄乱您的数据.

请注意,底层系统为您执行换行转换的结果是您无法使用fseek(file,0,SEEK_END)确定可以从文件中读取的字节数.

最后,看看文本和二进制I/O有什么区别?comp.lang.c常见问题解答.


sag*_*gie 8

使用"rb"打开二进制文件.然后,当您阅读它们时,文件的字节将不会被编码


Ale*_*ski 7

这至少在Windows上有所不同.请参阅该链接了解详情.

  • `"rt"`是非标准的. (2认同)