0

このブロックは、メモリ位置 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;  
     }
}
4

2 に答える 2

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 を使用すると、ほとんどの場合、最後の読み取りが失敗した理由がわかりますが、次の読み取りが失敗することはわかりません。したがって、使用する場合は、前ではなく getline の後に使用してください。

于 2013-04-24T15:27:21.593 に答える
2

入力ファイルにはおそらく空白行が含まれており、それgetlineが読み取られて空の文字列が生成されます。

または、不正な行が短すぎます。

これを使用することを検討してください。

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

getlineで条件としてを使用すると、で失敗ビットが設定されている場合whileにコードが適切に失敗します。EOFだけではありません。openfile

于 2013-04-24T15:27:34.547 に答える