为什么ifstream文件中的换行符 - 当被这段代码读取时 - 占用2个字节?

时间:2017-06-20 06:28:55

标签: c++ c++11

我使用的文件有15行,每行2个字符,因此假定文件的大小约为44个字节,但是使用tellg函数,大小显示为58.此外,我累积了一个数组代码识别换行符的位置,它们都是连续的,因此证实了这个疑问。谢谢!

   <select ng-model="selectedName" ng-init="selectedName='b'"/ >

3 个答案:

答案 0 :(得分:2)

Linux使用\n(换行符,0x0A)作为新行字符。

Windows / DOS使用\r\n(回车符(0x0D)和换行符(0x0A))作为新行字符。

可能你正在读一个DOS编码的文件。

This answer提供了更多详细信息。

答案 1 :(得分:1)

使用二进制文件编辑器(例如Hexedit)打开您的文件,您很可能会看到新行使用\n\r0x0A,&#34;行编码Feed&#34;和0x0D,&#34;回车&#34;),而不只是\n

顺便说一下,只需使用getline

读取文件
std::ifstream infile("thefile.txt");
std::string line;
while (std::getline(infile, line))
{

}

然后,你不必担心如何编码EOL ......

答案 2 :(得分:0)

到目前为止我看到的答案基本上是正确的,但它们混淆了两种不同的观念。 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="overview"> </div>'\n'是转义序列;每个代表单个字符,其值取决于实现。通常那些是0x0A和0x0D,因为这通常很方便,但它们不需要具有这些值。

将字符'\r'写入输出流时,运行时库会执行生成新行所需的任何操作。对于Unix,惯例是字节0x0A表示“开始一个新行”。对于Windows,惯例是字节0x0A表示“向下移动到下一行”(即换行),字节0x0D表示“移动到当前行的开头”;这个组合开始了新的一线。

在ASCII编码中, 0x0A和0x0D分别代表换行符和回车符。它们与C / C ++转义序列'\n''\n'没有固有的联系。