C++子字符串似乎指向错误的位置

C++ substring seems to be pointing at wrong spot

本文关键字:错误 位置 字符串 C++      更新时间:2023-10-16

我正在阅读一个带有C++的文本文件。由于我是C++新手,我添加了一堆"cout"语句来观察事情的行为。我得到了一个我找不到解释的输出,希望这里有人可以指出我一些相关的文本。

  1. 我读了一行
  2. 打印行
  3. 用"substr()"打印"line"中的前2个字符
  4. 将行复制到工作区("mybuffer")
  5. 打印我的工作区的子字符串,长度为 10 个字符

问题:(a) (3) 的输出似乎是转义序列(不可打印的字符)。如果我将子字符串的长度从 2 更改为 4,我会得到一个/。(b) 即使"mybuffer"的内容看起来正确(前两个字符确实是//),子字符串函数也只返回七个(可打印)字符。

while( std::getline( file, line ) )
{
foundeq = 0;
clearthis = 0;
mybuffer = line;
cout<< "line>>" << line<<"n";
cout<<"first 2 chars in line>>"<<line.substr(0,2)<<"n";
cout<< "mybuffer>>" << mybuffer<<"n";
cout<<"first 10 chars in mybuffer>>"<<mybuffer.substr(0,10)<<"n";

输出:

    line>>//--------------------------------------------------
    first 2 chars in line>>357273
    mybuffer>>//--------------------------------------------------
    first 10 chars in mybuffer>>//-----

这是怎么回事??

提前感谢您的评论。

简答题

您的文件以 UTF-8 编码,开头有一个字节顺序标记。

稍长的答案

因此,您的控制台正在为您打印八进制的前两个数字。 0357 和 0273。UTF-8 BOM 表的第三个字符是 0277。大概当您控制台连续看到这三个字符时,它决定不打印它们。

此外,据推测,文件中的第 4 个字符是一个适合一个字节的/