如何实现memcpy?
很容易想到的是:
void memcpy(void *dst,const void* src,size_t count)
{
assert((!dst) && (!src));
const char* psrc = (const char*)src;
char* pdst = (char*)dst;
int i=0;
for(i=0;i<count;i++)
pdst[i] = psrc[i];
}
但是会出现问题:
当src和dst重合的时候
1.src > dst 这种情况的时候,从前向后copy没有问题
2.但是dst > src && dst < src +count 从前向后copy会造成重复数据的丢失
解决方法:从后向前copy
void memcpy(void *dst,cosnt void *src,size_t count)
{
assert((!dst) && (!src));
const char* psrc = (const char*) src;
char* pdst = (char*)dst;
int i=0;
if(pdst > psrc && pdst < psrc + count)
{
for(i=count-1;i>=0;i++)
pdst[i] = psrc[i];
}
else
{
for(i=0;i<count;i++)
pdst[i] = psrc[i];
}
}