void* memcpy(void* memTo, void* memFrom, size_t size)
{
assert(memTo != NULL && memFrom != NULL);
char* temFrom = (char*)memFrom;
char* temTo = (char*)memTo;
while(size-- > 0)
*temTo++ = *temFrom++;
return memTo;
}
memmove主要考虑了内存重叠的问题:
void *memmove(void* dst,const void* src,size_t count)
{
assert(NULL !=src && NULL !=dst);
char* tmpdst = (char*)dst;
char* tmpsrc = (char*)src;
//dst <= src表示,如果dst在src的前面,从前往后复制不会覆盖src中还没有复制的内容
if (tmpdst <= tmpsrc || tmpdst >= tmpsrc + count)
{
//从前往后复制,则不会出现覆盖src中没有复制的内容
while(count--)
{
*tmpdst++ = *tmpsrc++;
}
}
else//如果是指向同一字符串,但是dest在src后面,且dest<=src+count,那么从后往前赋值
{
//从后往前复制,则不会出现覆盖src中没有复制的内容
tmpdst = tmpdst + count - 1;
tmpsrc = tmpsrc + count - 1;
while(count--)
{
*tmpdst-- = *tmpsrc--;
}
}
return dst;
}