优化的strcmp实施

科迪·史密斯

该功能被发现在这里这是实现strcmp

int strcmp(const char* s1, const char* s2)
{
    while (*s1 && (*s1 == *s2))
        s1++, s2++;
    return *(const unsigned char*)s1 - *(const unsigned char*)s2;
}

我了解除最后一行以外的所有内容,简而言之,最后一行发生了什么?

chux-恢复莫妮卡
return *(const unsigned char*)s1-*(const unsigned char*)s2;

OP:总之,最后一行是什么?

答:比较第一个潜在的字符串差异。两者均按规范要求chars进行引用unsigned char将2提升到,int然后返回差额。


笔记:

1返回值的符号(<0、0,> 0)是最有意义的部分。这是C规范指定的唯一部分。

2在某些系统charsigned(更常见)。在其他方面,charunsigned定义最后一个比较的“符号”可促进可移植性。请注意,fgetc()获取字符为unsigned char

3除了字符串以a结尾之外\0,所采用的字符编码(例如ASCII-最常见)在二进制级别没有区别。如果char两个字符串中的前一个s的值分别为65和97,则即使字符编码为非ASCII,第一个字符串也将小于第二个字符串。OTOH,strcmp("A", "a")当字符编码为ASCII时将返回负数,但对于其基础值和顺序未由C定义的情况,可能以不同的字符编码返回正数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章