如何實現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];
}
}