我使用的文件有15行,每行2个字符,因此假定文件的大小约为44个字节,但是使用tellg函数,大小显示为58.此外,我累积了一个数组代码识别换行符的位置,它们都是连续的,因此证实了这个疑问。谢谢!
<select ng-model="selectedName" ng-init="selectedName='b'"/ >
答案 0 :(得分:2)
Linux使用\n
(换行符,0x0A)作为新行字符。
Windows / DOS使用\r\n
(回车符(0x0D)和换行符(0x0A))作为新行字符。
可能你正在读一个DOS编码的文件。
This answer提供了更多详细信息。
答案 1 :(得分:1)
使用二进制文件编辑器(例如Hexedit)打开您的文件,您很可能会看到新行使用\n\r
(0x0A
,&#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'
没有固有的联系。