这是我对 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/