微软源码:
int strcmp(const char* str1, const char* str2)
{
int ret = 0;
while(!(ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1)
{
str1++;
str2++
}
if (ret < 0)
{
return -1;
}
else if (ret > 0)
{
return 1;
}
return 0;
}
主要分析:while(!(ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1)
(unsigned char*)str1-*(unsigned char*)str2 中主要是两个知识点:
Q1:为什么要用 unsigned char*?
A1:因为传入的参数是有符号数,其ASCII符号为-128~127,而字符串中的ASCII值是没有负值的,即无符号字符串ASCII值为0~255,可能是方便比较,没有特别明白,为什么这样操作!
Q2:为什么相减?
A2:相减的结果如果大于0,那么str1>str2;如果小于0,那么str1 < str2,如果等于0,则判断 *str1是否为空,若不为空,则说明当前字符是一样的,比较下一个字符。