我需要为我的UNI编写一个代码,在其中我必须接收一些数据的两个数组(可能是int数组或char数组,甚至浮动数组),并比较这两个数组中指针中的n个字符,也就是说,到目前为止,我还停留在这个*注释中--我需要编写自己的memcmp:
int byte_compare(const void *b1,const void *b2,size_t len)
{
char *q1 = (char *)p1;
char *q2 = (char *)p2;
int i;
for (i=0; i<=len*sizeof(*q1) ;i++)
{
if(*q1++ != *q2++)
return 1;
}
return 0;
}
int main()
{
char str1[] = "abcheya";
char str2[] = "gtyheyb";
printf((byte_compare(str1[3],str2[3],3))?"not equal\n":"equal\n");
/*the output is equal*/
int arr1[]={1,2,3,4};
int arr2[]={1,2,7,59};
printf((byte_compare(arr1[0],arr2[0],3))?"not equal\n":"equal\n");
/*the output is also equal although it is not supposed to be*/
return 0;
}当我比较字符串时,它工作得很好,但是当我尝试比较int或浮动时,它不能正常工作,请帮助我。
发布于 2018-04-27 07:13:48
编辑:编写自己的memcmp函数
int byte_compare(const void *b1,const void *b2,size_t len)
{
if (len != 0) {
register const unsigned char *p1 = b1, *p2 = b2;
do {
if (*p1++ != *p2++)
return (*--p1 - *--p2);
} while (--len != 0);
}
return (0);
}发布于 2018-04-27 07:19:28
在传递len参数时,应该计算比较字节长度。因此,您可以使用模板。
template<typename T>
int byte_compare(const T *b1, const T *b2, size_t len)
{
return memcmp(b1, b2, len * sizeof(T));
}编辑注意:问题是编辑的,答案没有更多的意义。它使用C++,不适用于C类课程。我仍然是对其使用C++没有限制的答案。
发布于 2018-04-27 07:29:40
您需要传递对象的大小,而不是它们的长度:
int byte_compare(const void *b1, const void *b2, size_t size)
{
return memcmp(b1, b2, size);
}https://stackoverflow.com/questions/50057034
复制相似问题