您的位置:首页 > 编程语言 > C语言/C++

C++实现内存复制函数(memmove解决内存重叠)

2016-04-16 22:23 369 查看
memmove函数用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。

例如将ABC段复制到BCD段时,目标区域和源区域有重叠,当A段复制到B段时,B段发生损坏,无法再将完整的B段复制。



因此发生存在区域重叠时采用逆向复制

void* my_memmove(void*dest, const void* src, size_t n)
{
char*_dest = (char*)dest;
const char*_src = (char*)src;
if (_dest > _src&&_dest < _src + n)//发生区域重叠
{
while (n--)
{
*_dest--= *(_src+n);//逆向复制
}
}
else//未发生区域重叠 正向复制
{
while (n--)
{
*_dest++ = *_src++;
}
}
return dest;
}
int main()
{
int s[4] = {1,2,3,4};
for (int i = 0; i < 4; i++)
{
cout << s[i] << "";
}
cout << endl;
my_memmove(s+2, s + 3,1*sizeof(int));
for (int i = 0; i < 4; i++)
{
cout << s[i]<<"";
}
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息