C++子字符串似乎指向错误的位置
C++ substring seems to be pointing at wrong spot
我正在阅读一个带有C++的文本文件。由于我是C++新手,我添加了一堆"cout"语句来观察事情的行为。我得到了一个我找不到解释的输出,希望这里有人可以指出我一些相关的文本。
- 我读了一行
- 打印行
- 用"substr()"打印"line"中的前2个字符
- 将行复制到工作区("mybuffer")
- 打印我的工作区的子字符串,长度为 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 个字符是一个适合一个字节的/
。
相关文章:
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 奇怪的Arduino C++编译错误取决于文件位置
- 我收到分段错误,但不了解分段错误发生的位置
- 访问特定阵列位置/索引时出现分段错误
- boost::p rogram_options 在指定意外的位置参数时不报告任何错误
- 快速排序;分段错误,但找不到位置?
- 在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误
- 错误 在测试.exe 0x76C9FD62时出现未经处理的异常:Microsoft C++异常:内存位置0x006FF8
- 错误:内存位置的 std::length_error
- 处于默认参数位置的 Lambda 无法访问好友成员。这是编译器错误吗?
- 无法指出发生分段错误的位置
- 在 C 代码中调用 Python 函数时第三次出现访问冲突写入位置错误
- 目标提升::<library>已经有导入的位置 + 链接错误
- 如何使用 Poco Json 解析器确定输入文档中错误的位置?
- 在动态加载的位置无关的可执行文件中分离错误
- Visual studio显示SEH异常的错误位置
- 编译器运行时错误报告和错误位置
- 核心转储,但是找不到错误位置,有GDB的错误信息
- 如何使用精灵解析器获得错误位置