fopen 中的 r 和 rb 有什么区别

2024-10-10 09:28:00
admin
原创
179
摘要:问题描述:我尝试在 C 中使用 fopen,第二个参数是打开模式。“r”和“rb”这两个模式让我很困惑。它们似乎是一样的。但有时最好使用“rb”。那么,为什么存在“r”?请详细解释一下或举例说明。谢谢。解决方案 1:您应该使用"r"打开文本文件。不同的操作系统存储文本的方式...

问题描述:

我尝试在 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”,作为最后一个字符或上述任何双字符字符串中的字符之间的字符。这完全是为了与 C8​​9 兼容,并且没有任何效果;“b”在所有符合 POSIX 的系统(包括 Linux)上都被忽略。(其他系统可能会以不同的方式处理文本文件和二进制文件,如果您对二进制文件进行 I/O 并且希望您的程序可以移植到非 UNIX 环境,则添加“b”可能是一个好主意。)

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1129  
  IPD(Integrated Product Development,集成产品开发)流程是一种广泛应用于高科技和制造业的产品开发方法论。它通过跨职能团队的紧密协作,将产品开发周期缩短,同时提高产品质量和市场成功率。在IPD流程中,CDCP(Concept Decision Checkpoint,概念决策检查点)是一个关...
IPD培训课程   87  
  研发IPD(集成产品开发)流程作为一种系统化的产品开发方法,已经在许多行业中得到广泛应用。它不仅能够提升产品开发的效率和质量,还能够通过优化流程和资源分配,显著提高客户满意度。客户满意度是企业长期成功的关键因素之一,而IPD流程通过其独特的结构和机制,能够确保产品从概念到市场交付的每个环节都围绕客户需求展开。本文将深入...
IPD流程   79  
  IPD(Integrated Product Development,集成产品开发)流程是一种以跨职能团队协作为核心的产品开发方法,旨在通过优化资源分配、提高沟通效率以及减少返工,从而缩短项目周期并提升产品质量。随着企业对产品上市速度的要求越来越高,IPD流程的应用价值愈发凸显。通过整合产品开发过程中的各个环节,IPD...
IPD项目管理咨询   89  
  跨部门沟通是企业运营中不可或缺的一环,尤其在复杂的产品开发过程中,不同部门之间的协作效率直接影响项目的成败。集成产品开发(IPD)作为一种系统化的项目管理方法,旨在通过优化流程和增强团队协作来提升产品开发的效率和质量。然而,跨部门沟通的复杂性往往成为IPD实施中的一大挑战。部门之间的目标差异、信息不对称以及沟通渠道不畅...
IPD是什么意思   82  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用