2

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

有没有说明这两个函数调用之间的区别?谢谢你的帮助。

铿锵版本:

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

4

1 回答 1

2

根据 POSIX 文档,memcmp()内部使用unsigned char.

我想你charsigned

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

于 2018-11-29T12:18:03.730 回答