Mem系列函数介绍及案例实现
昨天导师甩给我们一个项目案例,让我们自己去看一看熟悉一下项目内容,我看到了这个项目里面大量使用memset(sBuf,0,sizeof(sBuf));这一块内存填充的代码,于是回想起以前查过Mem系列函数的具体用法。整理整理。
函数名称: memset
函数原型: void *memset(void *s, int ch, size_t n);
函数功能: 在一段内存块中填充某个给定的值,是对较大的结构体或数组进行清零操作的最快方法。
函数返回: void
参数说明: void *s — 待初始填充的内存首地址
int ch — 待填充的ASCII码
size_t n — 待初始化填充的字节个数

补充:不要对结构体使用memset赋非0以外的值,这很有可能会使得结构体内部的结构被破坏。
函数名称: memcpy
函数原型: void *memcpy(void *dest, const void *src,size_t n);
函数功能: 内存区段拷贝;将src指向内存地址的连续N个指针位置的内容拷贝至dest指针指向的位置
函数返回: void
参数说明: dest — 目的内存空间指针
src — 源内存空间指针
n — 拷贝指针位置个数

补充:使用memcpy对一段内存进行替换的时候要保证前两参数分别为目的地址和源地址或者指针
函数名称: memmove
函数原型: void *memmove(void *dest, const void *src,size_t n);
函数功能: memmove用于从src拷贝n个单位长度到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同
(在我个人使用的过程中并没发现过这两个函数的区别 - -||| )(快回去把,别丢人了,菜是原罪 )
函数返回: void
参数说明: dest — 目的内存空间指针
src — 源内存空间指针
n — 移动指针位置个数

函数名称: memcmp
函数原型: int memcmp (const void *S1, const void *S2, size_t size)
函数功能: 用于比较内存数据S1与S2的前size个字符
函数返回: 从指针第一个字符开始比较,如果S1,S2完全相同返回0,如果S1[i]大于S2[i]则跳出返回-1,如果S1[i]小于S2[i]则跳出返回1
参数说明: S1—待比较内存数据1
S2—待比较内存数据2
size—比较内存数据个数

函数名称:_memicmp
函数原型:int _memicmp (const void *S1, const void *S2, size_t size)
函数功能:用于比较内存数据S1与S2的前size个字符,如若相同,返回0
函数返回:如果S1,S2相同返回0,不相同返回两个字符串第一个出现不同地方的字符差值
if(s1[i]!=s2[i]!) return s1[i]-s2[i];

补充:_memicmp不区分字母大小写,主要用于英文字符判断
Mem系列函数介绍及案例实现的更多相关文章
- openssl之EVP系列之13---EVP_Open系列函数介绍
openssl之EVP系列之13---EVP_Open系列函数介绍 ---依据openssl doc/crypto/EVP_OpenInit.pod翻译和自己的理解写成 (作者:Dra ...
- openssl之EVP系列之12---EVP_Seal系列函数介绍
openssl之EVP系列之12---EVP_Seal系列函数介绍 ---依据openssl doc/crypto/EVP_SealInit.pod翻译和自己的理解写成 (作者:Dra ...
- openssl之EVP系列之11---EVP_Verify系列函数介绍
openssl之EVP系列之11---EVP_Verify系列函数介绍 ---依据openssl doc/crypto/EVP_VerifyInit.pod翻译和自己的理解写成 (作者 ...
- openssl之EVP系列之10---EVP_Sign系列函数介绍
openssl之EVP系列之10---EVP_Sign系列函数介绍 ---依据openssl doc/crypto/EVP_SignInit.pod翻译 (作者:DragonKing, ...
- 转: OVER() 系列函数介绍
OVER(PARTITION BY)函数介绍 开窗函数 Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返 ...
- 线程模型、pthread 系列函数 和 简单多线程服务器端程序
一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属于1:1模型. (一).N:1用户线程模型 “线程实现”建立在“进程控制”机制之上,由用 ...
- Python开发【第三章】:Python函数介绍
一. 函数介绍 1.函数是什么? 在学习函数之前,一直遵循面向过程编程,即根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复 ...
- 从简单需求到OLAP的RANK系列函数
同事问了一个非常简单的问题,怎么取出每个partition里面另外一个列的最小值? create table t1 (int c1, int c2); 假如按照c2分区,0-10,10-20,20 ...
- linux tricks 之VA系列函数.
VA函数(variable argument function),参数个数可变函数,又称可变参数函数.C/C++编程中,系统提供给编程人员的va函数很少.*printf()/*scanf()系列函数, ...
随机推荐
- vue组件中data为什么必须是个函数
<body> <div id="app"> <counter></counter> </div> <templat ...
- vue 开发和生产的跨域问题
开发阶段 在开发环境与后端调试的时候难免会遇到跨域问题,在 vue 项目中常用的是 proxyTable,这个用起来很方便. 打开 config 文件夹下面的 index.js,找到 dev 开发模式 ...
- Centos6.5 安装 python3.5 虚拟环境 virtualenvwrapper
Centos6.5 安装 python3.5 虚拟环境 virtualenvwrapper 1 . 安装 python3.5 下载:https://www.python.org/ https://ww ...
- rootkit后门检测工具
1. 关于rootkit rootkit是Linux平台下最常见的一种木马后门工具,它主要通过替换系统文件来达到入侵和和隐蔽的目的,这种木马比普通木马后门更加危险和隐蔽,普通的检测工具和检查手段很难发 ...
- Vue中ajax返回的结果赋值
这是第二次在项目中遇到此问题,ajax请求成功后在success函数中为Vue实例data里的变量赋值,却失败了 new Vue({ el:'#app', data:{ msg:'' }, creat ...
- 51nod 2523
len=0 break len=1,f=0,ans++,保留前一行的v数组,即len不变:f=1,重新确定下一列中需要判哪一行(标记法),跟新v数组 这题思路很清晰,但是写代码的时候弄错好几个变量,列 ...
- Deep face recognition: a survey v4
http://www.cnblogs.com/shouhuxianjian/p/9789243.html
- Windows安装redis并将redis设置成服务
Redis 作为一种缓存工具,主要用于解决高并发的问题,在分布式系统中有着极其广泛的应用,Redis 本身是应用于 Linux/Unix 平台的(部署在服务器上边),官方并没有提供 Windows 平 ...
- redis安装使用
Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 它通常被称为数据结构服务器,因为值(valu ...
- 不可不知的表达式树(1)Expression初探
说起Lambda表达式,大家基本都很熟悉了,而表达式树(Expression Trees),则属于80%的工作中往往都用不到的那种技术,所以即便不是什么新技术,很多人对其理解都并不透彻.此文意图从表达 ...