我想在文件中搜索特定单词并返回关于该单词是否存在于文件中的结果。我创建了一个执行此操作的函数。但是在返回程序时崩溃了。这是代码:
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;
在函数的倒数第二行执行“”后发生崩溃,即当黄色光标用于函数的最后一个右括号时。我收到一条消息
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 因为在读取 1000 个字符之前它会找到 '\n' 并转到下一行。实现相同目标的更好机制将非常有帮助。