Is this the only return value for strcmp() in C?

前端 未结 4 770
小蘑菇
小蘑菇 2021-01-06 17:47

I\'m learning C, and am currently studying String Handling. From where I\'m studying, strcmp() is defined as-

This is a function which c

4条回答
  •  花落未央
    2021-01-06 18:16

    Here is a simple implementation of strcmp() in C from libc from Apple:

    int
    strcmp(const char *s1, const char *s2)
    {
        for ( ; *s1 == *s2; s1++, s2++)
            if (*s1 == '\0')
                return 0;
        return ((*(unsigned char *)s1 < *(unsigned char *)s2) ? -1 : +1);
    }
    

    FreeBSD's libc implementation:

    int
    strcmp(const char *s1, const char *s2)
    {
        while (*s1 == *s2++)
            if (*s1++ == '\0')
                return (0);
        return (*(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1));
    }
    

    Here is the implementation from GNU libc, which returns the difference between characters:

    int
    strcmp (p1, p2)
         const char *p1;
         const char *p2;
    {
      const unsigned char *s1 = (const unsigned char *) p1;
      const unsigned char *s2 = (const unsigned char *) p2;
      unsigned char c1, c2;
    
      do
        {
          c1 = (unsigned char) *s1++;
          c2 = (unsigned char) *s2++;
          if (c1 == '\0')
        return c1 - c2;
        }
      while (c1 == c2);
    
      return c1 - c2;
    }
    

    That's why most comparisons that I've read are written in < 0, == 0 and > 0 if it does not need to know the exact difference between the characters in string.

提交回复
热议问题