题目
- memmove的实现
代码
#include <stdio.h>
#include <stdlib.h>
void mymemmove(void *to, void *from, size_t count)
{
char *pTo, *pFrom;
//从后往前复制
if(to>from)
{
pFrom=(char*)from+count-1;
pTo=(char*)to+count-1;
while(count)
{
*pTo=*pFrom;
pFrom--;
pTo--;
count--;
}
}else{ //从前往后复制
pFrom=(char*)from;
pTo=(char*)to;
while(count)
{
*pTo=*pFrom;
pFrom++;
pTo++;
count--;
}
}
}
int main()
{
int a[5]={1,2,3,4,5};
int b[5]={1,2,3,4,5};
int i;
mymemmove(a,a+2,12);
for(i=0;i<5;i++)
{
printf("%3d",a[i]);
}
printf("\n");
mymemmove(b+2,b,12);
for(i=0;i<5;i++)
{
printf("%3d",b[i]);
}
printf("\n");
system("pause");
}
结果
总结:
- memcpy只能实现从前往后的操作(PS:现在memcpy得到改进了,可以用在内存重叠的情况中了);memmove既可以实现从头往后的操作,也可以实现从后往前的操作。

京公网安备 11010502036488号