首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用c语言构造memcmp函数

用c语言构造memcmp函数
EN

Stack Overflow用户
提问于 2013-09-17 14:48:33
回答 3查看 1.7K关注 0票数 0

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

这是我的代码:

代码语言:javascript
复制
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来表示的,对吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-17 14:56:35

代码语言:javascript
复制
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;
}
票数 3
EN

Stack Overflow用户

发布于 2013-09-17 14:58:22

有一些错误,p = b不是这些错误,因为您必须取消引用指针(使用*)来比较内容。但是,由于您不能取消引用,void *铸造是必要的。但是,对于bc,您需要两个bc( c = b完全没有意义),对于比较和增量pq,需要取消引用p和q。把所有的东西加在一起,你就能得到.乔纳森·莱弗( Jonathan )刚刚发布了一篇文章:-)尽管如此,我还是会发表这篇文章,因为它提供了一些解释

票数 2
EN

Stack Overflow用户

发布于 2013-09-17 15:01:22

当存在差异时,您的函数返回b-c。9~10成熟。

如果两个内存块完全相等呢?那么它还能返回什么呢?

(你认为代码在哪里?)

当一切都相同时,应该返回什么

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18853054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档