C ++从递归函数打印奇怪的字符

C++ prints strange character from recursive function

我想创建一个函数,给定一个字符串,在每个字符之间放置“*”。

例如:

你好---> h*e*l*l*o

using namespace std;

string allStar(string str, int n)
{

    if (str.at(n + 1) == '.') {

        return string(1, str.at(n));
    }

    return str.at(n) + "*" + allStar(str, n + 1);
}

int main()
{

    string str;

    cout << "Input word: ";
    cin >> str;

    str = str + ".";

    cout << allStar(str, 0);

    return 0;
}

输入单词:你好

然后我得到: ��������o

str.at(n) + "*" 表示 "take a pointer to string literal "*", and offset it by the number that happens to be an ASCII code of the character str.at(n)"。然后,您的程序通过越界访问索引表现出未定义的行为。