0

我正在创建自己的memcmp,我有一个问题。

这是我的代码:

int my_memcmp(void *b, void *c, int len)
{
    unsigned char *p;

    p = b;
    c = b;
    while(len > 0)
    {
        if(b - c != 0)
            return (b - c);
        len--;
        b++;
        c++;
    }
}

int main()
{
    char          *str;
    char          *str2;
    int           i;

    str = strdup("hello");
    str2 = strdup("hellop");
    i = my_memcmp(str, str2, 6);
    printf("%d\n", i);
}

输出错误 6299669 应该是 -112。

我认为错误在于我对 p = b 和 c = b 的转换。那是对的吗?

4

3 回答 3

3
int my_memcmp(void *b, void *c, int len)
{
    unsigned char *p = b;
    unsigned char *q = c;

    while (len > 0)
    {
        if (*p != *q)
            return (*p - *q);
        len--;
        p++;
        q++;
    }
    return 0;
}
于 2013-09-17T14:56:35.400 回答
2

有一些错误,p = b没有一个,因为您必须取消引用指针(使用*)来比较内容。但是因为你不能取消引用void *强制转换是必要的。但是你需要两个unsigned char *p, *qfor band c(这条线c = b根本没有意义),取消引用 p 和 q 来比较和递增pand q。综上所述,你得到的代码......哎呀 Jonathan Leffer 刚刚发布了 :-) 我想我还是会发布这个,因为它提供了一些解释

于 2013-09-17T14:58:22.803 回答
2

b-c当存在差异时, 您的函数将返回。做得好。

如果两个内存块完全相等怎么办?那它返回什么?
(你认为代码在哪里?)当一切都相等时它应该
返回 什么?

于 2013-09-17T15:01:22.090 回答