免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: jnjn999
打印 上一主题 下一主题

[C] memset的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-06-24 15:23 |只看该作者
奇怪的问题...

论坛徽章:
0
12 [报告]
发表于 2010-06-24 15:26 |只看该作者
struct xxx aa;

memset(&aa, 0xf, sizeof(struct xxx));

memset(&aa, 0xff, sizeof(struct xxx)); ...
jnjn999 发表于 2010-06-24 14:53



    区别就是一个是用ASCII码为0xf的字符填充,而另外一个用ASCII码为0xff的字符填充。

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
13 [报告]
发表于 2010-06-24 15:29 |只看该作者
区别就是一个是用ASCII码为0xf的字符填充,而另外一个用ASCII码为0xff的字符填充。
mgqw 发表于 2010-06-24 15:26



    嗯!

论坛徽章:
0
14 [报告]
发表于 2010-06-24 15:59 |只看该作者
目前没见过用0x0f填充的,只见过0xff的或者0的,并且只在嵌入式存储上见过

论坛徽章:
0
15 [报告]
发表于 2010-06-24 16:36 |只看该作者
0xf--->0x0f

论坛徽章:
0
16 [报告]
发表于 2010-06-24 17:05 |只看该作者
本帖最后由 wmmy2008 于 2010-06-24 17:07 编辑

实在不行写个测试出来看看直观些,,把内存数据打印出来撒
#include <stdio.h>
struct st{
        char a,b,c;
};
int main(void)
{
                struct st test;
                char *p ,u;
               
                p = (char *)&test;
                memset(&test ,0xf ,sizeof(test));
                for(u = 0 ; u < sizeof(test) ; u++)
                        printf("value[%d] = 0x%x\n" , u , *p++);
                       
                printf("\n");
                p = (char *)&test;
                memset(&test ,0xff ,sizeof(test));
                for(u = 0 ; u < sizeof(test) ; u++)
                        printf("value[%d] = 0x%x\n" , u , *p++);
                       
                return 0;
}

论坛徽章:
0
17 [报告]
发表于 2010-06-24 17:18 |只看该作者
打印出来的结果是 :

value[0] = 0xf
value[1] = 0xf
value[2] = 0xf

value[0] = 0xffffffff
value[1] = 0xffffffff
value[2] = 0xffffffff

有个问题不解,,为啥子后面的三个值打印出来是四个字节的..高手解答一下?

论坛徽章:
0
18 [报告]
发表于 2010-06-24 17:38 |只看该作者
打印出来的结果是 :

value[0] = 0xf
value[1] = 0xf
value[2] = 0xf

value[0] = 0xffffffff
valu ...
wmmy2008 发表于 2010-06-24 17:18



类型提升了,char转换成int了

论坛徽章:
0
19 [报告]
发表于 2010-06-24 17:39 |只看该作者
前面3个也提升了

论坛徽章:
0
20 [报告]
发表于 2010-06-24 17:44 |只看该作者
回复 19# 爱吃菠菜


    应该不是这个原因啊,,如果前面三个也强制为int ,那输出来的就不是0x0f了 。。
  只有内存全部初始化为0xFF时,才打印出四个字节的.其他的都是一个字节。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP