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”之间存在差异,从而终止循环。
所以不,代码对我来说是正确的。