局部数组的残留问题
下面是我做的一个计算器程序的一部分。
Get_str为输入的表达式数组,当它为数字或小数点的时候赋给局部数组tmp,再用sscanf赋给operand,并压入栈OPND。
但输入13+3的时候发现栈里面的内容为13和33.。。求解
while(Get_str[pcur]!='\0')
{
if(Get_str[pcur]==' '||Get_str[pcur]=='\n'){
pcur++;}
else if(isdigit(Get_str[pcur])||Get_str[pcur]=='.')
{
char tmp[N];
while(isdigit(Get_str[pcur])||Get_str[pcur]=='.')
tmp[cnt++]=Get_str[pcur++];
if(cnt) {
sscanf(tmp,"%lf",&operand);
OPND.push(operand);
cout<<"top:"<<OPND.top()<<endl;
cnt=0;
operand=0.0;}
}
[解决办法]
这是初始化,也可以不用初始化,但需要每次复制完字符串后,在结尾加上null。不初始化的话数组内部的值是不确定的,例如第二次复制时,tmp[1]就保留了第一次复制时的值'3',所以你就得出了33这个结果。