gpt4 book ai didi

c++ - 循环中奇怪的指针行为

转载 作者:太空狗 更新时间:2023-10-29 19:37:24 24 4
gpt4 key购买 nike

我不明白为什么这段代码不起作用。 (我知道如何修复它,但我对这个特定的解决方案很感兴趣)它需要一个字符串并将它放在另一个字符串的末尾。 x = "abc"y = "def" 并且在执行 foo 之后,x = "abcdef"。执行我的代码后,我只得到 "abc"

#include <stdio.h>
#define MAX 10

void foo(char *x, char *y){
while(*x++);
while(*y){
*x++ = *y++;
}
*x = '\0';
}

int main(void){
char x[MAX+1], y[MAX+1];
scanf("%s %s", x, y);
foo(x, y);
printf("%s", x);
return 0;
}

如果我这样做,代码将完美运行。

while(*x) x++;

最佳答案

即使在发现 null 并且循环完成后,此表达式也会递增 x:

while(*x++);

在这种情况下,您将在 null 之后附加第二个字符串,因此不会“看到”该字符串的一部分。字符串变为 "abc\0def"

当找到 null 时,以下不会增加 x,因此 *x 将在循环完成后指向 null:

while(*x) x++;

因此,在这种情况下,您的字符串会正确显示为 "abcdef"

关于c++ - 循环中奇怪的指针行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27693157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com