题目
- 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既可以实现从头往后的操作,也可以实现从后往前的操作。