memcpy
内存拷贝函数
函数原型:
void *memcpy(void *dst, const void *src, size_t n);
功能:
从src所指位置的地址为起始地址,拷贝n个字节到dst所指的内存地址的起始位置中
实现:
void *my_memcpy(void *dst, const void *src, size_t n) { assert(dst != NULL && src != NULL); char *p_dst = (char *)dst; const char *p_src = (const char*)src; while (n--) { p_dst++ = p_src++; } }
缺陷:
未考虑内存重叠等问题
memmove
功能:
与memcpy基本一致,但遭遇内存重叠仍可以正确进行
实现:
void *my_memmove(char *dst, const char *src, size_t n) { assert(dst != NULL && src != NULL); char *p_dst = (char *)dst; const char *p_src = (const char*)src; if (p_dst <= p_src || p_dst > (psrc + n)) { //不存在内存重叠,正常拷贝 while (n--) { p_dst++ = p_src++; } } else { //内存重叠,反向拷贝 while (n--) { *(pdest + n - 1) = *(psrc + n - 1); } } }
来源:CSDN
作者:Mr_HHHHH
链接:https://blog.csdn.net/Mr_HHHHH/article/details/82228609