<pre name="code" class="cpp">//方法一:不考虑内存重叠
void* memcpy(void *dest, void *src, size_t size)
{
if(dest == nullptr || src == nullptr)
return nullptr;
void *result = dest;
while(size--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest+1;
src = (char*)src+1;
}
return result;
}
//方法二:考虑内存重叠(类似于memmove)
void *memcpy(void *dest, void *src, size_t size)
{
if(dest == nullptr || src == nullptr)
return nullptr;
void *result = dest;
if(dest < src || (char*)src+size < (char*)dest)//没有内存重叠
{
while(size--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest+1;
src = (char*)src+1;
}
}
else//有内存重叠
{
dest = (char*)dest+size-1;
src = (char*)src+size-1;
while(size--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest-1;
src = (char*)src-1;
}
}
return result;
}
memcpy函数
最新推荐文章于 2024-05-15 13:14:17 发布