晕~strcpy的实现居然也能这样??

theMostValuablePers 2003-08-25 02:14:10
将字符串from复制到to,生成一个新串。
程序中while后面没跟语句,它如何能够终止的??
*to++=*from++这里只是在一直赋值呀,都没看到什么啊??


void strcpy(char *to,char *from)
{
while(*to++=*from++);
}
...全文
28 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
呵呵,明白了!
gernal_dn 2003-08-25
  • 打赏
  • 举报
回复
e
gernal_dn 2003-08-25
  • 打赏
  • 举报
回复
括号()也是运算符,结果就是最后的值。
(*to++=*from++)除了赋值外,整个表达式的值是最后的值*to;
再比如(a=b,c=d,e=f)最后的值是
jadeinsea 2003-08-25
  • 打赏
  • 举报
回复
tjjmmtds(看我72变) :
赋值表达式可以返回“右值”
Bandry 2003-08-25
  • 打赏
  • 举报
回复
*to++=*from++的值是*to的值,不是赋值成功不成功的值
lyr311 2003-08-25
  • 打赏
  • 举报
回复
我决得是这样,好多书上也是这么说:
while(expression)
等价于
while(expression!=0)
当表达式expression为字符串的时候,自然就相当于
while(expression!='\0') /* 这与while(expression!=0)实际上也可以通用,但这样更直观*/
所以
void strcpy(char *to,char *from)
{
while(*to++=*from++);
}
等价于
void strcpy(char *to,char *from)
{
while((*to++=*from++)!='\0'); /* '\0'也可以写成0 */
}
oopig 2003-08-25
  • 打赏
  • 举报
回复
=确实是赋值语句,但是*to++ = *from++;这个赋值表达式的值是(*to),意思就是to到达字符串结束符的时候,循环就结束了。
tjjmmtds 2003-08-25
  • 打赏
  • 举报
回复
oopig(面向对象的猪):
为什么“当*to == 0的时候就终止了”啊?
它那里只是=而不是==啊?
我是不懂才也问你的哦^_^
oopig 2003-08-25
  • 打赏
  • 举报
回复
当*to == 0的时候就终止了

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