0

我遇到了一件很奇怪的事情。我遇到问题的代码是:

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;它,它会进入无限循环......

有什么建议么?谢谢!

4

3 回答 3

6

这是一个错误(并且使用了统一变量):

while (stringPos < 1);

因为它相当于:

while (stringPos < 1) {}

如果这没有进入无限循环,那么它后面的代码将只执行一次。纠正:

  • 初始化变量stringPosfound1
  • 使用 type size_tforstringPosfoundasstd::string::find()不会返回int,而是返回size_type(通常是size_t)。
  • 使用std::string::npos而不是-1测试not found
  • 删除结尾的分号。
于 2013-06-04T19:42:11.587 回答
2

您的程序具有未定义的行为,因为您试图在此处使用未初始化变量的值:

while (stringPos < 1)
//     ^^^^^^^^^
//     This is uninitialized

和这里:

found1 = inString.find(frame1, found1);
//                             ^^^^^^
//                             This is uninitialized

此外,即使假设您的变量已初始化,您也有一个分号使您的while循环成为无操作或无限循环(正如 hmjd 在他的回答中正确指出的那样)。

于 2013-06-04T19:42:04.550 回答
0

我将从初始化 stringPos 和 found1 变量开始。

于 2013-06-04T19:42:53.810 回答