C语言—模拟实现memcpy,memmove

这篇具有很好参考价值的文章主要介绍了C语言—模拟实现memcpy,memmove。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.memcpy函数的介绍与实现

函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。 这个函数在遇到 '\0' 的时候并不会停下来。 如果source和destination有任何的重叠,复制的结果都是未定义的。

void * memcpy ( void * destination, const void * source, size_t num );

其实要实现memcpy非常的简单,我们不管传进来的是哪种数据类型都统一强转为char*,我们知道char数据类型占一个字节,我们可以把它理解为一个最小单位,不管是什么数据类型我们逐个字节的进行拷贝。代码实现如下:

void* my_memcpy(void* dest, const void* src, size_t num)
{
	void* ret = dest;

	while (num--)
	{
		*(char*)dest = *(char*)src;
		dest = (char*)dest + 1;//逐个字节++
		src = (char*)src + 1;//逐个字节++
	}
	return ret;
}

2.memmove函数的介绍与实现

和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。 如果源空间和目标空间出现重叠,就得使用memmove函数处理。

void * memmove ( void* destination, const void * source, size_t num );

这里我们要分两种情况讨论destinantion > source和destinantion < source先看代码实现:

void* my_memmove(void* dest, const void* src, size_t num)
{
	void* ret = dest;

	if (dest < src)
	{
		//前->后
		while (num--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	else
	{
		//后->前
		while (num--)//20
		{
			*((char*)dest + num) = *((char*)src + num);
		}
	}
	return ret;
}

注意当dest<src时与memcpy实现代码是一样的,因为这里从前往后拷贝不会改变重叠部分的值。

C语言—模拟实现memcpy,memmove,开发语言,c语言

C语言—模拟实现memcpy,memmove,开发语言,c语言

以上就是memcpy,memmove的全部实现过程与思路,感谢大家观看。

C语言—模拟实现memcpy,memmove,开发语言,c语言文章来源地址https://www.toymoban.com/news/detail-551574.html

到了这里,关于C语言—模拟实现memcpy,memmove的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言内存函数精选】memcpy、memset、memmove及仿真实现!掌握内存操作的艺术!

    ❤️ 博客主页: 小镇敲码人 🍏 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌞 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧月,独傲天下百坚强。 男儿应有龙腾志,盖世一意转洪荒。 莫使此生无痕度,终归人间一捧黄。🍎🍎🍎 ❤️ 我的努力求学没有得到别的好处,只

    2024年02月15日
    浏览(38)
  • C语言内存函数(memcpy、memmove、memcmp)详解

    memcpy函数为内存拷贝函数,既可以拷贝字符串,也可以拷贝整形数组、浮点型数组等,具有明显的应用优势, destination为目的地空间,source为不可修改(const)的来源空间,num表示无符号的字节数。其主要含义为将source内容拷贝到destination中,拷贝num个字节数。其返回类型、目

    2024年02月07日
    浏览(32)
  • 【C语言】memcpy,memmove,memcmp,memset函数详解

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 #includestring.h 与strn

    2024年02月17日
    浏览(33)
  • C语言——内存操作函数(memcpy、memmove、memcmp、memset)

    本文章会详解C语言进阶内容,有关内存操作函数( memcpy,memmove,memcmp,memset )的使用说明、API文档该类函数原型以及模拟实现内存函数 首先我们从API文档中搜索memcpy查看一下该函数的原型 可以看出该函数有三个参数,那么这三个参数的作用分别是什么呢? 该函数的实现思

    2024年02月06日
    浏览(40)
  • 来不及哀悼了,接下来上场的是C语言内存函数memcpy,memmove,memset,memcmp

    今天又来写一篇C的文章,这里要讲的是C语言中的几个内存函数,主要是讲解功能和用法,望能耐心观看哦。望官方也多多曝光。 目录 memcpy  memmove memset  memcmp  memcpy  是 C 语言标准库中的一个函数,用于复制内存块的内容。它的主要作用是将一个源内存区域的内容复制到

    2024年02月22日
    浏览(40)
  • memcpy、memmove、memcmp、memset函数的作用与区别

    作用: 从source的位置开始向后复制num个字节的数据到destination的内存位置。 注意: memcpy() 函数在遇到 ’\\0’ 的时候 不会停下来 (strcpy字符串拷贝函数在遇到’\\0’的时候会停下来); destination和source 所指向的内容不能重叠, 否则得不到想要的结果。 void* memcpy(void* destination

    2024年02月14日
    浏览(33)
  • 【C++】-vector的模拟实现(以及memcpy如何使用)

    💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法🎄 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 今天来带大家看看vector的模拟实现,思路来说还是比较简

    2024年02月17日
    浏览(39)
  • 【C语言】memmove()函数(拷贝重叠内存块函数详解)

    🦄 个人主页 :修修修也 🎏 所属专栏 :C语言 ⚙️ 操作环境 : Visual Studio 2022 目录  一.memmove()函数简介 1.函数功能 2.函数参数 1.void * destination 2.onst void * source 3.size_t num 3.函数返回值 4.函数头文件 二.memmove()函数的具体使用 1.使用memmove()函数完成拷贝整型数组数据(目的地与源重

    2024年02月06日
    浏览(38)
  • 【C语言】memcpy()函数(内存块拷贝函数)

    🦄 个人主页 :修修修也 🎏 所属专栏 :C语言 ⚙️ 操作环境 : Visual Studio 2022 目录 一.memcpy()函数简介 🎏函数功能 🎏函数参数 📌void * destination 📌const void * source 📌size_t num 🎏函数返回值 🎏函数头文件 二.memcpy()函数的具体使用 🎏使用memcpy()函数完成拷贝整型数组数据 🎏使

    2024年02月05日
    浏览(36)
  • C++实现memcpy函数

    功能:memcpy为按字节拷贝内存函数,从源src所指的内存地址开始拷贝n个字节到目标dest为起始地址的内存中。 返回值:函数返回指向目标内存区dest的指针。 注意事项: memcpy应该实现按字节拷贝指定长度的内存内容,但若传入函数的实参dest和src指针的类型不同,直接自增++可

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包