模拟实现memmove函数
程序员文章站
2022-05-12 12:57:44
...
分析
memmove是内存移动函数,我们现在要将数组中的1,2,3,4拷贝到3,4,5,6的位置即
如果不考虑反向拷贝则会变成
原来3,4的位置已经被修改成1,2,所以无法实现
你会发现上面目标3所在的位置大于源1所在的位置,则需要反向从后向前拷贝,即不会发生冲突,可实现正确拷贝
dest指代的是目标,src指代源。
代码如下
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void * my_memmove(void * dest,const void * src,size_t count)
{
void * ret = dest;
assert(dest!=NULL);
assert(src!=NULL);
if(dest<src)
{
//前--后
while(count--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest+1;
src = (char*)src+1;
}
}
else
{ //从后向前
while(count--)
{
*((char*)dest+count) = *((char*)src+count);
}
}
return ret;
}
测试代码
int main()
{
int arr1[]={1,2,3,4,5,6,7,8,9};
int i = 0;
for(i=0;i<9;i++)
{
printf("%d ",arr1[i]);
}
printf("\n");
my_memmove(arr1+2,arr1,16);
for(i=0;i<9;i++)
{
printf("%d ",arr1[i]);
}
system("pause");
return 0;
}
实现结果