memcpy和memoved的模拟实现

memcpy和memmove都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:

**void *memcpy(void dst, const void src, size_t count);

**void *memmove(void dst, const void src, size_t count);

两者之间相同的作用是将src处的内存的内容拷贝count个字节给dest处,区别在于memmove保证结果的正确性,而memcpy只为完成工作即可。

  1. memcpy的模拟实现十分的简单,只需要确定首位置和要复制的位置,然后通过char*指针进行一个个的复制,把src的内容复制给dest即可!代码如下:

//实现memcpy函数的模拟
//#include<assert.h>
//void* my_memcpy(void* dest,  const void* src, size_t count)
//{
//	assert(src && dest);
//	void* ret = dest;
//	while (count--)
//	{
//		*(char*)dest = *(char*)src;
//		dest = (char*)dest + 1;
//		src = (char*)src + 1;
//	}
//	return ret;
//}
//
//
//
//
//
//int main()
//{
//	int arr1[10] = { 1,2,3,4,5,6,7,8,9.10 };//源头空间
//	int arr2[5] = { 0 };//目标空间
//	my_memcpy(arr2,arr1,20);//内存操作函数!!! 5个字母一个占4个字节
//	//memcpy(arr2, arr1, 20);
//	for (int i = 0; i < 5; i++)
//	{
//		printf("%d ",arr2[i]);
//	}
//	return 0;
//}插入代码片

memmove的函数

在拷贝内存内容的时候,会遇到下面两种情况:

  1. dest<src的情况,此时如果先把3—>5这样的话会覆盖5这个位置,所以采用从前到后拷贝的方法
  2. dest>src的情况如果仍采用从前到后的拷贝,从3—>5的拷贝会使得5的位置的数据被覆盖,这样我们采取的不能是这个方法
    应该从后向前拷贝,先把7拷贝到10的位置,然后继续拷贝。

在这里插入图片描述
代码实现如下:

//void* my_memmove(void* dest, const void* src, size_t count) {
//	assert(src && dest);
//	void* ret = dest;
//	if (dest < src)
//	{
//		while (count--) {
//			*(char*)dest = *(char*)src;
//			dest = (char*)dest + 1;
//			src = (char*)src + 1;
//		}
//	}
//	else
//	{
//		while (count--) {
//			*((char*)dest + count) = *((char*)src + count);
//		}
//	}
//	return ret;
//}代码片

好了,以上就是一些简单的函数的实现,后面我们会继续更新这些函数的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值