参加一个知名企业的面试,让写strcmp,当时写的很复杂,包括NULL的判断,两个指针是否走完了等等,回来看了一下VS的标准实现,非常简洁,但有几个疑问,望高手解答
标准代码如下
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 );
}
疑问1:
为什么没有判断空值,我用NULL传入的时候,在运行的时候会报错
疑问2:
为什么两个char的比较需要转换成unsigned char后才进行比较