Memcmp 似乎给我一个不正确的 return 值

Memcmp seems to be giving me an incorrect return value

我有两个相同大小的 unsigned char 数组和一个检查它们是否相等的 if 语句:

    #define BUFFER_SIZE 10000

    unsigned char origChar[BUFFER_SIZE];
    unsigned char otherChar[BUFFER_SIZE];

    //Yes, I know this is unnecessary

    memset(origChar,'[=11=]',BUFFER_SIZE);
    memset(otherChar,'[=11=]',BUFFER_SIZE);

    . . .
    if(memcmp(origChar,otherChar,offset))
    {
        . . .
    }

当我检查 gdb 中的两个数组时,我得到以下信息:

(gdb) p origChar
 = '[=12=]0' <repeats 9999 times>
(gdb) p otherChar
 = '[=12=]0' <repeats 9999 times>...
(gdb) p memcmp(otherChar,origChar,offset)
 = 1

但是,如果我将 offset 减 1,我会得到以下结果:

(gdb) p memcmp(otherChar,origChar,offset-1)
 = 0
(gdb) p offset
 = 10000

这对我来说真的没有任何意义。 GDB 基本上说它们是完全相等的,那么为什么将 offset 递减 1 会改变事情呢?

嗯...读了你的转储,我可以告诉你 origCharotherChar 都是 '[=12=]'*9999 ;当您尝试使用偏移量比较前 10000 个字节时。所以第10000个字节可能有差异。

使用 offset-1,您比较的是前 9999 个字节,因此比较相等。

因此 "bug" 来自您在第一个“. . .”中所做的修改第 10000 个值的操作。