[英]c strcmp source code
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
可能超出范圍。 不幸的是,然后函數返回錯誤。
不,沒有這樣的問題,因為循環僅在* s1和* s2相等且 * s2不為0時繼續。如果s1更短,一旦它到達s1末尾的\\ 0,則相等條件將中斷並且循環會停止。
不,沒有這樣的問題,只要s2被'\\ 0'終止。
由於零終止,s1被隱式保護。 零終止將導致“*(unsigned char )s1”和“ (unsigned char *)s2”之間存在差異,從而終止循環。
所以不,代碼對我來說是正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.