gpt4 book ai didi

c++ - Memcmp 似乎给我一个不正确的返回值

转载 作者:太空宇宙 更新时间:2023-11-04 06:23:45 27 4
gpt4 key购买 nike

我有两个相同大小的 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 会改变事情呢?

最佳答案

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

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

因此,“错误”来自于您在第一个“...”中所做的修改第 10000 个值的操作。

关于c++ - Memcmp 似乎给我一个不正确的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29758889/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com