2015-04-20 41 views
0

我有同样的大小和两个无符号的字符数组如果检查语句来看看他们是平等的:Memcmp似乎给我一个不正确的返回值

#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 

但是,如果我减1 offset,我得到如下:

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

这对我来说没有任何意义。 GDB基本上说他们是完全平等的,那么为什么会减少offset一个改变的东西?

+0

为什么'offset'不同于'BUFFER_SIZE'? – ouah

+0

offset'的'值意味着改变,但是在这种情况下,'BUFFER_SIZE'和'offset'有10000 – Sky

+2

等效值是什么的'offset'价值? 'BUFFER_SIZE'的价值是什么? – PaulMcKenzie

回答

4

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

使用offset-1,你比较的第一个字节9999,因此平等。

的“错误”,因而来自于你在修改10000'th值第一个“. . .”做一些事情。

+0

是的,看起来你是完全正确的。我做了其他的[9999]'和'p origChar',得到了完全不同的结果。我刚才认为他们是平等的,因为GDB告诉我。 – Sky