memset函数的正确使用与原理
2016-07-28 15:37
267 查看
头文件:#include<string.h>
经常用这个初始化,没想到最后错误也是因为它。
函数原型为
这个函数后面的参数里buffer是数组或指针,b是要初始化的ASCLL码值,size是初始化数据的字节长度。一个字
符是1个字节,这本来用于初始化char类型的数组一点也没问题,但人们总喜欢干点别的事,总想让它把别的也都
初始化了。当你要初始化的东西为0时,不管这个数据类型的字节是多少,它都会把每一个字节初始化为0,于是
一堆0,最后转换为二进制也是一堆0,达到初始化为0的目的,但对于别的数据类型他也只能初始化为0了。
char的例子
这样也可以。
反例:
忘还没查过memset原型的朋友们不要以为这个初始化是万能的,毕竟他的头文件是<string.h>。
fill(first,last,val)挺不错的。
经常用这个初始化,没想到最后错误也是因为它。
函数原型为
void* cb_memset(void* buffer, int b, size_t size)
这个函数后面的参数里buffer是数组或指针,b是要初始化的ASCLL码值,size是初始化数据的字节长度。一个字
符是1个字节,这本来用于初始化char类型的数组一点也没问题,但人们总喜欢干点别的事,总想让它把别的也都
初始化了。当你要初始化的东西为0时,不管这个数据类型的字节是多少,它都会把每一个字节初始化为0,于是
一堆0,最后转换为二进制也是一堆0,达到初始化为0的目的,但对于别的数据类型他也只能初始化为0了。
char的例子
#include<stdio.h> #include<string.h> int main() { char a[11]="I LOVE YOU"; puts(a); memset(a,3,10*sizeof(char)); puts(a); return 0; } //xin的ASCLL值是3; //不要把\n也初始掉;
#include<stdio.h> #include<string.h> int main() { char a[11]="I LOVE YOU"; puts(a); memset(a,'*',10*sizeof(char)); puts(a); return 0; }
这样也可以。
反例:
#include<stdio.h> #include<string.h> void print(int a[]) { int i; for(i=0; i<5; i++) printf("%d",a[i]); printf("\n"); } int main() { int a[5]= {1,2,3,4,5}; print(a); memset(a,1,sizeof(a)); print(a); return 0; }
忘还没查过memset原型的朋友们不要以为这个初始化是万能的,毕竟他的头文件是<string.h>。
fill(first,last,val)挺不错的。
相关文章推荐
- 【三角形专题】
- java_匿名内部类
- echart扩展百度map报错“Dom’s width & height should be ready before init.”的对应办法
- sparkSQL中 DataSet 和 DataFram区别
- POJ 1330 Nearest Common Ancestors 【LCA·Tarjan离线算法】
- Linux Used内存到底哪里去了?
- poj 1265
- 浅析Java中的final关键字(转)
- iOS 使用AFNetworking实现多张图片上传
- oracle异常ORA-01653--表空间满了
- poj 3602 Avoid The Lakes【DFS】
- 微信支付返回-1的问题集锦与各种爬坑过程
- cordova platform add android 报错问题解决
- js-事件代理
- python定位性能的工具
- C# byte[]、struct、intptr等的相互转换
- 使用Theano实现kaggle手写识别:multilayer perceptron
- Android多用户原理和实现
- Swift函数
- Android xutils3.0 使用