memmove()函数
简介
memmove()函数是C语言中的一个库函数,用于将一块内存中的数据复制到另一块内存中,即内存块拷贝。
memmove()函数能够处理源内存和目标内存重叠的情况。如果源内存和目标内存重叠,memmove()函数会先将源内存中的数据复制到一个临时缓冲区,然后再把数据拷贝到目标内存中,确保数据的准确性。
模拟实现memmove()函数(优化版)
dest是目标内存的指针,src是源内存的指针,size是要复制的字节数;源地址和目的地址的类型设置为无类型指针(void*)便于函数可以处理任意类型的数据,源地址指针加const定义为常量指针,防止拷贝的过程中将来源的内容不慎修改
注意:目标内存的起始地址在源地址后面时为避免覆盖未复制的数据,从源内存块的的末尾开始复制
void* memmove(void *destStr,const void *str,size_t size)
char *pDestStr=(char*)destStr;
char*pStr=(char*)Str;
if(pStr>pDestStr)//目标内存块的起始地址在源内存地址前面
{
for(size_t i=0;i<size;++i)
{
*(pdestStr[i])=*(pStr[i]);
}
}
else//目标内存块的起始地址在源内存地址后面
{
for(int i=size-1;i>=0;--i)
{
*(pDestStr[i])=*(pStr[i]);
}
}
return destStr;//返回拷贝后的目的地内存块的起始地址
}