下面是一个小C代码,用于突出显示memcmp返回值的问题:
char *str1 = "\200";
char *str2 = "\0";
int val1 = memcmp(str1, str2, 2);
int val2 = memcmp("\200", "\0", 2);
printf("val 1 : %d \n",val1);
printf("val 0 : %d \n",val2);
标准输出是:
val 1 : 128
val 2 : -1
有没有解释这两个函数调用之间的区别?
谢谢你的帮助。
叮当声版本:
苹果LLVM 9.0.0版(clang-900.0.39.2)
目标:x86_64-apple-darwin16.7.0
最佳答案
根据POSIX文档,memcmp()
internally uses unsigned char
。
我想你的char
是signed
。
我的猜测(如果我正确地解释了https://godbolt.org/z/iOIbil)是,带文本的memcmp()
不会调用标准库中的代码,编译器本身将替换比较-1
和0
('\200'
是1 + 0b1111111
)的调用;带变量的memcmp()
调用调用标准库中的代码,该代码将原始带符号的字符转换为unsigned char
,并比较128
和0
。
关于c - memcmp返回值,空格不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53536001/