内存位置的std :: out_of_range

时间:2013-04-24 15:24:51

标签: c++

这个块在内存位置0x0013f59c给出了错误消息std :: out_of_range。 问题来自3条中间线(我把星号放在哪里)。在代码完美运行之前。我还亲自检查了每行都正确包含了前6个字符。

if (openfile.is_open() && newfile.is_open())
{
      while (! openfile.eof())
     {   
                   getline(openfile, originaldata);
                   string day(originaldata,6,2);           *
                   string month(originaldata,4,2);             *
                   string year(originaldata,0,4);              *
                   string data=day+"/"+month+"/"+year;  
     }
}

2 个答案:

答案 0 :(得分:4)

试试这个

if (openfile.is_open() && newfile.is_open())
{
     while (getline(openfile, originaldata))
     {
                   string day(originaldata,6,2);
                   string month(originaldata,4,2);
                   string year(originaldata,0,4);
                   string data=day+"/"+month+"/"+year;  
     }
}

使用eof几乎总是错误的,因为eof告诉您为什么最后读取失败,它不会告诉您 next 读取将失败。因此,如果你打算使用它,那么在getline之后使用它。

答案 1 :(得分:2)

您的输入文件可能包含一个空白行,getline将读取该行,生成一个空字符串。

或者格式错误的行太短了。

考虑使用它。

  while ( getline(openfile, originaldata) && originaldata.length() > 8 )

getline中使用while作为条件,如果在openfile中设置任何失败位,您的代码将会正常失败。不只是EOF。