代码之家  ›  专栏  ›  技术社区  ›  Pietro

调试器对ifstream数据的奇怪输出

  •  0
  • Pietro  · 技术社区  · 3 年前

    我以只读模式打开一个文件,读了一行,但我无法理解调试器显示的行内容的含义:

    #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个字符。

    这种行为的意义是什么?

    以下是我的平台详细信息:

    • 操作系统:Windows 10,通过NetBeans 8.2在Linux(Red Hat,内核2.6.32-431.5.1.el6.x86_64)上远程构建。
    • 编译器:GCC 4.8.2(C++11)
    • 调试器:GDB红帽企业Linux 7.6.1-47.el6

    附言:我按照建议尝试移动 getline while 论点:

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

    但我仍然有同样的问题。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Pietro    3 年前

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

    这适用于5.x以下的GCC版本。