我有两个相同大小的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
呢?
答案 0 :(得分:4)
嗯......读取你的转储,我可以告诉你,origChar
和otherChar
都是'\0'*9999
;当你尝试比较使用偏移时的前10000个字节。所以第10000个字节可能存在差异。
使用offset-1
,您将比较前9999个字节,因此是相等的。
“bug”因此来自您在第一个修改10000'值的“. . .
”中所做的事情。