memest函数用法说明(转自Lee.Kevin)
memest原型 (please type "man memset" in your shell)
void *memset(void *s, int c, size_t n);
memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。
常见的三种错误
第一: 搞反了c 和 n的位置.
一定要记住 如果要把一个char a[20]清零, 一定是 memset(a, 0, 20)
而不是 memset(a, 20, 0)
第二: 过度使用memset, 我想这些程序员可能有某种心理阴影, 他们惧怕未经初始化的内存, 所以他们会写出这样的代码:
char buffer[20];
memset(buffer, 0, sizeof(char)*20);
strcpy(buffer, "123");
这里的memset是多余的. 因为这块内存马上就被覆盖了, 清零没有意义.
第三: 其实这个错误严格来讲不能算用错memset, 但是它经常在使用memset的场合出现
int some_func(struct something *a){
…
…
memset(a, 0, sizeof(a));
…
}
问:为何要用memset置零?memset( &Address, 0, sizeof(Address));经常看到这样的用法,其实不用的话,分配数据的时候,剩余的空间也会置零的。
答: 1.如果不清空,可能会在测试当中出现野值。 你做下面的试验看看结果()
char buf[5];
CString str,str1; //memset(buf,0,sizeof(buf));
for(int i = 0;i<5;i++)
{ str.Format(“%d “,buf[i]); str1 +=str ; }
TRACE(“%s\r\n“,str1)
2.其实不然!特别是对于字符指针类型的,剩余的部分通常是不会为0的,不妨作一个试验,定义一个字符数组,并输入一串字符,如果不用memset实现清零,使用MessageBox显示出来就会有乱码(0表示NULL,如果有,就默认字符结束,不会输出后面的乱码)
问:
如下demo是可以的,能把数组中的元素值都设置成字符1,
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int main() 5 { 6 char a[5]; 7 memset(a,'1',5); 8 for(int i = 0;i < 5;i++) 9 cout<<a[i]<<" "; 10 system("pause"); 11 return 0; 12 }
而,如下程序想吧数组中的元素值设置成1,却是不可行的
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int main() 5 { 6 int a[5]; 7 memset(a,1,5);//这里改成memset(a,1,5 *sizeof(int))也是不可以的 8 for(int i = 0;i < 5;i++) 9 cout<<a[i]<<" "; 10 system("pause"); 11 return 0; 12 }
问题是:
1,第一个程序为什么可以,而第二个不行,
2,不想要用for,或是while循环来初始化int a[5];能做到吗?(有没有一个像memset()这样的函数初始化)
答:
1.因为第一个程序的数组a是字符型的,字符型占据内存大小是1Byte,而memset函数也是以字节为单位进行赋值的,所以你输出没有问题。而第二个程序a是整型的,使用memset还是按字节赋值,这样赋值完以后,每个数组元素的值实际上是0x01010101即十进制的16843009。你看看你输出结果是否这样?
2.如果用memset(a,1,20);
就是对a指向的内存的20个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是1000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了。
转载于:https://www.cnblogs.com/iamxiaoyubei/p/5064821.html
memest函数用法说明(转自Lee.Kevin)相关推荐
- format函数python的顺序_[转载] Python中format函数用法
Python中format函数用法 format优点 format是python2.6新增的格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1.不需要理会数据类型的问题,在%方法中%s只能 ...
- python中sleep函数用法_python中sleep函数用法实例分析
本文实例讲述了python中sleep函数用法.分享给大家供大家参考.具体如下: Python中的sleep用来暂停线程执行,单位为秒 #------------------------------- ...
- Python中format函数用法
Python中format函数用法 format优点 format是python2.6新增的格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1.不需要理会数据类型的问题,在%方法中%s只能 ...
- python中sleep的用法_python中sleep函数用法实例分析
本文实例讲述了python中sleep函数用法.分享给大家供大家参考.具体如下: Python中的sleep用来暂停线程执行,单位为秒 #------------------------------- ...
- [转载] Python中format函数用法
参考链接: Python | format Python中format函数用法 format优点 format是python2.6新增的格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1. ...
- 2021年大数据常用语言Scala(三十七):scala高级用法 高阶函数用法
目录 高阶函数用法 作为值的函数 匿名函数 柯里化(多参数列表) 闭包 高阶函数用法 Scala 混合了面向对象和函数式的特性,在函数式编程语言中,函数是"头等公民",它和Int. ...
- php foreach嵌套foreach,php中foreach怎么嵌套foreach PHP中foreach函数用法?
foreach的使用方法小编不是很明确,分享达人指教一下.foreach (array_expressforeach($array as $key) { if(xxxx) { break; //bre ...
- linux中awk下 gsub函数用法
gsub函数则使得在所有正则表达式被匹配的时候都发生替换 gsub(regular expression, subsitution string, target string);简称 gsub(r,s ...
- ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)
ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...
最新文章
- 《中国人工智能学会通讯》——5.15 案例速览
- 你的 webpack 也需要休息,让你的 webpack 拒绝 996ICU
- css3让元素自适应高度
- 【控制】《自动控制原理》胡寿松老师-第7章-线性离散系统的分析与校正
- Thymeleaaf中设置属性值实现动态控制select是否可选
- TCP、UDP、IP 协议分析
- 从动力学角度看优化算法:一个更整体的视角
- 数据库-优化-每个字段的说明
- spring整合mybatis基于xml配置
- php保存附件到指定服务器,如何在PHP中将电子邮件附件保存到服务器?
- 被问到一个简单的脚本后
- 设置gradle远程仓库_有幸得到Alibaba内部Gradle实战笔记,趁双节来狂补
- PHP7语法知识(三):时间与日期、表单、类与对象、正则表达式、错误异常处理、图像处理...
- PSP金手指CMF_r21d修改版安装方法
- 如何激发孩子的想象力_如何培养孩子想象力
- 初学ASP.Net时在论坛收藏收集的一些资料备忘
- oracle12兼容ojdbc6,oracle ojdbc6 使用 报错
- iperf3网络测试工具下载网址
- 日常开发中,String类中常用的方法
- 一文告诉您游戏开发需要学什么
热门文章
- CTFshow 信息收集 web20
- sdut 1488 连通分量的个数(并查集)
- 怎么在Caffe中配置每一个层的结构
- findContours函数
- Share memory中bank conflict问题
- 干净卸载mysql (注册表)
- VC2005中依然没有Refactoring和Code Expansion.
- support library目录解释说明内容
- ZOJ18th省赛 Lucky 7
- java基本输入类型数据System.out.println()或System.out.print()