memcmp 与 memset

memcmp

函数介绍:

memcmp 与 memset_第1张图片

主要功能:

比较内存区域ptr1和ptr2的前num个字节。 

与字符函数strcmp功能相似。

返回值

当buf1

当buf1=buf2时,返回值=0

当buf1>buf2时,返回值>0

举例:

int main()
{
   int arr1 = {1, 2, 3, 4, 5 };
   int arr2 = {1, 3, 2 };
   int ret = memcmp(arr1, arr2, 12);
   printf("%d\n", ret);
   return 0;
}

输出结果:

 

 解析:

 int arr1 = {1, 2, 3, 4, 5 }; 

内存存储:01 00 00 00  02 00 00 00  03 00 00 00  04 00 00 00  05 00 00 00

int arr2 = {1, 3, 2 };

内存存储:01 00 00 00  03 00 00 00  02 00 00 00 

由于num = 12   数据类型是int 

所以比较的是前三个元素的字节

arr1:01 00 00 00  02 00 00 00  03 00 00 00

arr2:01 00 00 00  03 00 00 00  02 00 00 00 

情况很明显,arr2的第五个字节比arr1大,所以返回值应该是小于0的数

结论:

该函数是按字节比大小的,如果s1,s2为字符串时候memcmp(s1,s2,1)就是比较s1和s2的第一个字节的ascII码值 。只有在num个字节完全相等的情况下才会返回0。

memset

原型:

 void * memset ( void * ptr, int value, size_t num );

主要功能:

memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。

参数:

ptr 是所要改变的内存对象的首地址

value是所要改变成的值

num表示的是字节数,只要改变多少个字节

举例:

int main()
{
  char arr[] = "hello bit";
  memset(arr,'x', 5);
  printf("%s\n", arr);
  return 0;
}

 输出结果:

memcmp 与 memset_第2张图片

注意事项:

memset是改变或者设置内存值,并不是改变一个元素值,value是字节中发生了变化!

错误的例子:

int main()
{
  int arr[10] = {0};
  memset(arr, 1, 40);
  for(int i = 0 ; i < 10 ; i++)
  {
        printf("%d\n",arr[i]);
  }
  return 0;
 
}

以上代码的目的是为了给arr数组赋值,将arr数组中的10个元素全部赋值为1,但这样真的是正确的吗? 

答案是错误的!

memcmp 与 memset_第3张图片 

memset改变或者说设置的是内存,而不是元素,所要是内存中的字节发生了变化,这40个字节全部变成了01。 

你可能感兴趣的:(C语言,函数,字符串,c语言)