现在的位置: 首页 > 综合 > 正文

关于memset的一些东西

2014年01月07日 ⁄ 综合 ⁄ 共 1110字 ⁄ 字号 评论关闭

之前只是知道memset一般只用来赋初值,后来一次看cplusplus看到了关于memset的描述,发现它是将设定的值怎么转化成字符..但是当时很迷,有很偶然的机会看到了下面的文章,觉得还好,放在这里做个记录吧~

 

 

 

读一下下段程序段,你认为f中执行下列语句后会出现什么值呢?

 

 

 

当然,首先想到的一定是1.f中的值都被赋为了1。

memset(f,0,sizeof(f))能够实现对f的清0工作。

 

但是你要是运行上述程序段,你会发现你的想法完全错了。输出的结果是16843009!!!输出的是乱码?让我们看看memset的函数原型:

 

 

其实memset是对每个字节赋值,而我们给赋值的是int型的数据,有四个字节,所以数组f中的每个数据被赋作了00000001000000010000000100000001,也就是十进制的16843009.

而对0,赋值的时候,赋成0x0000,还是0;对-1赋值为0xFFFF,与F没多大区别,都是-1的补码。所以这两个特殊值不会有错。

关于NULL,/0:

stdio.h中有这句:

#define NULL 0

NULL在编译时都转换为0了;

/0是ascll码中编号为0的那个字符,也就是(int)(/0)==0;

所以memset(a,’/0’,sizeof(a))也是对的。

要对其他值进行赋值,还是用循环赋值更方便些,memset就帮不了什么忙了。

 

转自 http://blog.163.com/wuzi_@126/blog/static/73817283200893175543889/

 

抱歉!评论已关闭.