一、memset
(1)函数原型:
void *memset(void* ptr,int value,size_t num)
(2)函数模拟实现:
void* My_memset(void* ptr,int n,size_t num)
{
assert(ptr!=nullptr&&num>=0);
char* art=(char*)ptr;
while(num-->0)
{
*art=n;
art++;
}
return ptr;
}
二、拷贝函数
最早出现的是memcpy,但是在从前往后的拷贝过程中,存在不足,经过改进出现了memmove,具体原因如下图:
1、memcpy
(1)函数原型
void* mencpy(void *destination,const void*source,size_t num)
(2)函数模拟实现
void*mencpy(void* des,const void* sou,size_t num)
{
assert(des!=nullptr&&sou!=nullptr&&num>=0);
char* p1=(char*) des;
char* p2=(char*) sou;
while(num--)
{
*p1=*p2;
p1++;
p2++;
}
return des;
}
2、memmove
(1)函数原型
void*memmove(void* des,const void* sou,size_t num)
(2)函数模拟实现
void* memmove(void* des,const void* sou,size_t num)
{
assert(des!=nullptr&&sou!=nullptr&&num>=0);
char* ip1=(char* sou);
char* ip2=(char* des);
if(ip2>ip1&&ip2<ip1+num)
{
while(num--)
{
*ip2+num=*ip1+num;
}
}
else
{
while(num--)
{
*ip2=*ip1;
ip2++;
ip1++;
}
}
return des;
}