指针无法在 C++ 函数中维护
pointer cannot maintain in c++ function
void concat(char *str, char *ch, int num)
{
*str= *ch; ++str;
while (num>0) {
*str = '0' + num % 10;
num /= 10;
++str;
}
}
concat(runner, 'a', 10);
concat(runner, 'b', 20);
我只想将一个像"a"这样的字符连接到 10,预期结果将是 a10第一行工作正常。但我只是想在第一行(Concat A10)之后,跑步者应该指向字符串的末尾,所以当我运行第二行时,它应该是 A10B20,但实际结果是 B20 覆盖 A10。我想应该是指针问题,你能帮我吗?
我正在完全改变我的答案。 把它放在函数的开头:
void concat(char * str, const char * ch, int num) {
while (*str) {
++str;
}
然后保持其余的相同。 这确实是 concat 应该的样子。 只需确保 runner[0] == 0 在第一次调用它之前! 并将以下代码添加到函数的末尾,在最后一个大括号之前:
*str = 0;
}
使用 & 应该没问题或者实际上在 C 中,您可以使用 **,两种方式。
好吧,代码会按照您的要求进行操作。
为此,您需要找到第一个字符串的末尾,然后添加到其中:
void concat(char *str, char *ch, int num)
{
str += strlen(str); /* make sure we start adding at the end of str */
*str= *ch; ++str;
while (num>0) {
*str = '0' + num % 10;
num /= 10;
++str;
}
}
但是现在你必须确保 str[0] 在开始时是 0
因为每次调用 concat 时,str 的索引都是从 0 开始的。这就是 str 的内容被覆盖的原因。只需跳过 str 中的所有填充位置,然后再附加任何位置。
问题是您的函数不知道正在传入的字符串的结尾。要解决此问题,您需要将char *
初始化为所有0
或