簡體   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