使用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();
}
我想知道这是怎么回事。
是否要解决此问题?
感谢您的帮助。
答案 0 :(得分:0)
正如链接的答案所述(在@NeilButterworth的评论中),您不能使用EOF条件来确定是否可以进行其他读取,只有最后一次读取“失败”时才可以。在上面的代码中,当getline最终失败(将会)时,您将有一个空的line
变量,然后可以对其进行访问。
请尝试执行while(std::getline(fin, line)) { ...
。这样,当getline失败时,您就不会使用(空)line
的内容。