考虑问题是否全面,是否考虑内存重叠问题返回void *支持链式操作,参数类型是void *以支持任意类型的指针,输入参数加上const修饰,最好加上assert对输入输出指针进行非NULL判断。
void*memmove(void*dest, const void*src, size_t count)
{
assert((src != NULL)&&(dest !=NULL));
char*tmp, *s;
if(dest <=src)
{
tmp = (char*) dest;
s = (char*) src;
while(count--)
*tmp++ = *s++;
}
else
{
tmp = (char*) dest +count;
s = (char*) src +count;
while(count--)
*--tmp = *--s;
}
returndest;
}
dest比src低,则可以从s头开始拷贝; dest比src高,则为了保证s的数据不会被覆盖,所以要从s的末尾开始拷贝