我正在创建自己的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来表示的,对吗?
发布于 2013-09-17 14:56:35
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-17 14:58:22
有一些错误,p = b不是这些错误,因为您必须取消引用指针(使用*)来比较内容。但是,由于您不能取消引用,void *铸造是必要的。但是,对于b和c,您需要两个b和c( c = b完全没有意义),对于比较和增量p和q,需要取消引用p和q。把所有的东西加在一起,你就能得到.乔纳森·莱弗( Jonathan )刚刚发布了一篇文章:-)尽管如此,我还是会发表这篇文章,因为它提供了一些解释
发布于 2013-09-17 15:01:22
当存在差异时,您的函数返回b-c。9~10成熟。
如果两个内存块完全相等呢?那么它还能返回什么呢?
(你认为代码在哪里?)
当一切都相同时,应该返回什么?
https://stackoverflow.com/questions/18853054
复制相似问题