#include <stdio.h>
#include <assert.h>
void my_memmove(void* pDst,const void *pSrc,size_t size)
{
assert(pDst != NULL && pSrc != NULL);
/*
* pDst 和pSrc共享同一块内存区域
*/
if((pSrc < pDst) && ((char*)pSrc + size > (char*)pDst))
{
/*
* 此时需要从尾部开始拷贝
* 把pSrc 和pDst 都指向尾部
*/
char* pstrSrc = (char*)pSrc + size - 1;
char* pstrDst = (char*)pDst + size - 1;
/* 从尾部向头开始拷贝*/
while(size--)
*pstrDst-- = *pstrSrc--;
}
else/* pDst 和pSrc 没有共享同一块内存区域*/
{
char* pstrSrc = (char*)pSrc;
char* pstrDst = (char*)pDst;
/* 从头向尾部开始拷贝*/
while(size--)
*pstrDst++ = *pstrSrc++;
}
}
int main()
{
char buf[1024] = {0};
char *str = "123456789abcdefg";
printf("buf = %s\n",buf);
my_memmove(buf,str + 6,3);
printf("buf = %s\n",buf);
}
my memmove 实现
最新推荐文章于 2014-04-28 02:21:05 发布