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系列
浅入深出Vue导航 导航帖,直接点击标题即可. 文中所有涉及到的资源链接均在最下方列举出来了. 前言 基础篇 浅入深出Vue:工具准备之WebStorm搭建及配置 浅入深出Vue之工具准备(二):Po ...
- SqlServer查询某数据在某表某列中
create proc spFind_Column_In_DB ( @type int,--类型:为文字类型.为数值类型 @str nvarchar(100)--需要搜索的名字 ) as --创建临时 ...
- zip4j压缩
使用的jar包:zip4j_1.3.2.jar 基本功能: 针对ZIP压缩文件创建.添加.分卷.更新和移除文件 (读写有密码保护的Zip文件) (支持AES 128/256算法加密) (支持标准Zip ...
- C# - 学习总目录
C# - 基础 C# - 操作符 C# - 值类型和引用类型 C# - 表达式与语句 C# - 数组 C# - 引用类型 C# - 常用类 C# - 常用接口 C# - LINQ 语言集成查询 C# ...
- python matplotlib 简单生成图
import numpy as np import pandas as pd from matplotlib import pyplot as plt data = pd.DataFrame([[1, ...
- PyCharm的使用教程
1.1 安装 首先去下载最新的pycharm ,进行安装.可以直接在官网下载. 1.2 首次使用 1,点击Create New Project. 2, 输入项目名.路径.选择python解释器.如果没 ...
- linux的cron
linux系统由cron(crond)这个系统服务来控制的,linux系统上原来有非常多的计划性工作,因此,这个系统服务是默认启动的.cron进程每分钟会定期检查是否有要执行的任务,如果有就自动执行该 ...
- git在项目中的实际运用
项目中只运用git版本管理的情况下: 1.创建分支命令: git branch (branchname) 切换分支命令: git checkout (branchname) 当你切换分支的时候,Git ...
- 算法工程师<编程题>
<编程题> 1.[Maximum Product Subarray 求最大子数组乘积] 这个求最大子数组乘积问题是由最大子数组之和问题演变而来,但是却比求最大子数组之和要复杂,因为在求和的 ...
- 利用python进行数据加载和存储
1.文本文件 (1)pd.read_csv加载分隔符为逗号的数据:pd.read_table从文件.URL.文件型对象中加载带分隔符的数据.默认为制表符.(加载为DataFrame结构) 参数name ...