繁体   English   中英

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

[英]Memcmp seems to be giving me an incorrect return value

我有两个大小相同的无符号字符数组,以及一个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会改变事情呢?

好吧...阅读您的转储,我可以告诉您origCharotherChar都是'\\0'*9999 ; 当您尝试使用偏移量比较前10000个字节时。 因此,第10000个字节中可能存在差异。

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

“虫”,因而来自于你在第一次做什么“ ”可修改10000'th值。 . . .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM