在内存位置的Std::out_of_range

std::out_of_range at memory location

本文关键字:out of range Std 内存 位置      更新时间:2023-10-16

这个块在内存位置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;  
     }
}

试试这个

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告诉你为什么最后一次读取失败,它并没有告诉你下一次读取将失败。因此,如果你要使用它,请在getline之后使用它,而不是在。

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

或者格式不正的行太短。

考虑使用这个

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

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