读书人

strcpy从写的疑问

发布时间: 2012-09-14 11:53:44 作者: rapoo

strcpy自写的疑问?

提问:在字符串拷贝函数中,通用简洁格式如下:while((*strDest++ = *strSrc++) != '\0');
个人认为它与如下的写法等价。
while(*strSrc != '\0')
{
*strDest = *strSrc;
strSrc++;
strDest++;
}
我的疑问是在:while((*strDest++ = *strSrc++) != '\0')中,'!='号如何解读?
个人理解:应该是把源字符串一位*strsrc赋值给目标字符串的一位*strDest,然后源字符串地址+1,目标字符串地址+1,而后判断的是strSrc所指的单元非空(!='\0')吗?
疑惑点:(*strDest++ = *strSrc++) != '\0',应该是*strSrc!='\0',而不是*strDest!='\0'吧?
但是(*strDest++ = *strSrc++)后给人的感觉是判断的*strDest!='\0'.
求详解,谢谢!

[解决办法]
strcpy 会将字符串结束符 '\0' 拷贝到目标字符串,所以
while((*strDest++ = *strSrc++) != '\0');

while(*strSrc != '\0')
{
*strDest = *strSrc;
strSrc++;
strDest++;
}
并不等价。第一种写法将 '\0' 拷贝到目标字符串来作 != '\0' 的判断,而你写的不能把 '\0' 拷贝到目标字符串。

--{个人理解:应该是把源字符串一位*strsrc赋值给目标字符串的一位*strDest,然后源字符串地址+1,目标字符串地址+1,而后判断的是strSrc所指的单元非空(!='\0')吗?}

最后一句不对:而后判断的是 strDest 所指的单元非空(!='\0')!

另外:既然是拷贝,两个最终都一样,谁比结束符都一样么。

楼主再理解下吧,Good Luck!

读书人网 >C++

热点推荐