免费注册 查看新帖 |

Chinaunix

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

[C] 大家来分析一下此面试题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-08-14 15:31 |只看该作者
问题就出在没有强制转换成 unsigned char上。
%2.2x 就是输出至少占两个字符吧,后面的 .2真不知 ...
pandaiam 发表于 2010-08-14 10:58



    为什么需要转换成unsigned char类型?

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
12 [报告]
发表于 2010-08-14 15:55 |只看该作者
printf 函数的格式输入为 %x的时候,后面的输入的参数要转为unsigned int.

因为定义成了 char 但是却赋值为 0xfc,明显溢出了,变成了一个负数。
转换过程为 char->int->unsigned int
char->int 过程中,因为要保持为负数,所以前面都补1了。

应该是这样,请大虾赐教啊。

关于格式化那个,还没有测试。{:3_199:}

论坛徽章:
0
13 [报告]
发表于 2010-08-14 16:15 |只看该作者
你的memset(...,0,...)有问题,因为你的szstring数组是char型的,所以想将内存置零应该写memset(szstring,'\0',sizeof(szstring)) ;要么肯定程序崩掉了,底下的printf输出格式我也忘了,看看别人怎么说吧.帮顶一下.

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
14 [报告]
发表于 2010-08-14 16:27 |只看该作者
%10d 表示至少占10个字宽。
%10.5d  表示至少占10字宽,后面的5表示这个数实际显示的长度,这个不好表达啊。{:3_191:}

比如 一个整数100
[%d] 就是[100]
[%10d]    [       100]
[%10.5d] [     00100]

%x同理

printf()选项太多了,好多都不知道。。{:3_190:}

论坛徽章:
0
15 [报告]
发表于 2010-08-14 19:13 |只看该作者
你的memset(...,0,...)有问题,因为你的szstring数组是char型的,所以想将内存置零应该写memset(szstring,'\0 ...
thupinUnion 发表于 2010-08-14 16:15



    memset经测试,没有问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP