我正在用C ++阅读文本文件。 由于我是C ++的新手,我添加了一堆" cout"陈述以了解事物的行为方式。 我得到了一个输出,我没有找到任何解释,希望有人可以指点我一些相关的文字。
问题: (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>>\357\273
mybuffer>>//--------------------------------------------------
first 10 chars in mybuffer>>//-----
发生了什么事?
提前感谢您的意见。
答案 0 :(得分:5)
您的文件以UTF-8编码,开头有Byte Order Mark。
所以你的控制台正在以八进制打印前两个数字。 0357和0273. UTF-8 BOM的第三个字符是0277.据推测,当您在控制台中连续看到这三个字符时,它决定不打印它们。
另外,大概是文件中的第4个字符是/
,它适合一个字节。