memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
函数原型:
void *memmove( void* dest, const void* src, size_t count );
头文件:<string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
具体实现:
void * Memmove(void* dest, const void* src, size_t count)
{
assert(dest && src);
//char* ret = (char*)dest;
char* pdest = (char*)dest;
char* psrc = (char*)src;
if (pdest <= psrc || psrc >= pdest + count)
{
while (count--)
{
*pdest++ = *psrc++;
}
}
else
{
pdest = pdest + count - 1;
psrc = psrc + count - 1;
while (count--)
{
*pdest-- = *psrc--;
}
}
//return ret;
return (char*)dest;
}
考虑两种情况:
1、内存不重叠--->顺序拷贝
2、内存重叠----->逆序拷贝
测试:
int main()
{
char arr[10] = "abcd123";
Memmove(arr + 3, arr, 5);
return 0;
}