strcmp函数这么写有什么漏洞?请指正

来源:百度知道 编辑:UC知道 时间:2024/06/26 03:58:00
int strcmp(const char *s1,const char *s2)
{
while(!(*++s1 - *++s2 ) && *s1 && *s2);
if(*s1 == '\0' || *s2 == '\0' )
s1 --,s2 --;
if(*s1 > *s2)
return 1;
else if(*s1 < *s2)
return -1;
else
return 0;
}
我不知道如何自测才能知道我这个函数一点问题都没有,我自己看不出来,请大家看一下

函数有很多问题:while(!(*++s1 - *++s2 ) && *s1 && *s2);要改为while(*s1 && *s2 && *s1++==*s2++);*s1和*s2一定要写在前面,否则第一个字符比较不出来。减法运算不好理解,所以改为*s1++==*s2++);
后面的语句if(*s1 == '\0' || *s2 == '\0' ) s1 --,s2 --;也要删除。
所以,最后形式为:
int strcmp(const char *s1,const char *s2)
{
while(*s1 && *s2 && *s1++==*s2++);
if(*s1>*s2)
return 1;
else if(*s1<*s2)
return -1;
else
return 0;
}