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

C语言:模拟实现memmove

2015-11-18 23:31 302 查看
模拟实现内存移动函数memmove:
我的代码是关于将字符数组
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
中的3,4,5,6移动到5,6,7,8位置处。这个内存移动涉及到解决了内存重叠的问题,而memcmp()函数http://10740184.blog.51cto.com/10730184/1714516没有解决。为防止覆盖,若不内存重叠时就正常如strcpy拷贝,否则就从后往前拷贝。size-t count指的是字节数,4个整型的元素字节数。src =src +8,指的是前面有两个整形的字节数。dest指的是前面有四个整形的字节数。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

void *my_memmove(void *p1, void *p2, size_t count)
{
assert(p1);
assert(p2);
char *dest = (char *)p1;
char *src = (char *)p2;
dest = dest + 16;
src = src + 8;
if ((src < dest) && (dest < src + count))
{
while (count--)
{
*(dest + count) = *(src + count);
}
}
else
{
while (count--)
{
*dest = *src;
src++;
dest++;
}
}
return p2;
}

int main()
{
int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int i = 0;
int len = sizeof(arr1) / sizeof(arr1[0]);
int *ret = my_memmove(arr1, arr1, 16);
for (i = 0; i < len; i++)
{
printf("%d ", *(ret + i));
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息