如果源和目的的参数有重叠,memmove能够提供保证的行为,而memcpy则不能提供这样的保证行为,因此可以实现得更加有效率。如果对你的程序有疑问,最好使用memmove。
实现memmove()好像很容易,只需要额外的检测即可对重叠参数提供有效的保证。
void *memove(void *dst,void *src,size_t n)
{
register char *dp = dst;
register char const *sp = src;
if(dp<sp){
while(n-->0){
*dp++ = *sp++;
}
}
else{
dp+=n;
sp+=n;
while(n-->0)
{
*--dp = *--sp;
}
}
return dest;
}