/实现memmove/
//和memcpy的区别是memmove函数处理的源内存块
//和目标内存块是可以重叠的.
//如果源空间和目标空间出现重叠,就使用memmove
//函数
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//memmove函数
void* Memmove(void* dest,const void* src, size_t count){
void* ret;
ret = dest;
assert(ret != NULL && src != NULL); //断言ret和src的指向不为空
if (dest <= src || dest >= (char*)src + count){ //若dest和src的空间不重叠
while (count--){ //count减1
*(char*)dest = *(char*)src; //将src的内容赋给dest
dest = (char*)dest + 1; //dest向后移一位
src = (char*)src + 1; //src向后移一位
}
}
else{
dest = (char*)dest + count - 1; //dest向后移(count-1)位
src = (char*)src + count - 1; //src向后移(count-1)位
while (count--){ //当count不等于0
*(char*)dest = *(char*)src; //将src的内容赋给dest
dest = (char*)dest - 1; //dest向前移一位
src = (char*)src - 1; //src向前移一位
}
}
return ret;
}
//主函数
int main(){
char str[] = "abcde fghuiop zxcv bnm";
Memmove(str, str + 6, 10); //调用Memmove函数
printf("%s\n", str); //打印输出结果
system("pause");
return 0;
}