内存重叠:拷贝的目的地址在源地址范围内。所谓内存重叠就是拷贝的目的地址和源地址有重叠。
其中void* strcpy(void * desc, const void *src)
void * memcpy(void *desc, const void * src, int count)
均为对内存重叠做出处理。
void *memmove(void *desc, const void* src, int count);
对内存重叠做出了处理。
以上均为系统库函数,#include<string.h>
对内存重叠理解源码:
void *MyMemCpy(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);
}