c strcmp源代码

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 ; return ret; } 

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

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

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

不,没有这样的问题,只要s2被’\ 0’终止。

由于零终止,s1被隐式保护。 零终止将导致“*(unsigned char )s1”和“ (unsigned char *)s2”之间存在差异,从而终止循环。

所以不,代码对我来说是正确的。