C语言memcpy,memmove的介绍及模拟实现

每日一言

If you want to lift yourself up, lift up someone else.
如果你想振奋自己, 先振奋周遭的人。

memcpy

介绍

函数原型:

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

其中,dest是指向目标内存地址的指针,src是指向源内存地址的指针,n是要复制的字节数。
memcpy函数的工作原理是直接从源内存地址复制指定数量的字节到目标内存地址,可以高效地进行大量数据的复制操作,并且在操作过程中不会改变目标内存地址中的数据类型。

在使用memcpy函数时需要注意源内存地址和目标内存地址之间不能有重叠,否则会产生未定义的行为。

模拟实现

void* my_memcpy(void*dest,const void*arr,size_t num)
{
	for (int i = 0; i < num; i++)
	{
		*((char*)dest + i) = *((char*)arr + i);
	}
 return dest;
}

memmove

介绍

函数原型:

void *memmove(void *dest, const void *src, size_t n);

其中,dest 表示目标内存地址,src 表示源内存地址,n 表示要移动的数据字节数。
memmove 函数会将 src 指向的内存中的数据复制到 dest 指向的内存中,共复制 n 个字节。在复制过程中,如果 src 与 dest 所指内存区域有重叠,memmove 函数会正确处理数据,避免出现数据损坏的情况。

模拟实现

思路

  1. 判断源地址和目标地址的大小。
  2. 根据复制方向,选择正确的复制方式。
    如果源地址小于目标地址,则从后往前拷贝。
    如果源地址大于目标地址,则从前往后拷贝。
  3. 返回目标内存区域的起始地址。

代码

void* my_memmove(void* dest, const void* arr, size_t num)
{
	if (dest<arr)
	{
		for (int i = 0; i < num; i++)
		{
			*((char*)dest + i) = *((char*)arr + i);
		}
	}
	else
	{
		while (num--)
		{
			*((char*)dest + num) = *((char*)arr + num);
		}
	}
	return dest;
}

结语

请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
想成为大佬那就保持空杯心态加油努力吧!


都看到这里啦!真棒(*^▽^*)

可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家

编程小白写作,如有纰漏或错误,欢迎指正


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言中,我们可以模拟实现memcpy函数。memcpy函数的原型为void * memcpy(void * destination, const void * source, size_t num),它的作用是将源地址(source)指向的内存块的数据拷贝到目标地址(destination)指向的内存块中,拷贝的字节数由第三个参数num指定。 要实现memcpy函数,我们可以按照以下步骤进行操作: 1. 首先,我们需要创建一个与源内存块相同大小的目标内存块,并将目标内存块的地址保存在destination指针中。 2. 接下来,我们使用一个循环来逐字节地将源内存块的数据复制到目标内存块中,直到拷贝的字节数达到了num的值。 3. 最后,我们返回目标内存块的地址(destination指针),作为函数的返回值。 下面是一个示例的实现代码: ```c void *my_memcpy(void *destination, const void *source, size_t num) { char *dest = (char *)destination; const char *src = (const char *)source; for (size_t i = 0; i < num; i++) { dest[i = src[i]; } return destination; } ``` 在这个实现中,我们将destination和source指针都转换为char类型的指针,这样可以逐字节地进行数据拷贝。然后,我们使用一个循环来逐字节地将源内存块的数据复制到目标内存块中,直到拷贝的字节数达到了num的值。最后,我们返回目标内存块的地址作为函数的返回值。 这样,我们就实现了一个简单的memcpy函数的模拟实现。需要注意的是,这只是一个简单的示例实现,实际的memcpy函数可能会有更复杂的实现方式,具体实现可能因编译器和操作系统的不同而有所差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月临水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值