一、memmove的注意事项
1、头文件为<string.h>
2、声明为:void*memmove(void* dest, const void* src, size_t num);
3、dest要足够大
4、返回类型为void*
5、num以字节为单位
6、允许同一数组重叠拷贝
7、将num个字节拷贝完才结束函数
二、memmove的模拟实现
#include <stdio.h>
#include <assert.h>
void* my_memmove(void* dest, const void* src, size_t num)
{
assert(dest && src);//用断言判断dest及src是否为空指针
//类型转换
char* d = (char*)dest;
const char* s = (const char*)src;
if (d < s)//目标地址小于源地址时,从前向后拷贝
{
while (num--)
{
*d++ = *s++;
}
}
else if(d > s)//目标地址大于源地址时,从后向前拷贝
{
while (num--)
{
d[num] = s[num];
}
}
return dest;//返回dest的地址
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7 };
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组中的元素个数
char* p = (char*)my_memmove(arr + 2, arr, 20);//拷贝
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);//结果为:1 2 1 2 3 4 5
}
return 0;
}
附:若有不足,望指出
^-^感谢阅读^-^