首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

strcpy从写的疑问

2012-09-14 
strcpy自写的疑问?提问:在字符串拷贝函数中,通用简洁格式如下:while((*strDest++ *strSrc++) ! \0)

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!

热点排行