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

[求助]弱问C语言一变量赋值问题

lixians
2009/10/21镜像同步12 回复
各位大牛,我的C语言程序中,有一段代码是要连续读入两个变量,起先我都是用%d往里读,没有任何问题。后来为了添加容错功能,改为了用%s往里读。结果修改之后,若是给第二个变量赋值超过两位的话,就会挤掉第一个变量的值。是存储空间不够么?两个变量相互之间怎么还会影响呢?亟盼各位大牛不吝指点。。。。。。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
FadeToBlack机器人#1 · 2009/10/21
上代码 你所说的%s读是怎么读?读到str里再处理? 【 在 lixians (5he) 的大作中提到: 】 : 各位大牛,我的C语言程序中,有一段代码是要连续读入两个变量,起先我都是用%d往里读,没有任何问题。后来为了添加容错功能,改为了用%s往里读。结果修改之后,若是给第二个变量赋值超过两位的话,就会挤掉第一个变量的值。是存储空间不够么?两个变量相互之间怎么还会�
django机器人#2 · 2009/10/21
无代码无真相
lixians机器人#3 · 2009/10/21
稍等,代码比较长。。。。
lixians机器人#4 · 2009/10/21
就是“dig_new”和“cha_new”这两个变量,cha_new会挤掉dig_new的值 =============================================== else if(strcmp(choice1,"3")==0) { printf("\n The default values are: digital = 4, chance = 8.\n"); printf("\n The current values are: digital = %d, chance = %d.\n",digital,chance); printf("\n\n Please input the new values:\n"); back4: printf("\n digital = "); scanf("%s",dig_new); flag=0; if(strlen(dig_new)>1){if(strcmp(dig_new,"10")!=0)flag=1;} else if(dig_new[0]-'0'<=0||dig_new[0]-'0'>9) flag=1; if(flag==1) { printf("\nSorry, the range should be from 1 to 10."); printf(" Try again please.\n\n\a"); goto back4; } back5: printf("\n chance = "); scanf("%s",cha_new); flag=0; for(int n=0; n<strlen(cha_new); n++) if(cha_new[n]-'0'<0 || cha_new[n]-'0'>9){flag=1;break;} if(flag==0) { chance_new=0; for(int o=0; o<strlen(cha_new); o++) chance_new+=pow(10,o)*(cha_new[strlen(cha_new)-1-o]-'0'); } if(chance_new<0||flag==1) { printf("\nSorry, you should input an integer."); printf(" Try again please.\n\n\a"); goto back5; }
lixians机器人#5 · 2009/10/21
程序起始处的变量声明如下: char check[2],dig_new[2],cha_new[2],input[10],choice1[2]="1",choice2[2]="1";
jmpesp机器人#6 · 2009/10/21
【 在 lixians 的大作中提到: 】 : 程序起始处的变量声明如下: : char check[2],dig_new[2],cha_new[2],input[10],choice1[2]="1",choice2[2]="1"; 这个情况当然会出现了,数组越界溢出了啊。。。覆盖掉了
lixians机器人#7 · 2009/10/21
也就是说如果把第二个变量改为cha_new[3],输入2位数就没问题了是么? 但它为什么不往后继续存储,而是要覆盖前面的值呢? 【 在 jmpesp 的大作中提到: 】 : 这个情况当然会出现了,数组越界溢出了啊。。。覆盖掉了
jmpesp机器人#8 · 2009/10/21
【 在 lixians 的大作中提到: 】 : 也就是说如果把第二个变量改为cha_new[3],输入2位数就没问题了是么? : 但它为什么不往后继续存储,而是要覆盖前面的值呢? 恩,没问题
jmpesp机器人#9 · 2009/10/21
【 在 lixians 的大作中提到: 】 : 也就是说如果把第二个变量改为cha_new[3],输入2位数就没问题了是么? : 但它为什么不往后继续存储,而是要覆盖前面的值呢? 这是栈的分配情况,如果你熟悉汇编就会很明白了 一般局部变量都是这样分配 push ebp mov easp, esp sub esp, 局部变量的总共大小 然后引用某个局部变量就这样引用 [ebp - 局部变量位置]