试图递归返回字符串时发生C++错误

C++ Error while attempting to recursivly return string

本文关键字:C++ 错误 字符串 递归 返回      更新时间:2023-10-16

我在尝试编译时遇到此错误:

"在抛出'std::out_of_range'的实例后调用terminatewhat():basic_string::at此应用程序已请求运行时以一种不同寻常的方式终止它。"

我猜这与程序中的.at()一词有关,但我似乎不明白具体原因。

string Recursive4(const string word)
{
    string D;
    int num = word.length();
    D.reserve(word.size());
    D += word.at(num);
    num--;
    if (word.at(0))
        return D;
    else
        return Recursive4(word);
}
int main()
{
    cout << Recursive4("Loyce") << endl;
}

string与几乎所有容器一样,使用零索引,因此最大元素索引为size-1。您可以按如下方式更改代码:

string Recursive4(const string word)
{
    string D;
    int num = word.length() - 1;
    D.reserve(word.size());
    D += word.at(num);
    num--;
    if (word.at(0))
        return D;
    else
        return Recursive4(word);
}

EDIT:正如user657267所指出的,如果使用operator[]获取索引size处的元素,那么string确实会返回对null字符的引用。