linux中memset的正确用法
2013-12-02 09:09
148 查看
linux中memset的正确用法
【起因】希望对各种类型的数组进行初始化,避免野值【函数头文件】
提示:在linux中可以在terminal中输入 "man memset"进行查询
#include
void
*memset(void *s, int c, size_t n);
【使用说明】 The
memset() function
fills the
first n
bytes of the
memory area pointed to by s with the
constant byte c.
【错误用法】
int array[10];
memset(array,1,10);//或者memset(array,1,sizeof(array)),都是不对的!
【解释】
之前一直不明白为什么memset这个函数的头文件是
"string.h",看完下面的内容,你就会明白了。
memset函数使用说明中提到的是按照byte来填充。
举例来说
char
arr[10]; memset(arr,'a',10);
由于char只占一个字节(byte),因此函数的结果是将连续的10个字节都填充为'a'。这是我们所期待的结果!
int
arr[10];memset(arr,1,10);
由于int占4个字节(byte),因此"1"对应的二进制(32bits下)为"00000000000000000000000000000001"(4bytes),塞到1byte(8bit)的中,高位被舍弃了。所以,填入数组中的值是"00000001"。然而总共有10*4=40个byte,却只有10个byte被填充,因此结果是"00000001……00000001**********"(前面总共10个"00000001")。因此,第一个数是"0x01010101"=16843009(10进制),数组其余部分的值则是随机值,读取出来会是很离谱的数!
有人说,可以这样memset(arr,1,sizeof(arr));
其实这样做,就是将数组的所有值都填充为"0x01010101",也就是int数组的初始值变为了16843009 !这确实有点出乎我们的预料!
【正确用法】
方法一:可以用任何值来初始化char数组!比如
memset(arr,'a',10);
方法二:可以用"0"来初始化任何类型数组!比如
memset(arr,0,sizeof(arr));//arr可以是char或int等类型数组!
相关文章推荐
- linux管道通信
- linux中open函数使用
- Windows mysql双向同步备份(适用linux)
- Deploy maven on Linux OS
- linux 里的一些英文缩写含义
- Ubuntu(Linux) 下 zip 命令使用详
- 查看linux发行版本方法
- Linux下常用命令
- 《鸟哥的Linux私房菜:基础学习篇》(高清第三版)
- Linux Crontab 定时任务 命令详解
- Linux内存点滴 用户进程内存空间
- Linux-根目录(/)的意义与内容
- Linux基础学习1
- Centos redmine最新版安装教程(redmine-2.4.1安装教程)
- Centos redmine最新版安装教程(redmine-2.4.1安装教程)
- linux查找命令和进程控制
- linux交叉工具链的安装
- Linux常用高级文件操作命令
- linux下vi编辑器命令大全
- Linux虚拟机下建立FTP服务器实现与host主机互传文件 - 简易版