我遇到了一些很奇怪的事情。我遇到问题的代码是:
int stringPos;
int found1;
while (stringPos < 1);
{
//start searching inString for framen starting at foundn and record
found1 = inString.find(frame1, found1);
cout << found1 << endl;
//if return is a number, push back foundn to a vector
if (found1 != -1)
{
foundPositions.push_back(found1);
}
//if return is npos, then break the loop
else
{
stringPos=1;
}
//add 1 to foundn so that the search would continue from where the
//search ended last
found1+=1;
}
奇怪的是,当我将cout << found1 << endl;
放在行found1 = inString.find(frame1, found1);
下方时,循环正确执行。但是,如果我没有cout << found1 << endl;
,它就会进入无限循环......
有什么建议吗?谢谢!
答案 0 :(得分:6)
这是一个错误(并使用了一个整数变量):
while (stringPos < 1);
因为它相当于:
while (stringPos < 1) {}
如果这没有进入无限循环,则其后面的代码只会被执行一次。纠正:
stringPos
和found1
。size_t
和stringPos
使用found
类型,因为std::string::find()
不会返回int
,但会返回size_type
(通常为{{1} }})。std::string::npos
代替size_t
来测试找不到。答案 1 :(得分:2)
您的程序有未定义的行为,因为您尝试在此处使用未初始化变量的值:
while (stringPos < 1)
// ^^^^^^^^^
// This is uninitialized
在这里:
found1 = inString.find(frame1, found1);
// ^^^^^^
// This is uninitialized
此外,即使假设你的变量已初始化,你也有一个分号,使你的while
循环成为无操作或无限循环(as hmjd correctly points out in his answer)。
答案 2 :(得分:0)
我首先要初始化stringPos和found1变量。