栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言memcpy和memmove的实现。

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言memcpy和memmove的实现。

一,memcpy实现:

void* my_memcpy(void* dest, void* src, size_t n)
{
	void* ret = dest;
	assert(dest && src);   //保证数据的有效性。
	while (n--)
	{
		*(char*)dest = *(char*)src;
		dest = (char*)dest + 1;
		src = (char*)src + 1;
	}
	return ret;
}

我们来分析一下:

1.函数参数类型时void*是因为我们不知道需要拷贝数据的具体类型。而void时无具体类型,可以接受任意类型的参数。

2.其中我们转换位char* 时char*解引用访问一个字节,以他位最小单位,就可以拷贝任意类型的数据了。

3.最后的返回值是为了保证链式访问,所谓链式访问其实就是一个函数的返回值可以作为另一个函数的参数。

二,memmove

memcpy最大的问题是如果自己对自己操作,又是会发生覆盖的问题从而导致结果出错,而memmove就是解决了这个问题。

void* my_memmove(void* dest,void* src,size_t n)
{
	void* ret = dest;
	//这里分情况时为了针对自己对自己。
	assert(dest&&src);
	if(dest 

分析:主要是通过从前往后拷贝和从后往前拷贝解决了自己给自己的覆盖问题。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/717803.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号