几个内存操作函数使用

几个内存操作函数使用

memset()函数使用

包含在头文件:include <string.h>
函数原型:void *memset(void *s,int c,size_t n) ;
功能:将s的内存区域的前n个字节以参数c填入
参数:

  • s:需要操作的内存s的首地址
  • c:填充的字符,c虽然参数为int,但是必须是unsigned char ,范围为0~255
  • n:指定需要设置的大小

返回值:s的首地址

实例:我们常用此函数来给数组清零

int b[10] = {0};
//经过一系列改变b中数据操作后
//比较笨的办法
int n = sizeof(b)/sizeof(b[0]) ;
for(int i = 0; i<n ;i++){
    b[i] = 0 ;
}
//使用memset一步到位的办法
memset(b,0,sieof(b)) ;
 
//或者对于字符数组来说
char str[10] ;
memset(str,'a',sizeof(str)) ;

memcopy()函数使用

包含在头文件:include <string.h>
函数原型:void *memcpy(void *str1,const void *str2,size_t n) ;
功能:将一个区域的值复制到另一个区域。
参数:

  • str1:指向用于存储复制内容的目标数组,类型强制转换为void *指针。
  • str2:指向要复制的数据源,类型强制转换为void *指针。
  • n:要被复制的字节数

返回值:返回指向目标存储区的str1指针。

实例:

int main(){   
const char src[50] = "hello world !";
char dest[50];   
memcpy(dest, src, strlen(src)+1); 
printf("dest = %s\n", dest); 
return 0 ;
} 

memmove()函数使用

包含在头文件:include <string.h>
函数原型:void *memmove(void *str1,const void *str2,size_t n) ;
功能:将一个区域的值复制到另一个区域。如果目标区域和源区域有重叠的话,memmove()能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和memcpy()函数功能相同。
参数:

  • str1:指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
  • str2:指向要复制的数据源,类型强制转换为 void* 指针。
  • n:要被复制的字节数。

返回值:返回一个指向目标存储区 str1 的指针。

实例:

int main(){
const char dest[] = "oldstring";
const char src[]  = "newstring";
printf("Before memmove dest = %s, src = %s\n", dest, src);
memmove(dest, src, 9);
printf("After memmove dest = %s, src = %s\n", dest, src);
return(0);
}

输出结果:
Before memmove dest = oldstring, src = newstring
After memmove dest = newstring, src = newstring

memcmp()函数使用

包含在头文件:include <string.h>
函数原型:int memcmp(const void *str1, const void *str2, size_t n);
功能:把存储区 str1 和存储区 str2 的前 n 个字节进行比较。
参数:

  • str1:指向内存块的指针。
  • str2:指向内存块的指针。
  • n:要被比较的字节数。

返回值:

  • 如果返回值 < 0,则表示 str1 小于 str2
  • 如果返回值 > 0,则表示 str2 小于 str1
  • 如果返回值 = 0,则表示 str1 等于 str2

实例:

int main (){
   char str1[15];
   char str2[15];
   int ret;
   memcpy(str1, "abcdef", 6);
   memcpy(str2, "ABCDEF", 6);
   ret = memcmp(str1, str2, 5);
   if(ret > 0)
   {
      printf("str2 小于 str1");
   }
   else if(ret < 0) 
   {
      printf("str1 小于 str2");
   }
   else 
   {
      printf("str1 等于 str2");
   }
   return(0);
}

输出结果:str2 小于 str1

posted @ 2020-05-07 17:21  懒人状元  阅读(176)  评论(0编辑  收藏  举报