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 会改变事情呢?
嗯...读了你的转储,我可以告诉你 origChar
和 otherChar
都是 '[=12=]'*9999
;当您尝试使用偏移量比较前 10000 个字节时。所以第10000个字节可能有差异。
使用 offset-1
,您比较的是前 9999 个字节,因此比较相等。
因此 "bug" 来自您在第一个“. . .
”中所做的修改第 10000 个值的操作。
我有两个相同大小的 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 会改变事情呢?
嗯...读了你的转储,我可以告诉你 origChar
和 otherChar
都是 '[=12=]'*9999
;当您尝试使用偏移量比较前 10000 个字节时。所以第10000个字节可能有差异。
使用 offset-1
,您比较的是前 9999 个字节,因此比较相等。
因此 "bug" 来自您在第一个“. . .
”中所做的修改第 10000 个值的操作。