memmove 函数

来源:互联网 发布:淘宝店更换类目影响 编辑:程序博客网 时间:2024/05/22 14:51

memmove 函数

用于内存拷贝的函数,没有类型限制,但是memmove使用要考虑内存重叠问题

void * memmove(void * destination, const void * source, size_t num);

用于从src中拷贝num个任意类型的内容到dest,如果目标区域和源区域有重叠(并不是所有重叠情况都需要特殊处理),memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域。

会发生内存重叠的情况:


库中实现的memmove函数

int main (){  char str[] = "memmove can be very useful......";  memmove (str+20,str+15,11);  puts (str);  return 0;}


模拟实现memmove函数:


void* My_memmove(void* dest, const void* src, size_t num){assert(dest);assert(src);void* p = dest;if ((dest > src) && ((char*)dest < ((char*)src + num)))   //此时发生内存重叠,需要从后向前拷贝{dest = (char*)dest + num - 1;src = (char*)src + num - 1;while (num--){*(char*)dest = *(char*)src;dest = (char*)dest - 1;src = (char*)src - 1;}}else{while (num--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}}return p;}int main(){char ppy[] = "abc vvt xxx www qqqqqqqqqqqqq";printf("%s\n", My_memmove(ppy + 6, ppy + 4, 11));system("pause");return 0;}


原创粉丝点击