编程实现: void * memmove( void* dest, const void *src, size_t count );
参数: dest 指向复制目的对象的指针 。
src 指向复制来源对象的指针 。
count 要复制的字节数 。
返回值: 返回 dest 的副本。(真正有意义的地址是dest本身)
void* MyMemMove(void* dst, const void* src, int count)
{
assert(dst);
assert(src);
void* ret = dst;
if (dst <= src || (char*)dst >= ((char*)src + count));
{
while (count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
}
else
{
dst = (char*)dst + count - 1;
src = (char*)src + count - 1;
while (count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst - 1;
src = (char*)src - 1;
}
}
return ret;
}
测试用例
void Test()
{
char p1[256] = "hello,world!";
char p2[256] = { 0 };
MyMemMove(p2, p1, strlen(p1) + 1);
printf("%s\n", p2);
MyMemMove(NULL, p1, strlen(p1) + 1);
MyMemMove(p2, NULL, strlen(p1) + 1);
MyMemMove(p1 + 1, p1, strlen(p1) + 1);
printf("%s\n", p1);
MyMemMove(p1, p1 + 1, strlen(p1) + 1);
printf("%s\n", p1);
}