strcmp 源代码 实现

本文出自 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 * 强制转换,并不是很理解.........

原文地址:https://www.cnblogs.com/rollrock/p/2751141.html