实现void* memmove(void *pDst, const void *pSrc, size_t len); 需要考虑内存重叠的问题 和其它边界情形;
void memmove(void *pDst,const void *pSrc, size_t size)
{
assert(pDst != NULL);
assert(pSrc != NULL);
/* pSrc与pDst共享同一块内存区域 */
if((pSrc pDst))
{
char *pstrSrc= (char *)pSrc + size -1;
char *pstrDst = (char *)pDst + size -1;
/ * 从尾部逆向拷贝 */
while(size--)//
*pstrDst -- = *pstrSrc--;
}
else
{
char *pstrSrc= (char *)pSrc ;
char *pstrDst = (char *)pDst ;
/* 从起始部正向拷贝 */
//while(--size)是不行的。先减1,再判断。size为1的时候就退出了会少算一个
while(size--)
*pstrDst++ = *pstrSrc++;
}
}