实现memcpy

需要考虑的问题:
1、参数检查
2、具体问题相关: 区域重叠


代码地址: https://github.com/huntinux/C/blob/master/memcpy.c



#include #include /* man memcpy: SYNOPSIS #include void *memcpy(void *dest, const void *src, size_t n); DESCRIPTION Thememcpy()functioncopiesn bytes from memory area src to memory area dest. The memory areas must not overlap.Use memmove(3) if the memory areas do overlap. */// 标准的memcpy没有处理区域重叠,如果区域会重叠请使用memmovevoid * memcpy(void *dest, const void *src, size_t n) { char *pdest; const char *psrc; int i ; pdest = (char *)dest; psrc = https://www.it610.com/article/(const char *)src; assert(pdest!=NULL && psrc!=NULL); // 处理区域重叠问题 if(pdest> psrc && pdest < psrc + n){ // 如果重叠了,则从后面开始复制 for(i=n-1; i>=0; i--){ pdest[i] = psrc[i]; } }else{ while(n-->0){ *pdest++ = *psrc++; } } return dest; }int main() { char arr[] = "helloworld"; char *src, *dst; // 有重叠的两个区域 src = https://www.it610.com/article/arr; dst = arr + 4; printf("%s\n", (char *)memcpy(dst, src, 6)); return 0; }// 写函数的时候要注意 // 1. 参数处理 //参数是否正确(不能为NULL)(assert) //不能修改的加上const // 2. 具体问题的考虑 //此问题中,dest和src有重叠的时候该怎么办。所以要考虑到所有情况。



参考: http://bbs.csdn.net/topics/210050580
【实现memcpy】http://blog.csdn.net/gengshenghong/article/details/5634776

    推荐阅读