Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;子字符串似乎指向错误的位置 我正在用C++阅读文本文件。 由于我是C++新手,所以我添加了一组“CUT”语句来了解事物的行为。 我得到了一个没有任何解释的输出,希望这里有人能给我指出一些相关的文本 我读了一行 打印行 使用“substr()”打印“line”中的前2个字符 将行复制到工作区(“mybuffer”) 打印我工作区域的子字符串,10个字符长_C++_String_Substr - Fatal编程技术网

C++;子字符串似乎指向错误的位置 我正在用C++阅读文本文件。 由于我是C++新手,所以我添加了一组“CUT”语句来了解事物的行为。 我得到了一个没有任何解释的输出,希望这里有人能给我指出一些相关的文本 我读了一行 打印行 使用“substr()”打印“line”中的前2个字符 将行复制到工作区(“mybuffer”) 打印我工作区域的子字符串,10个字符长

C++;子字符串似乎指向错误的位置 我正在用C++阅读文本文件。 由于我是C++新手,所以我添加了一组“CUT”语句来了解事物的行为。 我得到了一个没有任何解释的输出,希望这里有人能给我指出一些相关的文本 我读了一行 打印行 使用“substr()”打印“line”中的前2个字符 将行复制到工作区(“mybuffer”) 打印我工作区域的子字符串,10个字符长,c++,string,substr,C++,String,Substr,问题是: (a) (3)的输出似乎是转义序列(无法打印的字符)。如果我将子字符串的长度从2更改为4,则得到一个/。 (b) 即使“mybuffer”的内容看起来正确(前两个字符确实是//),子字符串函数也只返回七个(可打印)字符 while( std::getline( file, line ) ) { foundeq = 0; clearthis = 0; mybuffer = line; cout<< "line>>" << line<<"\n

问题是: (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";
发生了什么事

提前感谢您的评论。

简短回答 您的文件已编码,并且在开头有一个

稍长的回答 因此,您的控制台正在以八进制为您打印前两个数字。0357和0273。第三个字符是0277。当您看到这三个字符排成一行时,控制台可能会决定不打印它们


另外,您的文件中的第四个字符可能是一个一字节的
/

我已经猜到了,谢谢您的澄清。还有一个问题:为什么这些字符包含在子字符串中?(注:我还不能投票,否则我会投票。)它们是文件的前三个字节<代码>标准::字符串并不真正理解字符串,比如说,它只是一系列字节。工具通常隐藏奇怪的(读取非ascii)字符。因此,根据您使用的编辑器,您不会看到前3个字符,即使它们在那里
\357\273\277
0xEF 0xBB 0xBF
的八进制表示形式,即使您看不到它们,它们也是文件中真正的前3个字符。@Kyle:更可能的情况是,nandomtl的编辑器理解用户的UFT-8 BOM,将这些字符解析为BOM,然后将文件的其余部分解析为UTF-8。@Bill我明白了。这些字符在文件中(感谢BOM链接-我最近确实在文本文件中看到了)。唯一有点不寻常的是,当(并且仅当)可打印字符在流中时,控制台会忽略这些字符。谢谢你,比尔!2015年快乐!
    line>>//--------------------------------------------------
    first 2 chars in line>>\357\273
    mybuffer>>//--------------------------------------------------
    first 10 chars in mybuffer>>//-----