在c中构建memcmp函数

时间:2013-09-17 14:48:34

标签: c pointers memory

我正在创建自己的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。这是对的吗?

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

有一些错误,p = b不是它们,因为您必须取消引用指针(使用*)来比较内容。但是因为你不能解除引用void *铸造是必要的。但是unsigned char *p, *qb需要两个c(行c = b根本没有意义),取消引用p和q用于比较和增加pq。总而言之,你得到的代码......哎呀Jonathan Leffer刚刚发布:-) 我想我会发布这个,因为它提供了一些解释

答案 2 :(得分:2)

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

如果两个内存块完全相同怎么办?它回归了什么?
(您认为该代码在哪里?)
什么 它会在一切都相等时返回?