C语言库函数memcpy的模拟实现

目录

引言

实现思路

结语        


引言

        大家好,这次为大家介绍的是库函数memcpy的模拟实现。库函数memcpy用于将一个内存块的数据逐字节的拷贝到另一个内存块中。

实现思路

memcpy的原型是:

void* memcpy(void* dest, const void* src, size_t num);

        memcpy的返回值是目标内存块的指针。要模拟实现这个函数,我们可以用两个指针遍历两个内存块,逐个字节地复制数据,直到拷贝完num个字节为止。

具体的步骤如下:

  • 使用断言判断dest和src是否为空指针,如果是,直接返回NULL;
  • 定义一个临时指针ret,用来保存目标内存块的指针,以便返回;
  • 循环num次,每次执行以下操作:
    • 将src指向的字节复制到dest指向的字节;
    • 将src和dest都强制转换为char*类型,然后后移一个字节;

模拟实现memcpy的具体代码如下:

void* my_memcpy(void* dest, const void* src, size_t num)
{
	assert(dest && src);//断言
	void* ret = dest;
	while (num--)//控制循环次数
	{
		*(char*)dest = *(char*)src;
		(char*)dest += 1;
		(char*)src += 1;
	}
	return ret;
}

(PS:assert函数需要引头文件assert.h) 

        其中,dest指向目标字符串,src指向源字符串,const表示字符串不会被修改。函数返回目标内存块的指针,类型为void*,size_t为无符号整型,num为需要改变的字节的个数。

        由于void*类型的指针不能直接使用,所以不能写成(char*)dest++,这样会先dest++再强转为char*类型的指针,应该写成(char*)dest += 1;src同理。

结语        

        以上,就是有关C语言库函数memcpy的模拟实现的方法介绍,希望能够帮到大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值