编写函数,模拟实现memmove
程序代码如下:
#include <stdio.h>
#include <assert.h>
void *MemMove(void *dest, const void *src, size_t count)
{
assert(dest);
assert(src);
void *ret = dest;
if (dest <= src)
{
while (count--)
{
*(char *)dest = *(char *)src;
dest = (char *)dest + 1;
src = (char *)src + 1;
}
}
else
{
dest = (char *)dest + count - 1;
src = (char *)src + count - 1;
while (count--)
{
*(char *)dest = *(char *)src;
dest = (char *)dest - 1;
src = (char *)src - 1;
}
}
return ret;
}
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int i = 0;
void * r = MemMove(arr + 2, arr, 4 * sizeof(int));
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
程序运行结果如下:

本文介绍了一个用C语言编写的memmove函数模拟实现。该函数能够处理源和目标区域重叠的情况,并通过两个不同的指针移动方向来分别处理源起始地址小于目标起始地址和大于目标起始地址两种情况。此外,还提供了一个使用示例。
1311

被折叠的 条评论
为什么被折叠?



