strcmp源代码如下:
int __cdecl strcmp (const char * src, const char * dst)
{
int ret = 0 ;
while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
++src, ++dst;
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
return( ret );
}
我们要看的是while循环这个语句, ! (ret = (unsigned char )src - (unsigned char )dst)意思是拿指针变量src所指向的字符值(即*src)减去指针变量dst所指向的字符值(即*dst),差值赋给ret,再取非运算,最后与*dst进行与运算;
拿abc例,第一次因为a=a,则执行++src,++dst;2次自加后,ret值为负,跳出while语句,执行if语句的判断,输出为-1;
这里要注意的是:
1.unsigned char*是强制转换类型。
2.若src和dst都为空串,返回值是多少呢?因为空串不是指地址为空,还是有地址的,这样就很明确了。