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

C++ C++;从递归函数中打印奇怪字符,c++,string,char,character,cout,C++,String,Char,Character,Cout,我想创建一个函数,在给定一个字符串的情况下,在每个字符之间放置“*” e、 g: 你好-->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 m

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

e、 g:

你好-->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;
}
使用名称空间std;
字符串全明星(字符串str,int n)
{
如果(str.at(n+1)='。){
返回字符串(1,str.at(n));
}
返回str.at(n)+“*”+allStar(str,n+1);
}
int main()
{
字符串str;
cout>str;
str=str+”;

cout
str.at(n)+“*”
的意思是“取一个指向字符串文字的指针”
“*”
,并将其偏移为字符
str.at(n)
”的ASCII码。然后,您的程序通过访问超出范围的索引来显示未定义的行为。

返回字符串(1,str.at(n))
-这里的
n
是什么?是什么确保它在
str
的范围内?您需要处理代码格式…我在字符串末尾添加了一个“.”以用作main的基本大小写。“我在字符串末尾添加了一个“.”以用作main的基本大小写”Hello Igor,我的新工作是C++,你能再解释一下吗?(我理解你的观点,它似乎很有说服力,而且它没有索引之外,看主。<代码> *”/代码>是<代码> char */COD>指针(我们称之为代码> P<代码>)对于两个字符的数组,
{'*','\0'}
。也就是说,
p+0
指向星型字符,
p+1
指向终止数字。0和1是这个两元素数组中唯一有效的偏移量。现在
p+'h'
相当于
p+104
;字符文字
'h'
代表对应字符的ASCII码,它恰好是be 104。这将指针推进到某个随机内存中,超出其边界。
'h'+p
也是如此;加法是可交换的,即使对于指针算术也是如此。最后,您将从垃圾指针隐式构造
std::string
,该垃圾指针生成包含垃圾字符的字符串。您可以使用“”的文本(在“)之后添加s以使用字符串而不是char*。