实现memmove
程序:
void * Memmove(void *dest, const void *src, size_t num)
{
//合法性校验
if (dest == NULL || src == NULL || num == 0)
{
return dest;
}
//先区分当前缓冲区是否重叠
char* pdest = (char*)dest;
char* psrc = (char*)src;
if (pdest >= psrc&&pdest <= psrc + num)
{
//缓冲区重叠,从后向前拷贝
for (size_t i = 0; i < num; ++i)
{
pdest = pdest + num-1;
psrc = psrc + num-1;
*pdest = *psrc;
--pdest;
--psrc;
}
}
else
{
//缓冲区不重叠,正常拷贝
for (size_t i = 0; i < num; ++i)
{
*pdest = *psrc;
++pdest;
++psrc;
}
}
return dest;
}
int main()
{
char arr1[] = "a";
char arr2[] = "memove can be very useful.......";
Memmove(arr1, arr2, sizeof(arr2));
puts(arr1);//直接打印字符串
return 0;
}