c strcmp源代码

law*_*rao 3 c

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;
}
Run Code Online (Sandbox Code Playgroud)

我查看了以下代码:http://www.jbox.dk/sanos/source/lib/string.c.html

我想有一些问题.如果strlen(s2)>strlen(s1),则++s1可能超出范围.不幸的是,然后函数返回错误.

Sta*_*asM 7

不,没有这样的问题,因为循环仅在*s1和*s2相等*s2不为0时继续.如果s1更短,一旦它到达s1末尾的\ 0,则相等条件将中断并且循环会停止.