【发布时间】:2010-12-21 09:07:20
【问题描述】:
int strcmp(const char *s1, const char *s2)
{
int ret = 0;
while (!(ret = *(unsigned char *) s1 - *(unsigned char *) s2) && *s2) ++s1, ++s2;
if (ret < 0)
ret = -1;
else if (ret > 0)
ret = 1 ;
return ret;
}
我从http://www.jbox.dk/sanos/source/lib/string.c.html查看代码
我想有一些问题。
如果strlen(s2)>strlen(s1),则++s1 可能超出范围。不幸的是,然后函数返回错误。
【问题讨论】:
-
我确实看到链接中的代码的一个小问题是 strcmp 和 strncmp 返回的结果不同。 strcmp 不必要地将结果限制在 -1..+1 范围内,而 strncmp 则返回完整的差异。
标签: c