70,006
社区成员




实测'\0'会复制过去,如果不复制过去函数本身就是错的。 嗯嗯,还有一个问题不明白啊,判断*b指向的元素为'\0'则停止循环,此时b中的'\0'还为复制到a中,是不是?
明显是strcpy函数的实现源码。 a++不能做左值。 还有你得搞清楚*a++ = *b++,和a++ = b++的区别。*a++ = *b++是先将b指向地址的值取出来赋值给a纸箱地址的值,然后a指针指向下一个元素的地址,b指针也只想下一个元素的地址。a++ = b++欲使a++做左值,肯定是错的。
嗯嗯,还有一个问题不明白啊,判断*b指向的元素为'\0'则停止循环,此时b中的'\0'还为复制到a中,是不是?
你漏掉了那两个 * 号
a++不能放在等号左边
你漏掉了那两个 * 号
[quote=引用 4 楼 u013171165 的回复:] 楼主可能没懂这句的意思: while((*a++=*b++)!='\0')表示1、*a=*b; 2、a++;b++; 判断*b(此时b已经加了一次了,指向下一个元素)所指向元素是否为'\0',是的话就退出循环,不是(!=)则继续复制b所指数组中元素到a数组中。 你说的 (a++)=(b++))!=4 这意思就完全变了,a++返回的是自身的值副本 (++a)=(++b)!=4; 这个却可以,因为:++a 返回的是a加1后自身的引用!不信你试下。
楼主可能没懂这句的意思: while((*a++=*b++)!='\0')表示1、*a=*b; 2、a++;b++; 判断*b(此时b已经加了一次了,指向下一个元素)所指向元素是否为'\0',是的话就退出循环,不是(!=)则继续复制b所指数组中元素到a数组中。 你说的 (a++)=(b++))!=4 这意思就完全变了,a++返回的是自身的值副本 (++a)=(++b)!=4; 这个却可以,因为:++a 返回的是a加1后自身的引用!不信你试下。