1、void* memcpy(void*dst,void const *src,size_t length)
从src的起始位置起复制length个字节到dst的内存起始位置,如果src和dst以任何形式出现重叠,结果未定义。
void* my_memcpy(void *dest, void const *src, size_t length) { assert(dest!= NULL&&src != NULL); char *pdest = (char*)dest; const char *psrc = (char*)src; while (length--) { *pdest++ = *psrc++; } return dest; }
2、void* memmove(void*dst,void const *src,size_t length)
从src的起始位置起复制length个字节到dst内存起始的位置,如果源和目标参数可能存在重叠,应使用mommove。
void* my_memmove(void *dest, void const *src, size_t length) { assert(dest != NULL&&src != NULL); char *pdest = (char*)dest; const char *psrc = (char*)src; if (psrc + length <= pdest || src >= pdest)//可以正常赋值 { while (length--) { *pdest++ = *psrc++; } } else//不能从前往后的赋值,有重叠的情况 { while (length-- ) { *(pdest + length) = *(psrc + length); } } *pdest = '