调试器对来自 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 个字符。

这种行为是什么意思?

这些是我的平台详情:


P.S.: 按照建议,我尝试在 while 参数中移动 getline

while(std::getline(ifsFidMap, line))

但我仍然遇到同样的问题。

对于我使用的 GCC 版本 4.8.2,我们必须明确指定编译的是否是具有 -std=c++11 编译器选项的 C++11 代码。否则默认为 C++98。

这适用于高达 5.x 的 GCC 版本。