本文出自 http://k678k678.f01.data023.com/ 转载请注明,谢谢!
//自己写的代码
int my_strcmp(const char * str1, const char * str2 )
{
while( (*str1) && (*str2))
{
if( *str1 - *str2 > 0 )
return 1;
else if( *str1 - *str2 < 0 )
return -1;
++str1;
++str2;
}
if( (*str1 == 0) && (*str2 == 0) )
return 0;
else if( *str1 == 0 )
return -1;
else
return 1;
}
//microsoft 源代码
int __cdecl strcmp (
const char * src,
const char * dst
)
{
int ret = 0 ;
while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst&&*src)
++src, ++dst;
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
return( ret );
}
自己写的比microsoft的稍微复杂一点 ,源于基础知识的不扎实
while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst&&*src)
运算是从左到右的,所以会先运算减法,就算*dst 或者*src为0 (字符串结束了)也可以得到ret的
这里对 src 以及 dst进行了 unsinged char * 强制转换,并不是很理解.........