memcmp返回值的大小是什么意思? [英] What does size of the memcmp return value mean?

查看:526
本文介绍了memcmp返回值的大小是什么意思?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚好调试了一个令人讨厌的错误:在我自己的PC(Windows 7 x64,MinGw)上,当比较数组成员时,我的C程序将使用memcmp成功地对数组进行排序.

I just happened to debug an incredibly nasty error: On my own PC (Windows 7 x64, MinGw) my C program would successfully sort an array using the memcmp when comparing array members.

我的函数使用了冒泡排序算法,其骨架看起来像这样:

My function used bubble sort algorithm and it's skeleton would look like this:

void array_sort(ArrayMap *array, char direction) {
    make sure direction is +1 or -1 only
    define some variables
    for(...) {
         for(...) {
             cmpres = memcmp(elm1, elm2, sizeOfElement);
             if (cmpres!=0&&cmpres!=direction)
             {
                 SWAP here
             }
         }
}

现在,在我的PC上,memcmp已返回-101,在另一台计算机上它已返回-505.通过与direction进行比较,我导致排序完全错误.

Now while on my PC, the memcmp has returned -1, 0 and 1 on another it returned -5, 0 and 5. By comparing this with direction I caused the sorting to go totally wrong.

但是我想知道,memcmp的返回值的绝对值(即大小)到底是什么意思?

But I wonder, what does the absolute value (that is, the size) of the return value of memcmp actually mean?

www.cplusplus.com :

返回一个整数值,该整数值指示 内存块的内容:零值表示内容 的两个存储块相等. 大于零的值表示 两个内存块中不匹配的第一个字节有一个 ptr1中的值大于ptr2中的值,就好像评估为无符号字符 价值观小于零的值表示相反的意思.

Returns an integral value indicating the relationship between the content of the memory blocks: A zero value indicates that the contents of both memory blocks are equal. A value greater than zero indicates that the first byte that does not match in both memory blocks has a greater value in ptr1 than in ptr2 as if evaluated as unsigned char values; And a value less than zero indicates the opposite.

没有提及大小,他们只是通过说大于零来确保不要对+ -1出错.

No mention of the size, they just make sure not to be wrong about +-1 by saying greater than zero.

推荐答案

结果幅度特定于实现,因此它没有可移植的含义,您不应依赖它. memcmp()函数只能保证返回正,负或零值.

The result magnitude implementation-specific, so it has no portable meaning and you should not rely on it. The memcmp() function is only guaranteed to return a positive, negative, or zero value.

之所以允许它具有任何值,是因为可以这样定义memcmp():

The reason why it is allowed to have any value is so memcmp() can be defined like this:

// Types changed to "char" to simplify code.
int memcmp(const unsigned char *x, const unsigned char *y, size_t n)
{
    for (size_t i = 0; i < n; i++) {
        int diff = x[i] - y[i];
        if (diff)
            return diff;
}

但是它也可以通过使用例如SSE来实现,并且返回值将有所不同.

But it can also be implemented by using, e.g., SSE, and the return value will be different.

这篇关于memcmp返回值的大小是什么意思?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