1. memcpy的模拟实现
void * memcpy ( void * dst, const void * src, size_t count)
{
void * ret = dst;
assert(dst);
assert(src);
/*
* copy from lower addresses to higher addresses
*/
while (count--)
{
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
return(ret);
}
上面这段代码的意思是:设置两个参数为空指针和字节数的函数,函数内部由assert函数确保两个指针参数不是空指针,接下来是一个while循环,实现了src有效地址的所有字节赋给dst,以实现数组内容的拷贝
2.memmove 的模拟实现
void* My_memmove(void* des, const void* src, size_t count)
{
assert(des && src);
void* ret = des;
if (des < src)
{
while (count--)
{
*(char*)des = *(char*)src;
des = (char*)des + 1;
src = (char*)src + 1;
}
}
else
{
while (count--)
{
*((char*)des + count)= *((char*)src + count);
}
}
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
My_memmove(arr + 2, arr, 20);
for (int i = 0; i < 10; i++)
{
printf("%d ",arr[i]);
}
return 0;
}
memmove可以用来处理一个数组内的拷贝,和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。 • 如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。