C语言数组比较相等memcmp,C语言:模拟实现memcmp,试比较memcmp与strcmp,strncmp的区别…

  • Post author:
  • Post category:其他

模拟实现内存比较函数memcmp:

该函数与strcmp有相似之处,都可用于字符串比较是否相同,若相同,则返回0值。若前者大于后者,则返回大于0的整型值,否则返回小于0的整型值。

区别在于:

strcmp只能比较字符串,memcmp是内存比较函数,原则上是比较内存的,但其实真正实现时并不是所有都可以比较,例如float,但我们至少可以比较字符串以及int型。而对于strcmp,strncmp的比较:str1, str2 为需要比较的两个字符串,n为要比较的字符的数目,而函数strcmp()做不到,strcmp()可以比较全部字符串(因为它找字符串结束标志‘\0’)。

代码如下:

#define _crt_secure_no_warnings 1

#include

#include

#include

int my_memcmp(const void *p1, const void *p2, size_t count)

{

assert(p1);

assert(p2);

char *dest = (char *)p1;

char *src = (char *)p2;

while (count && *dest == *src)

{

count–;

dest++;

src++;

}

if (count == 0)

return 0;

else

return *dest – *src ;

}

int main()

{

/*int arr1[] = { 1, 3, 20, 5 }; //比较整型

int arr2[] = { 1, 3, 10, 7 };*/

char arr1[] = “hello”; //比较字符串

char arr2[] = “hello world”;

int len = sizeof(arr1) / sizeof(arr1[0]);

int ret = my_memcmp(arr1, arr2, 12);

printf(“%d”, ret);

system(“pause”);

return 0;

}