while里面的((*dstStr++=*srcStr++) != '\0')

libaishen1991 2012-02-17 07:56:53
实现MyStrcpy()
void MyStrcpy(char *dstStr,const cha *srcStr)
{
while((*dstStr++ = *srcStr++) != '\0')
{
}
}

main()
{
char a[80],b[80];
printf("please enter a string:")
gets(a);
MyStrcpy(b,a);
printf(b);
puts(b);
}

想问下,
MyStrcpy()
里面的while((*dstStr++ = *srcStr++) != '\0')
{
}
怎么理解,讲srcStr付给dst后,那什么和'\0'比啊,赋值语句有值?
...全文
807 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yulinlang 2012-02-17
  • 打赏
  • 举报
回复
参考《C程序设计语言》第二版 K&R 机械工业出版社 2.10 赋值运算符与表达式:

赋值表达式的类型是它的左操作数的类型,其值是赋值操作完成后的值。
sunfen0307 2012-02-17
  • 打赏
  • 举报
回复
里面的while((*dstStr++ = *srcStr++) != '\0')
判断 是否字符串 到了末尾。。。
如此美丽的你 2012-02-17
  • 打赏
  • 举报
回复
不要写连自己看不懂的代码。
AnYidan 2012-02-17
  • 打赏
  • 举报
回复
while(*dstStr++ = *srcStr++) 足够

当 srcStr 结尾时 '\0' 的数值就是 0,while(0) 自然就结束了循环
caddor 2012-02-17
  • 打赏
  • 举报
回复
'\0'


[Quote=引用 7 楼 caddor 的回复:]
参数不检查,楼主传NULL 进去看看



引用楼主 libaishen1991 的回复:
实现MyStrcpy()
void MyStrcpy(char *dstStr,const cha *srcStr)
{
while((*dstStr++ = *srcStr++) != '\0')
{
}
}

main()
{
char a[80],b[80];
prin……
[/Quote]
caddor 2012-02-17
  • 打赏
  • 举报
回复




参数不检查,楼主传NULL 进去看看



[Quote=引用楼主 libaishen1991 的回复:]
实现MyStrcpy()
void MyStrcpy(char *dstStr,const cha *srcStr)
{
while((*dstStr++ = *srcStr++) != '\0')
{
}
}

main()
{
char a[80],b[80];
printf("please enter a string:")
……
[/Quote]
jyy5208058 2012-02-17
  • 打赏
  • 举报
回复
这就是先给dststr这个指针指向的 char形数据赋值,,, 再拿dststr指向的char形数据的值和‘\0’比较阿
ProgrammingRing 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wangyaninglm 的回复:]

引用 1 楼 programmingring 的回复:
应该是用dstStr的值和'\0'比较

可不可能同时比?
[/Quote]
不能吧…只和(*dstStr++ = *srcStr++)这个表达式的值比较
shiter 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 programmingring 的回复:]
应该是用dstStr的值和'\0'比较
[/Quote]
可不可能同时比?
huhaifengasd 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huhaifengasd 的回复:]

while((*dstStr++ = *srcStr++) != '\0')
是把*srcStr赋值给*dststr后 然后和 '\0'比较如果不等就执行srcStr++;dstStr++;
其实不懂可以这种写
while((*dstStr = *srcStr) != '\0')
{
srcStr++;
dstStr++;

我想应该更好理解 前面的是优化了……
[/Quote]

是赋值后的*dststr 和'\0'比较 也就是 *srcStr; Strcpy的结束条件是到了字符串结尾'\0'
huhaifengasd 2012-02-17
  • 打赏
  • 举报
回复
while((*dstStr++ = *srcStr++) != '\0')
是把*srcStr赋值给*dststr后 然后和 '\0'比较如果不等就执行srcStr++;dstStr++;
其实不懂可以这种写
while((*dstStr = *srcStr) != '\0')
{
srcStr++;
dstStr++;

我想应该更好理解 前面的是优化了的代码。
ProgrammingRing 2012-02-17
  • 打赏
  • 举报
回复
应该是用dstStr的值和'\0'比较

69,382

社区成员

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

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