函数
memxx(Dest,Src,count)
//把buffer所指的内存空间开始,将count个字节大小用ch进行初始化
void *memset(void *buffer,int ch,size_t count);
//比较buffer与buffer2前count个字符是否相同
int memcmp(const void *buffer1,const void *buffer2,size_t count);
//把Src的前count字符赋值到Dest的内存空间
void *memcpy(void void *Dest,const void *Src,size_t count);
strxx与memxx比较区别
1、strxx,只能用于字符串操作,memxx可以用于各种类型
2、strxx对字符串进行操作,memxx主要通过操作地址空间
#include<iostream>
using namespace std;
int main()
{
int ar[10]={1,2,3,4,5,6,7,8,9,10};
int br[6]={12,34,56,78,9,0};
//char s1[100]="Hello World";
//const char *str = "1234";
// strcpy(s1,str);
//sizeof(ar)
memcpy(ar,br,sizeof(int)*6);
//按字节个数进行拷贝
//memcpy(ar,br,6);
return 0;
}
实现
//my_memset(初始化函数)
//处理单位为字节
void *my_memset(void *Dest,int num,size_t count)
{
//判空处理
assert(Dest != NULL);
//参数保护
char *tmpD = (char*)Dest;
while(count-->0)
{
*tmpD++ = num;
}
return Dest;
}
//memcmp()
//作差比较
int memcmp(const void *Dest,const void *Src)
{
assert(Dest != NULL && Src != NULL);
const char *tmpD = (const char *)Dest;
const char *tmpS = (const char *)Src;
int val =0;
while(count-->0)
{
val = *tmpD - *tmpS;
if(val!=0)
break;
tmpD++;
tmpS++;
}
if(val>0)
val=1;
else if(val<0)
val=-1;
//不为1,-1 返回val=0
return val;
}
//memcpy
void *my_memcpy(char *Des,const char *Src,int count)
{
assert(Des != NULL && Src != NULL);
char *Des = (char *)Des;
const char *Src = (const)char *Src;
//后面给前面复制 在前面tmpS 上复制
if(tmpS>=tmpD && tmpD >= tmpS+count)
{
while(count-->0)
{
*tmpD++ = *tmpS++;
}
}
//有内存交集,从后往前面复制
else
{
while(count--)
{
*(tmpD+count)=*(tmpS+count);
}
return tmpD;
}