使用getline时出现未处理的异常

时间:2018-06-19 22:33:53

标签: c++ string getline

使用getline函数后尝试获取第一个字母时,我一直收到未处理的异常。

错误:

  

Lab2中的0x7535DB52处未处理的异常-容器和Regex.exe:   Microsoft C ++异常:内存位置处的std :: out_of_range   0x00B5F43C。


class CodeMap
{
private:
    vector<string> code;
    vector<char> character;

public:
    CodeMap() { character.resize(11000); }
    ~CodeMap() {};

    void setChar(string filename)
    {
        string fileName = filename;
        ifstream fin;
        fin.open(fileName.c_str());
        string line = " ";
        char codeChar;

        while (!fin.eof())
        {
            getline(fin, line);
            codeChar = line.at(0);  //Unhandled exception, tried to use [] instead, still error.

        }
        fin.close();

    }

我想知道这是怎么回事。

是否要解决此问题?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

正如链接的答案所述(在@NeilButterworth的评论中),您不能使用EOF条件来确定是否可以进行其他读取,只有最后一次读取“失败”时才可以。在上面的代码中,当getline最终失败(将会)时,您将有一个空的line变量,然后可以对其进行访问。

请尝试执行while(std::getline(fin, line)) { ...。这样,当getline失败时,您就不会使用(空)line的内容。