下面是一个小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
我想你的charsigned
我的猜测(如果我正确地解释了https://godbolt.org/z/iOIbil)是,带文本的memcmp()不会调用标准库中的代码,编译器本身将替换比较-10'\200'1 + 0b1111111)的调用;带变量的memcmp()调用调用标准库中的代码,该代码将原始带符号的字符转换为unsigned char,并比较1280

关于c - memcmp返回值,空格不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53536001/

10-11 23:08