关于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
相关产品推荐
相关产品推荐

