c模拟实现memcpy和memmove

112 阅读1分钟

memcpy函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即内存拷贝函数。 #include<stdio.h> #include<stdlib.h> #include<assert.h>

void* my_memcpy(void* dest, const void* src, size_t count) { void*ret = dest; assert(dest != NULL); assert(src != NULL);

while(count--)
{
	*(char*)dest = *(char*)src;
	((char*)src)++;
	((char*)dest)++;
}
return ret;

}

int main() { int arr1[10] = {0}; int arr2[] = {1,2,3}; my_memcpy(arr1, arr2, 12); //dest-src > count // 1,2,1,2,3,4,7,8,9,10 my_memcpy(arr1+2, arr1, 16);

return 0;

}

memcpy和memmove的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。

#include<stdio.h> #include<stdlib.h> #include<assert.h>

void* my_memmove(void* dest, const void* src, size_t count) { voidret = dest; assert(dest != NULL); assert(src != NULL); if(dest<src) { while(count--) { (char)dest = (char)src; ((char)src)++; ((char*)dest)++; } } else { while(count--) { ((char)dest+count) = ((char)src+count); } } return ret; }

int main() { int arr1[] = {1,2,3,4,5,6,7,8,9,10}; my_memmove(arr1, arr1+2, 16);

return 0;

}