1.模拟memcpy
要实现的功能:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dst所指的内存地址的起始位置中。
void* my_Memcpy(void* dst, void* src, size_t count)
{
assert(dst != NULL && src != NULL);
void* ret = dst;
while (count--)
*((char *)dst)++ = *((char*)src)++;
return ret;
}
2.模拟memmove
要实现的功能:由src所指内存区域复制count个字节到dest所指内存区域。如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后源内容会被更改。当目标区域与源区域没有重叠则和memcpy函数功能相同。
要考虑内存重叠
当dst所指首地址在src到src+count之间时,将会发生内存重叠,我们可以通过从高地址开始拷贝从而实现memmove的功能
void* my_Memmove(void* dst, void* src, size_t count)
{
assert(dst != NULL && src != NULL);
void* ret = dst;
if ((char*)dst > (char*)src && (char*)dst < (char*)src + count)
{
(char*)dst += count - 1;
(char*)src += count - 1;
while (count--)
*((char *)dst)-- = *((char*)src)--;
}
else
{
while (count--)
*((char *)dst)++ = *((char*)src)++;
}
return ret;
}