【C语言】C语言内存函数

news2024/11/15 11:11:13

👑个人主页:啊Q闻       

🎇收录专栏:《C语言》           

 🎉道阻且长,行则将至

前言 

这篇博客是关于C语言内存函数(memcpy,memmove,memset,memcmp)的使用以及部分的模拟实现

 memcpy,memmove,memset,memcmp的头文件都为string.h

一.memcpy使用及模拟实现 

1.使用

 注1:使用void*的原因:拷贝的数据可能为结构体,字符等其他类型数据。

 注2:函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内   存位置中

  注3:这个函数在遇到'\0'时不会停下来。

  注4:memcpy是用于不重叠的数组之间的拷贝

 代码运行:

也可以从数组中间元素开始拷贝:

 

 2.模拟实现

void* my_memcpy(void* dest, const void* src, size_t num)
{
	void* ret = dest;
	assert(dest);
	assert(src);
	while (num--)
	{
		*(char*)dest = *(char*)src;//void*要强制性转化成其他类型才可以计算
		dest = (char*)dest+1;
		src = (char*)src + 1;//强制性转化只是暂时的,所以加一时也要进行强制转换
	}
	return ret;
}

二.memmove的使用及模拟实现

1.使用 

注1:memmove和memcpy的差别就是memmove函数处理的源内存块和目的内存块是可以重叠的 

运行过程: 

在arr1+3处即元素4的前面开始插入源内存块,将arr1中的3个元素拷贝到arr1中,结果如下:

 

2.模拟实现 

