模拟实现内存函数(memcpy,memmove)

内存操作函数memcpy函数,memmove函数,memcmp函数,memset函数 目录 memcpy函数,memmove函数,memcmp函数,memset函数 1.memcpy 模拟实现memcpy函数 2.memmove 模拟实现memmove函数 3.memcmp 4.memmset memmset使用方法 1.memcpy void* memcpy(void* destination, const void* source, size_t num); void* dest 目标内存 const void* src 源内存 size_t n... 阅读详情

今天分享两个程序分别实现内存函数memcpy和mommove:
1.模拟实现memcpy
功能介绍:
memcpy函数的功能是从源str2所指的内存地址的起始位置开始拷贝n个字节到目标str1所指的内存地址的起始位置中,但是如果str2和str1所指的内存区域重叠,那么这个函数并不能够确保str2所在重叠区域在拷贝之前不被覆盖,所以具有一定的局限性。

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

void* sim_memcpy(void* str1,const void* str2,size_t n)
{                                //void*是因为内存拷贝函数什么类型都接收
	assert(str1 != NULL);        //合法性校验,如果传进来的是空指针则程序直接崩溃
	assert(str2 != NULL);
	char* ret = str1;            //目标变量str1的地址需要存放在一个临时指针变量中,因为str1在循环体中一直是变化的
	while (n--)
	{
		*(char*)str1 = *(const char*)str2; //void*类型不能进行解引用操作和++运算,在解引用操作和++运算之前,要进行强制类型转换。并且因为此函数是一个字节一个字节的拷贝,所以要将str1和str2变量强制类型转化为char*类型。 
		++(char*)str1;
		++(char*)str2;
	}
	return ret;
}
int main()
{
	char str1[10] = "abcdefg";
	char str2[10] = "abcdefg";
	char str0[10] = { 0 };
	sim_memcpy(str1 + 2, str1, 4); //有重叠的情况
	sim_memcpy(str0, str2+3, 4); //无重叠的情况
	printf("%s\n", str1 + 2);
	printf("%s\n",str0);
    system("pause");
	return 0;
}

