gpt4 book ai didi

c++ - String At 函数运行时错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:17:27 28 4
gpt4 key购买 nike

这里是创建运行时错误“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 creator 中运行它。它不会触发 catch block 。当程序到达 text.at(index-1) 且 index-1 越界时,它会在 Qt 中创建运行时错误 http://www.flickr.com/photos/66130188@N07/6023453724/

我用MVS2010的时候没有问题。有什么建议吗?

最佳答案

您可以通过简单地检查 find 的返回值来完全避免异常检查。第一:

if ((index == std::string::npos || index == 0)        ||
(text[index - 1] < '0' && text[index - 1] > '9') )
{
return false;
}

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

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

更新:替换 .at()通过 []因为我们对自己有信心。

关于c++ - String At 函数运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6988367/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com