ファイル内の特定の単語を検索して、その単語がファイル内に存在するかどうかの結果を返したい。これを行う関数を作成しました。しかし、プログラムを返す間、プログラムはクラッシュします。コードは次のとおりです。
bool FindMyWord(const char *fileName)
{
ifstream myFile (fileName);
if(!myFile)
return false;
string wordSearch = "MyWord";
string endSearch = "LastWord";
bool result;
while(1)
{
char read[20];
myFile.getline(read, 1000, '\n');
string line(read, read+20);
if(line.find(wordSearch) != string::npos)
{
result = true;
break; //comes here after looping about 10 times
}
if(line.find(endSearch) != string::npos)
{
result = false;
break;
}
}
myFile.close();
return result;
} // <- crash when F10 is pressed after this
VS2010でデバッグ中return result;
に、関数の最後から2番目の行で ""を実行した後、つまり黄色のカーソルが関数の最後の閉じ括弧にあるときにクラッシュが発生していることがわかりました。メッセージが届きます
A buffer overrun has occurred in myApp.exe which has corrupted the program's internal
state. Press Break to debug the program or Continue to terminate the program.
このエラーは何ですか?私はこのような関数を呼び出しています:
bool result = FindMyWord("myFileName.stp");
更新:各行の文字数はさまざまで、20を超えています。最初の20文字を読みたいのですが、それらの文字に単語が存在しない場合は、次の行にジャンプします。最初は使用していましたがmyFile.getline(read, 20, '\n');
、最初のループの後、後続のすべてのループの結果、読み取りにNULLが渡されました。1000文字を読み取る前に'\n'が見つかり、次の行に移動するため、1000を読み取るようにしました。同じことを達成するためのより良いメカニズムは非常に役立ちます。