模拟实现memcpy
void *my_memcpy(void *dst,const void *src,int count)
{
assert(dst);
assert(src);
char *p = (char *)dst;
char *q = (char *)src;
while(count--)
{
*p = *q;
p++;
q++;
}
return dst;
}
内存拷贝分为以下4种情况,memcpy可以解决除了特殊情况之外的其他三种情况.
特殊情况需要特殊处理,则有了memmove
模拟实现memmove
void *my_memmove(void *dst,const void *src,int count)
{
assert(dst);
assert(src);
char *dst_p = (char*)dst;
char *src_p = (char*)src;
//特殊情况,从右向左拷贝
if(src_p < dst_p && (src_p+count) > dst_p)
{
dst_p = dst_p+count-1;
src_p = src_p+count-1;
while(count--)
{
*dst_p = *src_p;
dst_p--,src_p--;
}
}
else
{
while(count--)
{
*dst_p = *src_p;
dst_p++,src_p++;
}
}
return dst;
}