Memcmp似乎给了我一个不正确的返回值

时间:2015-04-20 21:38:41

标签: c++ c memory gdb

我有两个相同大小的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,'\0',BUFFER_SIZE);
    memset(otherChar,'\0',BUFFER_SIZE);

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

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

(gdb) p origChar
$1 = '\000' <repeats 9999 times>
(gdb) p otherChar
$2 = '\000' <repeats 9999 times>...
(gdb) p memcmp(otherChar,origChar,offset)
$3 = 1

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

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

这对我没有任何意义。 GDB基本上说它们完全相同,那么为什么会通过一个改变来减少offset呢?

1 个答案:

答案 0 :(得分:4)

嗯......读取你的转储,我可以告诉你,origCharotherChar都是'\0'*9999;当你尝试比较使用偏移时的前10000个字节。所以第10000个字节可能存在差异。

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

“bug”因此来自您在第一个修改10000'值的“. . .”中所做的事情。