void* my_memmove(void* dest, void* src, size_t num)
{
	void* ret = dest;
	if (dest <= src )//c从前向后拷贝
	{
		while (num--)
		{
			*(char*)dest = *(char*)src;
			dest=(char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	else//从后向前拷贝
	{
		dest = (char*)dest + num - 1;//找到空间末位置
		src = (char*)src + num-1;//找到空间末位置
		while (num--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest -1;
			src = (char*)src -1;
		}
	}
	return ret;
}

详解:

 

当dest于src两个空间不重叠时,从前向后拷贝或是从后向前拷贝都可以。

 

三.memset的使用

 

memset函数是用于设置内存的,其单位为字节 

运行过程:

 

四.memcmp的使用 

 比较从ptr1ptr2指向的位置开始,向后的num个字节,单位是字节

返回值为:

 

 运行过程:

文章到这里就结束了,感谢阅读,如果对你有帮助的话,给个三连支持一下吧 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1515841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于private_key_jwt的客户端身份验证方法

参考文档 spring-authorization-server官网 【版本1.2.2】、 JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants规范。 针对spring-authorization-server官网在Core Model / Components部分提到的RegisteredClient对象中涉及到clien…

springboot+vue学生选课系统 java+ssm+idea+_mysql

系统包含三种角色&#xff1a;管理员、老师、学生&#xff0c;系统分为前台和后台两大模块&#xff0c;主要功能如下。 ide工具&#xff1a;IDEA 或者eclipse 编程语言: java 学生网上选课系统可以实现教室管理&#xff0c;老师管理&#xff0c;课程管理&#xff0c;教学计划管…

基于FPGA的OV7725摄像头的HDMI显示(含源码)

1、概述 本文FPGA通过SCCB接口初始化OV7725摄像头寄存器&#xff0c;然后采集OV7725的摄像头数据&#xff0c;使用DDR3对数据进行暂存&#xff0c;最后将数据输出到HDMI显示器上进行显示。 该工程对应系统框图如下所示&#xff0c;主要包含OV7725驱动及数据处理模块、DDR3读写控…

数据结构(二)——线性表(双链表)

2.3.3 双链表 单链表&#xff1a;单链表结点中只有一个指向其后继的指针&#xff0c;使得单链表只能从前往后依次遍历,无法逆向检索&#xff0c;有时候不太方便 双链表的定义&#xff1a;双链表结点中有两个指针prior和next&#xff0c;分别指向其直接前驱和直接后继 表头结点…

5分钟搞懂MySQL存储引擎

文章目录 什么是存储引擎&#x1f44b;&#xff1f;指定存储引擎✅查看mysql提供什么存储引擎查看mysql当前默认的存储引擎修改mysql默认的存储引擎设置表的存储引擎 常用存储引擎&#x1f9f0;InnoDBMyISAMMemoryInnoDB 和 MyISAM的区别 什么是存储引擎&#x1f44b;&#xff…

23万条数据集,可以用来区分钓鱼网站!

文章目录 一、何为钓鱼网站&#xff1f;二、数据集介绍引用数据集数据展示字段解释 三、数据分析数据读取使用ucimlrepo读取数据 四、下载地址 一、何为钓鱼网站&#xff1f; 在数字化时代&#xff0c;网络安全问题日益严重&#xff0c;其中钓鱼网站是一种常见的网络威胁。钓鱼…

基于Java (spring-boot)的进销存管理系统

一、项目介绍 首页&#xff0c;基础信息管理&#xff0c;备忘录&#xff0c;进销管理&#xff0c;仓库管理&#xff0c;系统管理 二、作品包含 三、项目技术 后端语言&#xff1a;Java 项目架构&#xff1a;B/S架构 数据库&#xff1a;MySQL 前端技术&#xff1a;Vue 后端技术&…

【C语言】比较两个字符串大小,strcmp函数

目录 一&#xff0c;strcmp函数 1&#xff0c;strcmp函数 2&#xff0c;函数头文件&#xff1a; 3&#xff0c;函数原型&#xff1a; 4&#xff0c;返回取值&#xff1a; 二&#xff0c;代码实现 三&#xff0c;小结 一&#xff0c;strcmp函数 1&#xff0c;strcmp函数 …

信道模拟器广泛应用于通信产业 我国企业竞争力不断提高

信道模拟器广泛应用于通信产业 我国企业竞争力不断提高 信道模拟器&#xff0c;模拟通信信道受环境因素影响产生各种特征的仪器&#xff0c;主要由接收电路、发射电路、模拟器、主控CPU等组成&#xff0c;可用于外场环境或者实验室环境中。 根据新思界产业研究中心发布的《202…

线性代数 --- 特征值与特征向量(下)

特征值与特征向量 Eigen Values & Eigen Vectors Part III:如何求解特征向量与特征值 The Key Equation 对于一般矩阵A&#xff0c;如何找到他的特征值与特征向量&#xff1f; Step I: Find λ first! 首先&#xff0c;我们有方程&#xff1a; 但这里有两个未知数&…

短视频解析接口分发系统

宝塔面板&#xff1a;Nginx系统 php7.2 Mysql 5.6-5.7 伪静态Thinkphp 上传文件直接访问域名安装即可 可以自备 听说后边要出saas去水印小程序 下载地址&#xff1a;https://pan.xunlei.com/s/VNskSEelfRVIzoSm5P5Rcw34A1?pwdqzhh# 接口演示&#xff1a; 前端演示…

前端入职配置新电脑!!!

前端岗位入职第一天到底应该做些什么呢&#xff1f;又该怎样高效的认识、融入团队&#xff1f;并快速进入工作状态呢&#xff1f;这篇文章就来分享一下&#xff0c;希望对即将走向或初入前端职场的你&#xff0c;能够有所帮助。内含大量链接&#xff0c;欢迎点赞收藏&#xff0…

GPU性能测试中的张量和矩阵运算

正文共&#xff1a;888 字 7 图&#xff0c;预估阅读时间&#xff1a;1 分钟 前面我们使用PyTorch将Tesla M4跑起来之后&#xff08;成了&#xff01;Tesla M4Windows 10AnacondaCUDA 11.8cuDNNPython 3.11&#xff09;&#xff0c;一直有个问题&#xff0c;那就是显存容量的问…

Springboot的配置文件及其优先级

配置文件 内置配置文件 配置文件的作用&#xff1a;修改SpringBoot自动配置的默认值&#xff1b;SpringBoot在底层都给我们自动配置好&#xff1b;SpringBoot使用一个全局的配置文件&#xff0c;配置文件名是固定的&#xff1a; application.propertiesapplication.yml 以上…

javaweb篇请求与相应的参数问题

目录 前言 简单传参设置 get请求无法识别 post请求 简单传参问题无法识别的解决问题 注意事项 改法 实体参数 代码展示 今日分享 前言 友友们&#xff0c;大家好&#xff0c;今天来开荒了,今天介绍的是在进行数据请求以及相应的时候&#xff0c;我们不仅仅只是进入一…

Java SE 抽象类与接口(二):接口(下)

2.5 实现多个接口 在Java语言中&#xff0c;类和类之间是单继承关系&#xff0c;一个类只可以有一个父类&#xff0c;即Java中不支持多继承关系&#xff0c;但是一个类可以实现多个接口&#xff0c;下面通过Animal类来具体说明 class Animal {protected String name;public A…

phpcms上传漏洞

原始漏洞 漏洞原理&#xff1a;我们上传一个zip的压缩包&#xff0c;它会解压然后删除其中不是.jpg .gig .png的文件 function check_dir($dir)&#xff1a;这是一个PHP函数的定义&#xff0c;它接受一个参数 $dir&#xff0c;代表要检查的目录路径。 $handle opendir($dir)…

MySQL学习Day32——数据库备份与恢复

在任何数据库环境中&#xff0c;总会有不确定的意外情况发生&#xff0c;比如例外的停电、计算机系统中的各种软硬件故障、人为破坏、管理员误操作等是不可避免的&#xff0c;这些情况可能会导致数据的丢失、 服务器瘫痪等严重的后果。存在多个服务器时&#xff0c;会出现主从服…

C语言程序环境和预处理Pt.1 - 预处理指令|预处理操作符

电脑所能识别的语言为二进制指令&#xff0c;而我们所写的C语言代码是文本信息。为了能使计算机识别并执行C语言代码&#xff0c;就需要翻译环境&#xff0c;使C语言代码翻译为二进制的指令。 1.按下编译按钮的幕后 - 程序的翻译环境 从C语言源代码到计算机可识别的二进制文件…

【前端】 响应式布局

目录 1.媒体查询 2.BootStrap 2.1BootStrap引入 2.2BootStrap栅格系统 2.3BootStrap手册查询 1.媒体查询 响应式布局&#xff1a;显示区域改变&#xff0c;布局随之改变&#xff0c;即同一套代码适配不同大小的显示器 媒体查询&#xff1a;检测视口宽度&#xff0c;设置差…