在Windows中,当您以文本模式从文件(或标准输入)中读取字符\r\n时,\r会被删除,而您只会读取\n。
有没有一个标准可以让它这样呢?
我能确定这对Windows上的任何编译器都是正确的吗?在这些平台上,其他特定于平台的字符组合也会被\n所取代吗?
我使用this code生成输入,并使用this code读取它。结果是here。您可能会注意到一些遗漏的\r
发布于 2013-06-29 03:01:05
是的,这来自与C的兼容性。在C文本流中,行以换行符结束。这是程序看到的文本流的内部表示。I/O库在内部表示和一些外部表示之间进行转换。
内部表示是独立于平台的,而文本有不同的特定于平台的约定。这就是在流库中具有文本模式的意义所在;可以编写可移植的文本处理程序,这些程序不必包含一堆#ifdef指令就可以在不同的平台上工作,或者构建自己的独立于平台的文本抽象。
由于C语言及其库起源于Unix,C文本流的内部表示恰好与文本文件的本机Unix表示相匹配。为了提高C程序在其他平台上的可移植性,增加了文本流抽象,使非Unix系统上的文本文件看起来像Unix文本文件。
在国际标准化组织/国际电工委员会9899:1999国际编码标准("C99")中,我们订有:
7.19.2流
..。
文本流是按行组成的有序字符序列,每行由零个或多个字符加上一个终止换行符组成。最后一行是否需要结束换行符是由实现定义的。可能必须在输入和输出中添加、更改或删除字符,以符合在主机环境中表示文本的不同约定。因此,流中的字符和外部表示中的字符之间不需要一一对应。
大胆强调我的观点。C++流是用C流定义的。除了一个将各种流模式标志组合映射到适合作为fopen的模式参数的字符串的表之外,没有对C++标准中的文本和二进制模式进行解释。
https://stackoverflow.com/questions/17371695
复制相似问题