您的位置:首页 > 其它

模拟实现memmove

2016-06-04 20:22 316 查看
memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。

如果没有重叠,它可以像memcpy效果一样,但是效率没有memcpy高。

函数实现:

#include<stdio.h>
#include<assert.h>

void *my_memmove(void *dest, void *str, size_t len)
{
assert(dest);
assert(str);
char *pdest = (char *)dest;
char *pstr = (char*)str;
if ((pstr < pdest) && (pdest < pstr + len))  //源和目标有重叠的情况,从后往前拷贝
{
while (len--)
{
*(pdest + len) = *(pstr + len);
}
}
else            //没有重叠,从前往后拷贝
{
while (len--)
{
*pdest = *pstr;
pdest++;
pstr++;
}
}
return dest;
}
测试:

int main()
{
int i = 0;
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int size = sizeof(arr) / sizeof(arr[0]);
my_memmove(arr, arr + 3, 8);  //注意这里的长度是以一字节为单位的
for (i = 0; i <size ; i++)
{
printf("%d ", arr[i]);
}
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: