C++ substring似乎指向了错误的位置

nan*_*mtl 2 c++ string substr

我正在用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";
Run Code Online (Sandbox Code Playgroud)

输出:

    line>>//--------------------------------------------------
    first 2 chars in line>>\357\273
    mybuffer>>//--------------------------------------------------
    first 10 chars in mybuffer>>//-----
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事??

提前感谢您的意见.

Bil*_*nch 5

简答

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

答案稍微长一些

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

另外,大概是文件中的第4个字符是/一个字节.