fopen 中的 r 和 rb 有什么区别
- 2024-10-10 09:28:00
- admin 原创
- 77
问题描述:
我尝试在 C 中使用 fopen,第二个参数是打开模式。“r”和“rb”这两个模式让我很困惑。它们似乎是一样的。但有时最好使用“rb”。那么,为什么存在“r”?请详细解释一下或举例说明。谢谢。
解决方案 1:
您应该使用"r"
打开文本文件。不同的操作系统存储文本的方式略有不同,这将执行正确的转换,这样您就不需要了解本地操作系统的特性。例如,您会知道换行符将始终显示为简单的`"
"`,无论代码在何处运行。
如果您打开非文本文件,则应使用"rb"
,因为在这种情况下,翻译不合适。
解决方案 2:
在 Linux 和 Unix 上,"r"
和"rb"
是相同的。更具体地说,在文本模式和二进制模式下FILE
通过fopen()
ing 文件获得的指针在 Unix 上的行为相同。在 Windows 上,以及通常在使用多个字符表示“换行符”的系统上,以文本模式打开的文件的行为就像所有这些字符都只是一个字符一样`'
'`。
如果您想在任何系统上可移植地读取/写入文本文件,请使用中的"r"
和。这将保证文件被正确写入和读取。如果您要打开二进制文件,请使用和,这样不幸的换行符转换就不会弄乱您的数据。"w"
`fopen()"rb"
"wb"`
请注意,底层系统为您执行换行符转换的结果是,您无法确定使用fseek(file, 0, SEEK_END)从文件中读取的字节数。
最后,请参阅comp.lang.c 常见问题解答中的文本和二进制 I/O 之间有什么区别?。
解决方案 3:
使用“rb”打开二进制文件。这样读取文件的字节时就不会被编码
解决方案 4:
对于翻译模式, “r”与“rt”相同
“rb”是非翻译模式。
至少在 Windows 上,这会产生影响。请参阅该链接了解详细信息。
解决方案 5:
在大多数 POSIX 系统上,它会被忽略。但请检查您的系统以确保无误。
西努克大学
模式字符串还可以包含字母“b”,作为最后一个字符或作为上述任何双字符字符串中字符之间的字符。这完全是为了与 ISO/IEC 9899:1990(“ISO C90”)兼容,并且不起作用;“b”被忽略。
Linux
模式字符串还可以包含字母“b”,作为最后一个字符或上述任何双字符字符串中的字符之间的字符。这完全是为了与 C89 兼容,并且没有任何效果;“b”在所有符合 POSIX 的系统(包括 Linux)上都被忽略。(其他系统可能会以不同的方式处理文本文件和二进制文件,如果您对二进制文件进行 I/O 并且希望您的程序可以移植到非 UNIX 环境,则添加“b”可能是一个好主意。)
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件