|
发表于 2016-11-15 21:20:18
|
显示全部楼层
本帖最后由 fc1735 于 2016-11-15 23:28 编辑
我也觉得很奇怪,在内存中name[256]在height的后面,如果是name[256]在height的前面就不会影响
- #include <stdio.h>
- int main(){
- char name[256];
- unsigned char height; //用1个byte来存放数字(0~255)
- float mass;
-
- printf("请输入您的姓名:");
- scanf("%s", name);
-
- printf("请输入您的身高(cm)");
- scanf("%u",&height); //%u为4个字节,放到height的地址处,数值在256内时,第一个byte存放其数值,后面3个byte均存放0,但后面的地址是前面的name[0] ,name[1],name[2]的内容,故原本输入的名字被0即空字符覆盖掉了
-
- printf("请输入您的体重(kg)");
- scanf("%f",&mass);
-
- printf("%s的身高为%.2f(in),体重为%.2f(lb)",name,height/30.48*12,mass*2.2046); //name[0]为空字符,即返回。
-
- return 0;
- }
复制代码
解决办法是先输入身高再输入姓名,就不会被覆盖,但前提是你知道内存中排列的顺序,所以这样写的话,虽然省了3个byte去存放数值,但在不知道存放顺序的情况下,要运行完或反编译之后再来修正原代码
另外正确的scanf 字符参数,要把输入的无符号数值以一个byte存放的话 是%hhu 这样就不会越界覆盖到name[0]~name[2]的位置
鱼币 |
评分
-
查看全部评分
|