memcpy 和 memmove 函数

来源:互联网 发布:qq群优化软件怎么用 编辑:程序博客网 时间:2024/05/21 10:26

memcpy 和 memmove 都是C语言提供的内存拷贝函数。

memcpy的函数实现

linux 实现版本
#include <assert.h>  // assert 需要的头文件void* memcpy(void * dest, void *src, size_t count){assert(src != NULL && src != NULL);char *tmp = (char *)dest;const char* s = (const char*)src;for (size_t i = 0; i < count; i++){tmp[i] = s[i];}return dest;}
<pre name="code" class="cpp">void* memcpy(void * dest, void *src, size_t count){void *ret = dest;while (count--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}return ret;}


该函数有极大缺陷,如内存重复的问题等。

memmove就是一个比较好的选择

void* memmove(void *dest, const void *src, size_t count){void* ret = dest;if (dest <= src || (char*)dest >= (char*)src + count){while (count--){*(char*) dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}}else{dest = (char*)dest + count - 1;src = (char*)src + count - 1;while (count--){*(char*)dest = *(char*)src;dest = (char*)dest - 1;src = (char*)src - 1;}}return (ret);}

当src和dest区域没有重叠时,两个函数是完全一样的。木有重叠的条件是: dst <= src || (char *)dst >= ((char *)src + count 。否则,memcpy是不能正常工作的,memmove是可以正常工作的。


0 0
原创粉丝点击