memmove是一个可以实现各种类型的复制的函数。与其他有类似功能的函数相比,这个函数可以在两个目标内存有重复情况下,很容易地出错。
该函数的原型是: void *memmove(void *dest, const void *src, unsigned int count);
参数说明:dest:是目标内存的地址。
src:被复制内容的内存地址。
count:需要复制的字节数。
具体实现如下:
#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
void * mymemmove(void *dst, const void *src, int l){
void *ret = dst;
char *dst_t = (char *)dst;
const char *src_t = (char *)src;
int i = 0;
if (l == 0){
return NULL;
}
if (dst == NULL||src == NULL){
return NULL;
}
else if (dst_t > src_t&&dst_t<src_t+l){
while (l){
*(dst_t + l - 1) = * (src_t + l - 1);
l--;
}
return ret;
}
else{
while (i<l){
*(dst_t + i) = *(src_t + i);
i++;
}
return ret;
}
}
int main(){
char str[] = "abcdefg";
char str1[] = "xyz";
int s = 5;
int *a = &s;
mymemmove(str+1, str, 4);
printf("%s\n", str);
system("pause");
return 0;
}
如有错误,欢迎指正。