繁体   English   中英

循环中奇怪的指针行为

[英]Strange pointer behaviour in loop

我无法弄清楚为什么这段代码不起作用。 (我知道如何修复它,但我对这个特定的解决方案很感兴趣)它需要一个字符串并且put在其他字符串的末尾。 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"

这个循环:

while(*x++);

移动x经过null终止符。 所以你的c-string和以前一样在同一个地方结束。 在字符y被写入x ,但它们在空结束 ,所以他们没有打印出来。

当你使用

while(*x++);

x指向语句末尾的空字符。 实际上,你最终得到了

x[] = {'a', 'b', 'c', '\0', 'd', 'e', 'f', '\0', ....}

main

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM