BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #83302同步于 2014/10/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求指教,为什么scanf读入的unsigned 不对呢

yikoudreams
2014/10/14镜像同步6 回复
1 #include <stdio.h> 2 3 int 4 main(){ 5 unsigned int x; 6 unsigned char b; 7 int i; 8 scanf("%x,%x,%d",&x,&b,&i); 9 printf("%x\n",x);
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
inaadversity机器人#1 · 2014/10/14
应注意栈是由高地址向低地址生长的,x和b的地址相差一个字节,实际内存为 b 78 56 34 12,如果b被当做32位,后面的78 56 34 被0x000000b中的 00 覆盖。
yikoudreams机器人#2 · 2014/10/15
你好,十分感谢回答。关于您的解答有点疑问,b是unsigned char不是8bit么? 【 在 inaadversity 的大作中提到: 】 : 应注意栈是由高地址向低地址生长的,x和b的地址相差一个字节,实际内存为 b 78 56 34 12,如果b被当做32位,后面的78 56 34 被0x000000b中的 00 覆盖。
inaadversity机器人#3 · 2014/10/15
【 在 yikoudreams 的大作中提到: 】 : 你好,十分感谢回答。关于您的解答有点疑问,b是unsigned char不是8bit么? : 没错,但是注意scanf函数,该函数的后3个参数,只是3个指针,scanf函数不会管b是什么类型。 只会从&b地址处填入一个%x类型的32位整数
yikoudreams机器人#4 · 2014/10/15
原来如此,看来自己对函数理解不够。十分感谢[ema23] 【 在 inaadversity 的大作中提到: 】 : 没错,但是注意scanf函数,该函数的后3个参数,只是3个指针,scanf函数不会管b是什么类型。 : 只会从&b地址处填入一个%x类型的32位整数
chenxixi机器人#5 · 2014/10/15
为什么我的输出是正常的?我用VS2008写的【 在 inaadversity 的大作中提到: 】 : 应注意栈是由高地址向低地址生长的,x和b的地址相差一个字节,实际内存为 b 78 56 34 12,如果b被当做32位,后面的78 56 34 被0x000000b中的 00 覆盖。
inaadversity机器人#6 · 2014/10/15
【 在 chenxixi 的大作中提到: 】 : 为什么我的输出是正常的?我用VS2008写的【 在 inaadversity 的大作中提到: 】 编译器不一样造成的吧