/*
用 C 语言实现函数 void* memcpy( void *dest, const void *src, size_t nCount )
memmove 函数的功能是拷贝 src 所指的内存内容前 n 个字节到 dest 所指的地址上。
简单循环拷贝即可,但是这道题,要深究起来很多问题,比如内存区域是重叠的,有可能左边重叠也可能右边重叠
*/
#include <stdio.h>
#include <stdlib.h>
void* memcpy( void *dest, const void *src, size_t nCount )
{
if (NULL == dest || src == NULL)
{
return NULL;
}
char *pszDest = (char *)dest;
const char *pszSrc = (char *)src;
// pszDest开始地址,处于pszSrc中,那么不能从头开始拷贝,而是从尾部开始拷贝
if (pszDest > pszSrc && pszDest < pszSrc + nCount)
{
for (int i = nCount - 1; i >= 0; i--)
{
pszDest[i] = pszSrc[i];
}
}
else // 其他情况是从开始部位开始拷贝
{
for (size_t i = 0; i < nCount; i++)
{
pszDest[i] = pszSrc[i];
}
}
return dest;
}
int main()
{
char szBuf[] = "abcdefghijklmn";
char szBuf2[100] = {0};
char *p = szBuf + 2;
memcpy(szBuf, p, 4);
printf("%s\n", szBuf);
system("pause");
return 0;
}
</pre></pre></pre></pre></pre>