关于 C 中 "while(*s1++ = *s2++);"的困惑

标签 c pointers

代码:

#include <stdio.h>

int main()
{
    char str1[]="bombay";
    char str2[]="pune";

    char *s1 = str1;
    char *s2 = str2;

    while(*s1++ = *s2++);
    printf("%s\n",str1);
}

输出:(GCC 编译器)

pune

但根据我的说法,输出应该是puneay。应该复制 pune 来代替 bomb,其余的应该保持原样。

那么,为什么编译器会给出此代码的输出 "pune" 而不是 "puneay"

最佳答案

同样被复制的字符串末尾有一个空终止符。

当复制空终止符时,while 停止执行,并打印结果。

因此 str1 的内存实际上包含:'p' 'u' 'n' 'e' '\0' 'y' '\0'

关于关于 C 中 "while(*s1++ = *s2++);"的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51840835/

相关文章:

c++ - 如何在 c/c++ 的命令行程序中创建 --help 选项?

c - 递增一个空指针

c++ - 如何使用指针从不同的函数访问局部变量?

c - 使用 memset() 并解释函数的 size_t 数字

C++ 类和 Xcode

c++ - 反向双向链表的前向互惠失败

c - 在 visual studio 中构建程序

c - 为什么while循环会清除一个变量?

c++ - 使用 #ifdefs 和 #define 可选择将函数调用转换为注释

c - 这些代码行怎么会导致完全相同的程序有时崩溃但其他程序运行良好?