原型:
void *memcpy(void *dest, const void *src, size_t n);
功能:
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
我们需要考虑地址的重叠覆盖场景:
#include <stdio.h>
#include <stdlib.h>
void* memcpy(void *dst,const void *src,size_t n)
{
char *tmpDst;
char *tmpSrct;
if(NULL == dst || NULL == src)
{
return NULL;
}
if(src >= dst || (char*)dst > (char*)src+ n-1)
{
tmpDst = (char*)dst;
tmpSrct = (char*)src;
while(n--)
{
*tmpDst++ = *tmpSrct++;
}
}
else
{
tmpDst = (char*)dst+n-1;
tmpSrct = (char*)src + n-1;
while(n--)
{
*tmpDst-- = *tmpSrct--;
}
}
return dst;
}
int main()
{
char strDst[20] = "123456";
memcpy(strDst+2,strDst,6);
printf("%s\n",strDst);
system("pause");
}