2011-11-03 26 views
-1

这里我感到困惑fopen("filename.txt","rb")fopen("filename.txt","r")混淆fopen()函数的功能选项阅读bianry和阅读的文本

所以,当我想的想法有关本详细

+0

@downvoter你为什么放弃投票。我是新的堆栈溢出,我是C编程语言堆栈溢出的初学者帮助我们。所以你为什么放弃投票。让它关闭这个问题,如果它是重复的 –

+0

我不是downvoter,但它是一个问题,它不适合[so faq](http://stackoverflow.com/faq)。这是非常开放的,没有真正的答案。我很惊讶它没有收到太近的选票。 – tinman

回答

2

如果你读的人,其使用为fopen()页面,你会发现:

模式字符串也可以包括字母“b”无论是作为最后一个字符,或在上述任何两个字符串的字符之间的字符。这完全是为了与C89兼容而没有任何影响;在所有符合POSIX标准的系统(包括Linux)上忽略'b'。 (其他系统可能会以不同的方式处理文本文件和二进制文件,如果您对二进制文件执行I/O操作并希望将程序移植到非Unix环境中,则添加'b'可能是个好主意。)

0

这基本上是你正在运行的环境的一个问题。在非二进制模式下甚至在二进制模式下(尽管以更有限的方式),环境被允许在某些情况下修改数据。

C标准是这样说的关于两种,从C99 7.19.2 Streams(我的粗体显示):

2/A文本流是由为行字符的有序序列,每个线 包括零个或多个字符加一个终止的换行符。 最后一行是否需要终止换行字符是实现定义的。

可能需要在输入和输出上添加,更改或删除字符,以符合在主机环境中表示文本的不同约定。因此,流中的字符与外部表示中的字符之间不需要一一对应。

数据从文本流中读取在将必然比较等于较早前写出到该流仅当该数据 :数据仅包括打印 字符和控制字符水平制表和新行的;没有换行字符 紧接在空格字符前面;最后一个字符是换行符。 在读入时出现在换行符 之前的空格字符是否是实现定义的。

3 /二进制流是一个有序的字符序列,可以透明地记录内部数据。 在相同的实现下,从二进制流中读入的数据应该与以前写入该流的数据相比较,等于 。但是,这样的流可能具有实现定义数量的空字符,并附加到流的末尾 。

所以,基本上,如果你想最大限度地提高你的数据不被修改的机会,使用二进制模式。如果你遵循文本模式的规则,你可以毫不畏惧地使用它。