memcmp返回值,空格不一致

时间:2018-11-29 09:44:22

标签: c libc memcmp

这是一个小的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

两个函数调用之间是否有区别? 感谢您的帮助。

clang版本:

Apple LLVM版本9.0.0(clang-900.0.39.2) 目标:x86_64-apple-darwin16.7.0

1 个答案:

答案 0 :(得分:1)

根据POSIX文档memcmp() internally uses unsigned char

我想你的charsigned

我的猜测(如果我正确解释了https://godbolt.org/z/iOIbil)是memcmp() 带有文字的内容不会调用标准库中的代码,并且编译器本身将替换调用比较-10'\200'1 + 0b1111111);通过变量进行memcmp()调用会调用标准库中的代码,该库会将原始签名的char转换为unsigned char并比较1280