C语言 | 内存函数memcpy,memmove,memset,memcmp

目录:

1. memcpy使用和模拟实现

2. memmove使用和模拟实现

3. memset函数的使用

4. memcmp函数的使用


头文件:<string.h> 

1. memcpy使用和模拟实现

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

• 从source的位置开始向后复制num个字节的数据到destination指向的内存位置。

num---- 要被复制的字节数。

返回值:返回一个指向destination 的指针

• memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度

• 与strcpy相比
1.复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

2.复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

3.用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

• 如果source和destination有任何的重叠,复制的结果都是未定义的。

简单使用:

(在vs2020环境下,memcpy的库函数实现已经和memmove一样了)

d05bb797742c4b58bdc8c32eb408be9c.png

memcpy函数的模拟实现: 

e9d28595b5c74eb68935b8b9dce9d1c3.png

此时就存在所指内存区域重叠问题。

而如果源空间和目标空间出现重叠,就得使用memmove函数处理。 

2. memmove使用和模拟实现

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

• 和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。将源内存块num个字节移动到目标内存块,源内存块内容并不消失。

• 如果源空间和目标空间出现重叠,就得使⽤memmove函数处理。

简单使用:

2b9ca843b0a04958a906540ecffb0150.png

 memmove的模拟实现:

739e4c19c7da47d185b56d2b9aadf858.png

3. memset函数的使用

void * memset ( void * ptr, int value, size_t num );

• memset是用来设置内存的,将内存中的值以字节为单位设置成想要的内容。

简单使用:

edc8215d4c924d3a9cbc9376e7385291.png

036f03adabe14a09a4424408a85f179f.png

注意:!!!

080564975431487eae77121f5fe4a8b2.png

  memset的模拟实现:

5375bcd61aef4c378cd1a01e2d780204.png

4. memcmp函数的使用

int memcmp ( const void * ptr1, const void * ptr2, size_t num );

逐字节地比较从ptr1和ptr2开始的num个字节,直至比出。

• 返回值如下:

•ptr1>ptr2,则返回大于0的数字

•ptr1=ptr2,则返回0

•ptr1<ptr2,则返回小于0的数字

简单使用:

01ec1e2424a04000b42dad9bd374704a.png

 memcmp的模拟实现:

cbe40c931ce243dbb66748d09e07310a.png

分享到这里,感谢观看。 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刷题之动态规划-回文串

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;开始刷动态规划的回文串类型相关的题目 动态规划5个步骤 状态表示 &#xff1a;dp数组中每一个下标对应值的含义是什么>dp[i]表示什么状态转移方程&#xff1a; dp[i] 等于什么1 和 2 是动态规划的核心步骤&#xff0c;…

两数之和-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第51讲。 两数之和&#xf…

SqlServer功能性配置选择

功能性配置 下面的是必选的

记录一下如何腾讯云服务器用客户端连MySQL

我一般喜欢用IDEA连数据库&#xff0c;别问我为啥&#xff08;就喜欢用一个软件解决所有问题&#xff09; 当然写SQL语句个人还是觉得sqlyog体验最佳&#xff01;

【InternLM 实战营第二期-笔记4】XTuner 微调个人小助手认知

书生浦语是上海人工智能实验室和商汤科技联合研发的一款大模型,很高兴能参与本次第二期训练营&#xff0c;我也将会通过笔记博客的方式记录学习的过程与遇到的问题&#xff0c;并为代码添加注释&#xff0c;希望可以帮助到你们。 记得点赞哟(๑ゝω╹๑) XTuner 微调个人小助手…

【笔记】探索生成范式:大型语言模型在信息提取中的作用

探索生成范式&#xff1a;大型语言模型在信息提取中的作用 摘要介绍 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限可能&#xff0c;共同成长&am…

文献分享:《基于中国人群的BRCA胚系突变筛查专家共识(2024年版)》

&#xff3b;摘要&#xff3d; BRCA基因&#xff08;包括BRCA1和BRCA2&#xff09;的胚系突变是家族性乳腺癌、卵巢癌等肿瘤的核心风险因素。在人群中&#xff0c;特别是已有肿瘤家族史的高危人群中&#xff0c;BRCA基因检测可以发挥预防性管理作用&#xff0c;有助于降低此类遗…

bugku-web-安慰奖

提示备份 开始扫后台 得到备份文件index.php.bak 得到php代码 <?phpheader("Content-Type: text/html;charsetutf-8"); error_reporting(0); echo "<!-- YmFja3Vwcw -->"; class ctf {protected $username hack;protected $cmd NULL;public f…

【攻防世界】supersqli(堆叠注入)

进入题目环境&#xff0c;有输入框与注入参数&#xff0c;推测类型为SQL注入&#xff1a; 测试--注入类型为数字型还是字符型&#xff0c;构造payload&#xff1a;?inject1 or 12 并提交&#xff1a; 发现页面依然正常&#xff0c;说明注入类型为字符型&#xff0c;则继续检查…

Java基于微信小程序的校园订餐系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

SQL语言

一、DDL数据库定义语言 1、登录mySQL mysql -u"用户名" -p"密码" -h"登录地址 -h&#xff1a;默认为本机 示例&#xff1a; 2、查看当前存在的数据库 show databases; 示例&#xff1a; 3、创建数据库database create…

打开Visual Studio后出现Visual Assist报错弹窗

安装了新的VA插件后发现无论如何清理打开VS都会报这个旧版VA报错弹窗&#xff0c;修复VS、重装VA都解决不了 后来进到VS安装目录&#xff0c;删掉一个可疑文件后弹窗再也不出现了