几个内存操作函数使用
几个内存操作函数使用
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