1. 函数的调用形式
void *memmove(void *dst, const void *src, ize_t count)
2.功能
- memmove函数的行为和memcpy差不多,只是它的源和目标操作数可以重叠。
- memmove通常无法使用某些机器所提供的特殊的字节-字符串处理指令来实现,所以它可能比memcpy慢一些。
- 如果源和目标参数真的可能存在重叠,就应该使用memmove。
3.实现
#include<stdio.h>
int main()
{
int arr[9] = { 1,2,3,4,5,6,7,8,9 };
int i = 0;
memmove(arr + 2, arr, 16);
for (i = 0; i < 9; i++)
{
printf("%d", arr[i]);
}
return 0;
}
4.模拟实现
#include<stdio.h>
#include<assert.h>
void *my_memmove(void *dest, const void *src, size_t count)
{
void *ret = dest;
assert(dest != NULL);
assert(src != NULL);
if (dest < src)//前->后
{
while (count--)
{
*(char *)dest = *(char *)src;
dest = (char *)dest + 1;
src = (char *)src + 1;
}
}
else//后->前
{
while (count--)
{
*((char *)dest + count) = *((char *)src + count);
}
}
return ret;
}
int main()
{
int arr[9] = { 1,2,3,4,5,6,7,8,9 };
int i = 0;
my_memmove(arr + 2, arr, 16);
for (i = 0; i < 9; i++)
{
printf("%d", arr[i]);
}
return 0;
}