调试器对来自 ifstream 的数据的奇怪输出
Strange output from debugger on data from ifstream
我以只读模式打开一个文件,我读了一行,但我无法理解调试器显示的行内容的含义:
#include <cctype>
#include <fstream>
#include <iostream>
#include <string>
int main()
{
std::string fidMapPath = "./file.txt";
std::ifstream ifsFidMap(fidMapPath);
if(ifsFidMap.good() == false) {
std::cerr << "Error" << std::endl;
exit(1);
}
std::string line;
while(ifsFidMap.eof() == false)
{
std::getline(ifsFidMap, line);
std::cout << "Line: " << line << std::endl;
}
}
这是文本文件的内容:
; Document title
123;456
123;123
456;456
...
当运行时,line
变量什么都不打印;使用调试器,其内容等于 getline()
之前的“”(空)和之后的 \000\000\000\000...
,重复长度最多为 2411 个字符。
这种行为是什么意思?
这些是我的平台详情:
- 操作系统:Windows10,通过 NetBeans 8.2 在 Linux(Red Hat,内核 2.6.32-431.5.1.el6.x86_64)上远程构建。
- 编译器:GCC 4.8.2 (C++11)
- 调试器:GDB Red Hat Enterprise Linux 7.6.1-47.el6
P.S.: 按照建议,我尝试在 while
参数中移动 getline
:
while(std::getline(ifsFidMap, line))
但我仍然遇到同样的问题。
对于我使用的 GCC 版本 4.8.2,我们必须明确指定编译的是否是具有 -std=c++11
编译器选项的 C++11 代码。否则默认为 C++98。
这适用于高达 5.x 的 GCC 版本。
我以只读模式打开一个文件,我读了一行,但我无法理解调试器显示的行内容的含义:
#include <cctype>
#include <fstream>
#include <iostream>
#include <string>
int main()
{
std::string fidMapPath = "./file.txt";
std::ifstream ifsFidMap(fidMapPath);
if(ifsFidMap.good() == false) {
std::cerr << "Error" << std::endl;
exit(1);
}
std::string line;
while(ifsFidMap.eof() == false)
{
std::getline(ifsFidMap, line);
std::cout << "Line: " << line << std::endl;
}
}
这是文本文件的内容:
; Document title
123;456
123;123
456;456
...
当运行时,line
变量什么都不打印;使用调试器,其内容等于 getline()
之前的“”(空)和之后的 \000\000\000\000...
,重复长度最多为 2411 个字符。
这种行为是什么意思?
这些是我的平台详情:
- 操作系统:Windows10,通过 NetBeans 8.2 在 Linux(Red Hat,内核 2.6.32-431.5.1.el6.x86_64)上远程构建。
- 编译器:GCC 4.8.2 (C++11)
- 调试器:GDB Red Hat Enterprise Linux 7.6.1-47.el6
P.S.: 按照建议,我尝试在 while
参数中移动 getline
:
while(std::getline(ifsFidMap, line))
但我仍然遇到同样的问题。
对于我使用的 GCC 版本 4.8.2,我们必须明确指定编译的是否是具有 -std=c++11
编译器选项的 C++11 代码。否则默认为 C++98。
这适用于高达 5.x 的 GCC 版本。