c - 我不明白 strcmp 结果

标签 c strcmp string.h

这是我对 strcmp 的实现,

   #include <stdio.h>
   #include <string.h>

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

  int main()
  {
      char    s1[100] = "bon";
      char    s2[100] = "BONN";
      char    str1[100] = "bon";
      char    str2[100] = "n";
      printf("%d\n", ft_strcmp(s1, s2));
      printf("%d\n", ft_strcmp(str1, str2));
      return (0);
  }

来自 kernighan 和 Ritchie 的书,但我使用了 while 循环,而不是 for,我已经测试了很多次,我的 strcmp 得到与原始 strcmp 相同的结果, 但我不明白结果,我骑了那个人: “strcmp() 和 strncmp() 函数按字典顺序比较以 null 结尾的字符串 s1 和 s2。” 词典编纂是什么意思? “根据字符串 s1 大于、等于或小于字符串 s2,返回大于、等于或小于 0 的整数。” 我理解这部分,但我的问题是它如何得出这样的结果:

32
-12

s1 对我来说看起来 < s2 那么我如何以及为什么得到 32 以及如何进行计算? str1 对我来说看起来 > str2,我如何以及为什么得到 -12 以及如何进行计算。 我用真正的 STRCMP 编译它,我得到了相同的结果..

最后一个问题为什么我需要比较 *s1 和 '\0' 如果没有它就不能正常工作?

谢谢你的回答我很困惑..

最佳答案

1) K&R 正在比较这些字符的 ascii 值,这就是你得到 32 和 -12 的原因,查看 ascii table你会明白的。

2) 如果你不检查\0 ,你怎么知道字符串何时结束?那是 C 字符串终止符。

关于c - 我不明白 strcmp 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29061686/

相关文章:

C - strcmp() 未正常运行

c - 将字符串的单词放入字符串数组 - C 编程

c 在堆上创建一个字符串

c - 使用数据镜像保护数据损坏

C - 如何将结构保存到内存的 malloc 部分?

c - 将字符串数组传递给函数段错误

c++ - 加密给定的文本字符串 - 凯撒密码

c - 处理 C 的 Null 终止指针 (ffi)

c - 同时使用纹理和照明

c - 字符串以换行符结尾的 strcmp