①memcpy()和memmove()都是C语言中的标准库函数,定义在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:
void *memcpy(void *dst, const void *src, size_t count); void *memmove(void *dst, const void *src, size_t count);
他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。
②内存重叠有以下两种情况
③memcpy()和memmove()实现
void* memcpy(void* dst, const void* src, size_t n) { char* dstPtr = (char*)dst; char* srcPtr = (char*)src; if((dstPtr != NULL) && (srcPtr != NULL) && (n > 0)) { while(n--) { *dstPtr++ = *srcPtr++; } } return dst; }
void* memmove(void* dst, const void* src, size_t n) { char* dstPtr = (char*)dst; char* srcPtr = (char*)src; if((dstPtr != NULL) && (srcPtr != NULL) && (n > 0)) { if((srcPtr < dstPtr) && (dstPtr < (srcPtr + n))) { do { *(dstPtr + n - 1) = *(srcPtr + n - 1); }while(--n); } else { while(n--) { *dstPtr++ = *srcPtr++; } } } return dst; }