我正在创建自己的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。这是对的吗?
答案 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, *q
和b
需要两个c
(行c = b
根本没有意义),取消引用p和q用于比较和增加p
和q
。总而言之,你得到的代码......哎呀Jonathan Leffer刚刚发布:-)
我想我会发布这个,因为它提供了一些解释
答案 2 :(得分:2)
当存在差异时,您的函数会返回b-c
。 干得好。
如果两个内存块完全相同怎么办?它回归了什么?
(您认为该代码在哪里?)
什么 它会在一切都相等时返回?