❤️作者主页:嵌入式_源
❤️作者简介:嵌入式软件工程师,记录学习
❤️点赞 👍 收藏 ⭐再看,养成习惯
1.memcpy
①函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
②这个函数在遇到 '\0' 的时候并不会停下来。
③如果source和destination有任何的重叠,复制的结果都是未定义的。
④不能拷贝存储重叠部分
void * my_memcpy(void* dest,const void * src,size_t num)
{
assert(dest&&src);
void * ret=dest;
while(num--)
{
*(char *)dest=*(char *)src;
dest=(char *)dest+1;
src=(char *)src+1;
}
return ret;
}
2.memmove
①和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
②如果源空间和目标空间出现重叠,就得使用memmove函数处理。
void * my_memmove(void* dest,const void * src,size_t num)
{
assert(dest&&src);
void * ret=dest;
if(dest<src)//从前往后拷
{
while(num--)
{
*(char *)dest=*(char *)src;
dest=(char *)dest+1;
src=(char *)src+1;
}
}
else //从后往前拷
{
while(num--)
{
*((char *)dest+num)=*((char *)src+num);
}
}
return ret;
}