首页 > 代码库 > 实现memcpy
实现memcpy
memcpy的原型:
SYNOPSIS #include <string.h> void *memcpy(void *dest, const void *src, size_t n);DESCRIPTION The memcpy() function copies n bytes from memory area src to memory area dest. The memory areas must not overlap. Use memmove(3) if the memory areas do overlap.RETURN VALUE The memcpy() function returns a pointer to dest.
实现时要注意:
1. 空指针的情况。
2. dest和src是否内存重叠。
1 void* memcpy2(void* dest, void* src, size_t n) { 2 if (dest == NULL || src =http://www.mamicode.com/= NULL) return NULL; 3 char* pa = (char*)dest, *pb = (char*)src; 4 if (pa <= pb) { 5 while (n--) { 6 *pa++ = *pb++; 7 } 8 } else { 9 pa += n - 1; 10 pb += n - 1;11 while (n--) {12 *pa-- = *pb--;13 }14 }15 return dest;16 }
因为,都是假设dest和src都是有足够的n个空间。所以有两种情况:
dest在src前面,有重叠;这时可以从头往尾拷贝,不会污染到数据;
dest在src后面,有重叠;这时可以从尾往头拷贝;
没有重叠的情况下,两种方向的拷贝都是安全的。
实现memcpy
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。