发现这个函数here。这是一个实现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:简而言之,最后一行发生了什么?
A:比较第一个电位串差。两个都chars
被引用为unsigned char
根据规范的要求。 2人晋升为int
并返回差额。
Notes:
1 返回值的符号(0)是最有意义的部分。它是 C 规范指定的唯一部分。
2 在某些系统上char
is signed
(比较普遍;普遍上)。在其他人身上,char
is unsigned
。定义最后一个比较的“符号性”可以提高可移植性。注意fgetc()
获取字符为unsigned char
.
3 除此之外,字符串以 a 结尾\0
,所采用的字符编码(如 ASCII - 最常见)在二进制级别上没有区别。如果第一个char
如果两个字符串的值分别为 65 和 97,则第一个字符串将小于第二个字符串,即使字符编码是非 ASCII。奥托,strcmp("A", "a")
当字符编码为 ASCII 时将返回负数,但在不同的字符编码中可能返回正数,因为它们的基础值和顺序不是由 C 定义的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)