String在函数运行时错误

时间:2011-08-08 20:48:32

标签: c++ string function qt-creator

以下是代码片段,它会产生运行时错误“Microsoft Visual C ++运行时库”http://www.flickr.com/photos/66130188@N07/6023459646/

string text = something;
size_t index = text.find("hoopla");
try{
    if(text.at(index-1)<'0'&&text.at(index-1)>'9')
       return false;
}catch(out_of_range){return true;}

我在Qt创建者中运行它。它不会触发catch块。当到达text.at(index-1)和index-1的程序超出范围时,它会在Qt中创建运行时错误http://www.flickr.com/photos/66130188@N07/6023453724/

当我使用MVS2010时,我没有遇到任何问题。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

只需先检查find的返回值

,即可完全避免异常检查
if ((index == std::string::npos || index == 0)        ||
    (text[index - 1] < '0' && text[index - 1] > '9')    )
{
  return false;
}

在第一种情况下,npos,找不到搜索字符串,在第二种情况下,它位于环境字符串的开头,因此您无法查看其前面的字符。

(这称为“攻击性编程”:不要在运行时检查错误,而是构建算法,以便知道您的访问权限是正确的。如果愿意,您可以添加断言 assert(index < text.length());表示您确定您持有正确的值,这不会影响您的发布版本。)

更新:取代.at() [],因为我们确信自己。