该功能被发现在这里。这是实现strcmp
:
int strcmp(const char* s1, const char* s2)
{
while (*s1 && (*s1 == *s2))
s1++, s2++;
return *(const unsigned char*)s1 - *(const unsigned char*)s2;
}
我了解除最后一行以外的所有内容,简而言之,最后一行发生了什么?
return *(const unsigned char*)s1-*(const unsigned char*)s2;
OP:总之,最后一行是什么?
答:比较第一个潜在的字符串差异。两者均按规范要求chars
进行引用unsigned char
。将2提升到,int
然后返回差额。
笔记:
1返回值的符号(<0、0,> 0)是最有意义的部分。这是C规范指定的唯一部分。
2在某些系统char
上signed
(更常见)。在其他方面,char
是unsigned
。定义最后一个比较的“符号”可促进可移植性。请注意,fgetc()
获取字符为unsigned char
。
3除了字符串以a结尾之外\0
,所采用的字符编码(例如ASCII-最常见)在二进制级别没有区别。如果char
两个字符串中的前一个s的值分别为65和97,则即使字符编码为非ASCII,第一个字符串也将小于第二个字符串。OTOH,strcmp("A", "a")
当字符编码为ASCII时将返回负数,但对于其基础值和顺序未由C定义的情况,可能以不同的字符编码返回正数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句