memcpy和memmove c/c++实现
当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果是正确的,因此memmove更安全。
//memcpy
void *memcpy(void *dst, const void *src, size_t n)
{
assert(dst != nullptr && src != nullptr);
char *d = (char *)dst;
char *s = (char *)src;
while (n--) {
*(d++) = *(s++);
}
return d;
}
//memmove
void *memmove(void *dst, const void *src, size_t n)
{
assert(dst != nullptr && src != nullptr);
char *d = (char *)dst;
char *s = (char *)src;
if (d < s) { //从头开始复制
while (n--) {
*(d++) = *(s++);
}
} else {
d += n - 1;
s += n - 1;
while (n--) {
*(d--) = *(s--);
}
}
return d;
}