2.模拟实现memmove
功能介绍:
memmove用于从str2拷贝n个字节到str1,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后str2内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void* sim_memmove(void* str1,void* str2,size_t n)
{
	assert(str1 != NULL);
	assert(str2 != NULL);
	char* s1 = (char*)str1;
	char* s2 = (char*)str2;
	void* ret = str1;
	if (s1<=s2||s2+n<=s1)        //这是目标和源无重叠的情况
	{
		while (n--)
		{
			*s1++ = *s2++;
		}
	}
	else
	{
		while (n--)             //这是目标和源有重叠的情况,需要反向拷贝
		{
			*(s1 + n) = *(s2 + n);
		}
	}
	return ret;
}
int main()
{
	char str1[10] = "abcdefg";
	char str2[10] = "abcdefg";
	char str0[10] = { 0 };
	sim_memmove(str2 + 2, str2, 4); //有重叠的情况
	sim_memmove(str1,str0,3);       //无重叠的情况
	printf("%s\n", str2 + 2);
	printf("%s\n",str1);
	system("pause");
	return 0;
Python - ctypes模块的详细解析与使用 ctypes是 Python 中一个用于操作 C 数据的模块,可以用来调用 C 库函数,或者用 C 语言的数据类型来定义变量。工作中有时会使用到python调用 C库的情形,而本文将详细介绍 ctypes 的使用方法。 阅读详情

相关推荐

memcpy函数用法

函数原型:void *memcpy(void *dest, void *src, unsigned int count); memcpy 函数用于 把资源内存(src所指向的内存区域) 拷贝到目标内存(dest所指向的内存区域); size变量控制拷贝的字节数; 用法: (1)可以拷贝任何类型的对象,因为函数的参数类型是void*(未定义类型指针),也就是说传进去的实参

Qiang_LHQ的专栏 1897

chatgpt赋能Python-python_memcpy

Python memcpy是在Python中用于内存复制的函数,类似于C语言中的memcpy函数。memcpy函数在C语言中被广泛使用,因为它可以在短时间内复制大量的数据。Python memcpy具有相同的功效,可以在Python中实现高效的内存复制。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。

turensu的博客 638

MOBsf联动雷电模拟器(在docker国内库撤销后)

MobSF (全称:Mobile Security Framework,中文名:移动安全框架) 是一个自动化的移动应用程序(Android / iOS / Windows)开源测试工具,该工具采用Python开发,能够执行静态,动态和恶意软件分析。MobSF提供了很多自动化分析功能,尤其适用于Android应用。安装必备(默认已准备好)docker(kali) 现在的国内镜像源都已经下架了只能开代理下载桌面版然后给pull到本地。

qq_48149564的博客 1600

内存函数__memcpy

内存函数__memcpy

一怀明月的博客 476

【电路设计实战】BUCK降压电路:从原理到PCB布局的降噪与效率优化

本文深入剖析了BUCK降压电路的工作原理,并针对其固有的开关噪声问题,提供了从核心元件选型到PCB布局的全面优化方案。文章重点探讨了电感、电容等关键元件的选型要点,强调了低ESR电容和肖特基二极管的重要性,并详细阐述了如何通过最小化功率回路、保护敏感信号线等PCB布局实战技巧,有效抑制噪声、提升效率与稳定性。

weixin_29304021的博客 221

74HC138译码器的原理和使用

A0,A1,A2为3位二进制加权地址输入端口,A2A1A0顺序组成的3位2进制数对应的十进制数x控制使能端口Yx';例如当A2A1A0 = 101 时,其他门输出端全为高电平,只有Y5'为低电平。 Y0-Y7为8个输出端口,其输出电平由A0,A2,A3,E1,E2,E3决定。

diksan的博客 6万+

内存函数memcpy、memmove原理及模拟实现

内存函数memcpy、memmove的原理及具体模拟实现

m0_54991409的博客 3036

MatGPT:在MATLAB中集成AI助手,实现代码生成与调试自动化

大语言模型(LLM)通过API接口为开发者提供了强大的自然语言理解和代码生成能力,其核心原理是基于海量数据训练的Transformer架构,能够根据上下文预测并生成连贯的文本或代码。这一技术为工程实践带来了革命性价值,特别是在科学计算和算法开发领域,能够显著提升开发效率,实现智能化的代码辅助和问题解答。在实际应用中,开发者常需在IDE与AI工具间频繁切换,导致工作流中断。MatGPT作为一个开源项目,通过深度集成ChatGPT API到MATLAB环境,有效解决了这一痛点。它支持多模态输入、预设提示词管理和

weixin_42388898的博客 500

内存函数memcpy和memmove详解及模拟实现

君子性非异也,善假于物也。想要了解一个函数,首先可以利用工具,了解它的基本用法这里我用这个网站进行查找。从*source一个字节一个字节的拷贝num个字节到*destination区分memcpy和memmove:在学习memmove之前,我们可以先了解一下memcpy,同样通过上面的网站查找:不难发现,这两个函数的差别好像不大其实标准值规定:memcpy来实现不重叠的内存拷贝;memmove来实现重叠的内存拷贝。那么什么是重叠的内存拷贝呢?int main()//内存里以字节为单位拷贝。

yao_yao0524的博客 792

【NTN 卫星通信】使用地面网络和卫星网络接入的终端应用场景

卫星接入有广覆盖的特点, 可以改善地面接入网覆盖或无线条件差的地区(例如多径干扰)的服务可用性。对于高速移动中需要实时业务的终端,如IMS语音/视频会议,可以通过地面接入和卫星接入同时实现与5G系统的双连接,在地面接入网不可用的情况下获得连续可靠的业务。

weixin_43603524的博客 2558

让旧 Append 字段升级为真正的 Key User Custom Field:基于 SCFD_EUI 的无损转换与 UI / API 暴露实战

摘要:SAP S/4HANA私有云和本地部署项目中,常面临将历史遗留的手工追加字段转换为可管理的Custom Field的挑战。SAP提供通过事务码SCFD_EUI将旧字段转换为ABAP Managed Field(AMF)的路径,实现字段名和数据原地保留的同时获得扩展能力。适用场景包括已沉淀多年数据的字段迁移成本高,或对数据元素有特殊约束需求。转换后字段可在Fiori UI、报表、表单等多触点统一管理。但AMF会增加复杂度,建议优先使用标准Custom Field。操作前需确保开发环境和传输配置正确,并遵

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 247

C语言内存函数(1)【memcpy函数的使用与模拟实现】【memmove函数的使用和模拟实现】

关于内存函数有四个函数需要我们学习。分别是memcpy,memmove,memset和memcmp。都在头文件string.h里面。

2301_81699364的博客 1524

在鸿蒙中使用AVPlayer完成视频的播放【坚果派】

播放的全流程包含:创建AVPlayer,设置播放资源和窗口,设置播放参数(音量/倍速/缩放模式),播放控制(播放/暂停/跳转/停止),重置,销毁资源。5.准备播放:调用prepare(),AVPlayer进入prepared状态,此时可以获取duration,设置缩放模式、音量等。8.退出播放:调用release()销毁实例,AVPlayer进入released状态,退出播放。6.视频播控:播放play(),暂停pause(),跳转seek(),停止stop() 等操作。今天我们来看一下视频如何正常播放。

坚果的博客 4057

【深入详解】C语言内存函数:memcpy、memmove的使用和模拟实现,memset、memcmp函数的使用

当有一块内存空间需要设置内容的时候,就可以使用memset函数,值得注意的是memset函数对内存单元的设置是以字节为单位的。(1)如果要比较2块内存单元的数据的大小,可以使用memcmp函数,这个函数的特点就是可以指定比较长度;(2)memcmp函数是通过返回值告知大小关系的。

艾莉丝努力练剑的博客,感谢大家一直以来的对艾莉丝的支持和鼓励,uu们如果对C/C++方向感兴趣的话,可以通过艾莉丝主页的微信名片加艾莉丝的好友,和努力练剑的艾莉丝一起加油! 4463

【华为OD机试真题 新系统】1043、魔法咒语组合 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1043、魔法咒语组合 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为od

KJ.JK 283

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C语言内存函数详细讲解及各自模拟实现(含memcpy,memmove,memset,memcmp)

C语言内存函数讲解及实现

foodsx的博客 1085

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【C语言内存函数】--memcpy和memmove的使用和模拟实现,memset函数的使用,memcmp函数的使用

当有一块内存空间需要设置内容的时候,就可以使用memset函数,值得注意的是memset函数对内存单元的设置是以字节为单位的。如果要比较2块内存单元的数据的大小,可以使用 memcmp 函数,这个函数的特点就是可以指定比较长度memcmp 函数是通过返回值告知大小关系的。【C语言字符函数和字符串函数(一)】--字符分类函数,字符转换函数,strlen,strcpy,strcat函数的使用和模拟实现。

会当凌绝顶,一览众山小 1519

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

03-C语言进阶——模拟实现内存操作函数(memmove与memcpy)

模拟实现内存操作函数1.模拟实现memcopy2.模拟实现memmove memcpy和memmove并不属于字符串操作函数,而是内存操作函数,而对内存进行复制和移动会存在多种情况,下面通过模拟实现两种函数来讨论两块内存的不同情况和内存操作函数的不同于相同。 1.模拟实现memcopy 2.模拟实现memmove ...

3764

【C】模拟实现memcpy,memmove内存函数

1.复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。2.复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。3.用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。

sakura0908的博客 626

memcpy,memmove等内存函数的模拟实现

memcpy,memmove等内存函数的模拟实现

qq_57659991的博客 229

C语言:内存操作函数memcpy、memmove、memset和memcpy的使用和模拟实现

正确拷贝方式如下图:情况2:将数组arr1中的数据3 4 5 6 7 拷贝至数组arr1中1 2 3 4 5 的位置,即将数组arr1中的数据1 2 3 4 5改成3 4 5 6 7。

2302_80892233的博客 1531

内存函数memcpy和memmove详解与模拟实现

memcpy函数返回值类型为void*,参数类型是指针类型和无符号整型num。函数memcpy从source(源)的位置开始向后复制num个字节的数据到destination(目标)的内存位置。source指向的内容是被复制的,所以要用const保护起来。既然memcpy函数无法实现自我拷贝,这就需要我们另一位主角memmove函数登场了!!!函数定义与memcpy函数一样和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。

m0_54469145的博客 904

C语言内存函数memcpy、memmove详细讲解及其模拟实现

也就是我们拷贝了多少个字节,内部的构造就比较简单,我们要明白的是void*是一个空指针不能直接进行解引用操作,所以我们强制类型转换将它改为char*类型再进行解引用操作,这样就可以让我们每个元素都是字节,那我们的地址呢地址也需要对他进行强制类型转换,这样我们每当指向一个地址后进行+1指向下一个地址这样我的arr2数组就会被修改。大小,int的字节大小是4,5*4也就是20个字节,然而我们的memcpy函数也是通过字节的个数,来访问我们的电脑因该拷贝多少个字节。对于重叠的内存我们需要memove来处理。

2301_79849400的博客 1238

内存函数memcpy,memmove全解及其模拟实现

好久不见,今天也是回到了学校学习,今天我们就继续来更新我们C语言的部分。

m0_73802195的博客 306

内存函数的介绍(memcpy、memmove、memcmp)以及模拟实现

内存函数的介绍(memcpy、memmove、memcmp)以及模拟实现

m0_62714628的博客 2184

C语言——内存函数介绍和模拟实现(memcpy、memmove、memset、memcmp)

之前我们讲过一些字符串函数(),今天我们来讲一讲几个内存函数,那么可能有人要问了,都有字符串函数了,怎么又来个内存函数,这不是一样的么?我们要知道之前的字符串函数只能对字符串进行一系列操作很是局限,这次的内存函数就不一样了,内存函数的范围就很广了,它可以对数组啊,或者是结构体进行操作了。

2301_77125473的博客 1240
上一篇: 数组元素旋转和交换问题
下一篇: 初阶指针知识点总结
Python_programer
博客等级 码龄9年 25粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值