memset和memset_s
void *memset(void *s, int ch, size_t n);
函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的 结构体 或 数组 进行清零操作的一种最快方法
代码示例:
float stretch_p[256], stretch_p1[256], stretch_num[256];
//清空三个数组,初始化填充数组元素为0
memset(stretch_p, 0, sizeof(stretch_p));
memset(stretch_p1, 0, sizeof(stretch_p1));
memset(stretch_num, 0, sizeof(stretch_num));
errno_t memset_s(void * dest,rsize_t destsz,int ch,rsize_t count)
运行时检测到以下错误,并且如果dest和destsz本身有效,则在将ch存储到目标范围[dest,dest + destsz)的每个位置之后调用当前安装的约束处理函数:
dest 是一个空指针
destsz或count大于RSIZE_MAX
count大于destsz(会发生缓冲区溢出)
如果由dest <count <= destsz指向的字符数组的大小,行为是未定义的; 换句话说,destsz的错误值不会暴露即将发生的缓冲区溢出。 作为所有边界检查函数,只有当__STDC_LIB_EXT1__由实现定义时,以及在包含string.h之前用户将__STDC_WANT_LIB_EXT1__定义为整数常量1时,memset_s才能保证可用。
sext-指向要填充的对象的指针
ch-填充字节
count-要填充的字节数
destsz-目标数组的大小
返回值
1) dest 副本
2)成功时为零,错误时为非零。 同样出错的是,如果dest不是空指针并且destsz有效,那么将destsz填充字节ch写入目标数组。
注意
如果此函数修改的对象在其余生命期内(例如,gcc bug 8537)不再被访问,则memset可能会被优化(在as-if规则下)。 因为这个原因,这个函数不能用来擦洗内存(例如,填充一个存储密码为零的数组)。 memset_s禁止这种优化:保证执行内存写入。 第三方解决方案包括FreeBSD explicit_bzero或Microsoft SecureZeroMemory。
memset和memset_s相关推荐
- C语言函数大全-- m 开头的函数(1)
C语言函数大全 本篇介绍C语言函数大全-- m 开头的函数 1. malloc 1.1 函数说明 函数声明 函数功能 void *malloc(size_t size); 用于动态分配内存 参数: s ...
- 安全函数最全总结:字符串拷贝,内存拷贝,字符串格式化等
对于安全函数和非安全函数有几个方面需要比较: 入参.安全函数会比非安全函数多一个目的缓冲区长度,这个参数一般紧跟着目的缓冲区指针,作为函数的第二个入参. 函数返回值.非安全函数也就是系统函数,比如字符 ...
- c语言s-next,memset_s - [ C语言中文开发手册 ] - 在线原生手册 - php中文网
在头文件中定义void * memset(void * dest,int ch,size_t count);(1) errno_t memset_s(void * dest,rsize_t dests ...
- 疑问:c++中的memset
在dev c++下调试 1 #include <mem.h> 2 #include <iostream.h> 3 #include <cstdlib> ...
- C++ memset
memset的主要功能是对一片内存进行赋值(逐字节进行) 包含在头文件#include < cstring >中. 函数模板 void *memset(void *s, int v, si ...
- c++ memset 语言_自学C语言不知道从哪儿下手?学习框架都帮你列好了!
首先up主发现头条上居然没有技术板块,不知道是不是我没看见,那么我就做头条技术萌新大佬哈哈哈哈,想想都刺激, 普通人学习c语言大概需要3个月时间,每天码代码,学好了c,你会发现c++基本只需要1个月不 ...
- memset()函数用法及其作用
memset()函数原型是: extern void *memset(void *buffer, int c, int count) //buffer:为指针或是数组, //c:是赋给buffer的值 ...
- memset初始化内存
在suse 9,运行man memset 查看memset的解释如下: "NAME memset - fill memory with a constant byte SYNO ...
- C语言memset函数详解(Linux下和windows下的差异)
memest原型 (please type "man memset" in your shell) void *memset(void *s, int c, size_t n); ...
最新文章
- 闽江夜话:聆听清华之声,畅聊数字中国的未来
- 软件配置文件如何读写
- javascript 红宝书笔记之如何使用对象 如何操作数组
- Tensorflow:Tensorboard使用
- 找最大公约数和最小公倍数(c语言实现)
- Confluence 6 针对你的数据库类型确定校验 SQL
- 【MySQL】MySQL show index 索引信息
- Python使用Apriori算法分析导演请某演员后还会请哪个演员
- 软件工程第二次课课堂总结
- CH340串口驱动的官网下载链接地址(包含各大操作系统平台)
- 笔记-SIM900A模块开发:GPRS建立TCP连接与服务器进行数据传输
- git从远程仓库拉取指定日期版本的代码到本地
- [内附完整源码和文档] 基于JSP网上招聘系统的设计与实现
- javaScript实现通过鼠标滑轮改变元素大小
- 老挑毛 U盘 winPe 制作 流程
- linux下学习db2
- 阿里云,华为云哪个好?
- Codis的原理以及部署—— CODIS (分布式 Redis 解决方案)
- Smart200 PLC实现Bool信号接通延时、关闭延时作用
- Quartus II 11.0 破解成功后,编译时却提示不支持 xxx器件的ERROR