You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于K&R风格指针实现strcpy函数中while循环条件的疑问

K&R风格strcpy函数的循环逻辑详解

先看你实现的strcpy代码:

void strcpy(char *s, char *t)
{
    int i;
    i = 0;
    while ((*s = *t) != '\0') {
        s++;
        t++;
    }
}

你的理解完全正确,这个循环的核心逻辑依赖C语言中赋值表达式的返回特性:

  • 赋值操作(*s = *t)会先把t指向的字符拷贝到s指向的内存位置,同时整个表达式的返回值就是被拷贝的字符(也就是*t的值)。
  • 当遍历到t的末尾时,*t是字符串结束符'\0',执行赋值后s也被写入'\0',此时赋值表达式的返回值就是'\0'。
  • 接下来判断'\0' != '\0',结果为假,循环直接终止。

这种写法的巧妙之处在于,它把“拷贝字符”和“判断是否到达字符串末尾”两步合并到了循环条件里,既完成了终止符的拷贝,又能精准结束循环,不需要额外的分支判断。

内容的提问来源于stack exchange,提问作者Zolo_Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:55:16