在这个函数中,为什么我们需要使用 unsigned char 进行转换?由于两者的范围都是“255”,我们不能用 char 进行转换并得到相同的结果吗?为什么选择无符号字符?
假设没有等于-126的ASCII码。我对 255 也可以这么说;两者都会给你一个垃圾值。如果你告诉我我们选择它是因为我们正在处理字节,并且它的最大值是 255,我会说我们只是在比较。因此,在 s1 和 s2 中,结果将始终是 ASCII 代码。为什么我们选择unsigned char?
#include "libft.h"
int ft_strncmp(const char *s1, const char *s2, size_t n)
{
size_t i;
i = 0;
if (n == 0)
return (0);
while (i < n && (s1[i] != '\0' || s2[i] != '\0'))
{
if (s1[i] != s2[i])
return ((unsigned char)s1[i] - (unsigned char)s2[i]);
i++;
}
return (0);
}
标准库执行 string 函数,就好像字符是
unsigned char
。
由于
char
可能是 signed 或 unsigned,当 char
之一为负数时,减去 2 unsigned char
的结果与 2 char
的结果不同。因此,转换为 unsigned char
会像 C 库一样形成差异。