模拟实现 strcmp
思路:
//变量相减 (其中类型需要强制转换)
//差给ret
// 再对取非
//再和*dst进行与运算
!(ret = ((unsigned char)src - (unsigned char)dst) )
&& dst) //指针变量src所指向的字符值(即src)减去
//指针变量dst所指向的字符值(即dst)差值赋给ret,再取非运算,最后与dst进行与运算;
unsigned char* 是强制类型转换
int my_strcmp(const char*src, const char* dst)
{
int ret = 0;
assert(src != NULL);
assert(dst != NULL);
while (!(ret = (*(unsigned char*)src - *(unsigned char*)dst) )
&& *dst)//讲解见上面
{
++src;
++dst;
}
if (ret < 0)
ret = -1;
else if (ret > 0)
ret = 1;
return (ret);
}
int main()
{
char src[] = "abcdef" ;
char dst[] = "abcd" ;
char ret = my_strcmp(src, dst);
printf("%d\n", ret);
return 0;
}
结果: