簡體   English   中英

c strcmp源代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM