std ::: erase中的out_of_range异常

时间:2015-06-25 07:13:54

标签: c++ string

我的以下程序给了out_of_range例外。

bool myProg(char* value, int length, long& num)
{
    string s;
    char tmp;
    bool retVal = true;
    s.assign((const char*)value, length);
    s.erase(remove(s.begin(),s.end(),' '),s.end());

    ...
    // modify s characters 

    std::size_t found = s.rfind('F');
    if (found!=std::string::npos)
            s.erase(found,1);

    ...
    // work on num variable 

    return true;
}

我在google上查看了所有函数,发现只有erase才能抛出异常,并且只有在erase函数中传递的位置无效时才会抛出异常。

我无法找到什么输入字符串可以导致异常,因为我在我的几个字符串上运行它并且程序在我的所有测试用例中都能正常工作。

请注意,该程序现在无法修改。重新部署,包括try catch来捕获输入变量并检查它们。所以我坚持只看代码。

1 个答案:

答案 0 :(得分:0)

首先尝试更改此声明

std::size_t found = s.rfind('F');

要么

auto found = s.rfind('F');

std::string::size_type found = s.rfind('F');

并检查length是否超过std::strlen( value )

此外看起来也不一致:引入变量retVal的意义是什么?

bool retVal = true;
//...
return true;