我在使用strcat时遇到了细分错误,请告诉我出了什么问题

时间:2019-06-08 17:43:59

标签: c

void rpn(char*text)
{static int j=0;
char st[10];
char str[80]="";
int i;
int n=strlen(text);
for(i=0;i<n;i++)
{printf("enter\n");
    if(text[i]=="(")
    {
       continue; 
    }
    else if(text[i]=='+'||text[i]=='*'||text[i]=='-'||text[i]=='/'||text[i]=='^')
    {
      st[j]=text[i];
      printf("%c\n",st[j]);
      j++;
    }
    else if(text[i]==')')
    {
       strcat(str,st[j]);
       printf("%c\n",str);
        j--;
    }
    else
    {   
        printf("yay\n");
       strcat(str,text[i]);
       //strcat(str,'\0');
       printf("%c\n",str);
    }
}
if(st[j]!="null")
{int k;
    for(k=j;k>=0;k--)
    {
        strcat(str,st[j]);
    }
}

}
int main()
{
printf("find ex\n");
char texts[]="((a+t)*((b+(a+c))^(c+d)))";
rpn(texts);
return 0;
}

输出: 找到前
输入

分段故障 它打印yay,但是当它必须从text [i]复制字母“ a”到str时,它显示分段错误。 我不明白为什么我尝试了所有分配了额外空间的东西,但似乎什么也没用。

1 个答案:

答案 0 :(得分:3)

您的代码中有几个问题

  

static int j = 0;

为什么 j 是静态的,同时又用作 st 中的索引,而不是静态

  

if(text [i] ==“(”)

无效,您将字符与字符串进行比较,行为未定义

  

strcat(str,st [j]);

无效,第二个参数是字符而不是字符串

  

printf(“%c \ n”,str);

无效,格式等待 int (作为打印字符的代码),但参数为字符串

  

strcat(str,text [i]);

无效,第二个参数是字符而不是字符串

  

if(st [j]!=“ null”)

无效,您比较字符和字符串,行为未定义

  

strcat(str,st [j]);

无效,第二个参数是字符而不是字符串

请注意,在先前的问题中,还有一种保护措施,可以避免通过无效索引(对于两个数组太大,或者对于 st 为负)读取/写入数组。表情太糊糊了')')

st 可能必须是char*的数组,而不是 char 的数组(更改其类型不足以使代码正确)< / p>


似乎您想解析表达式,但是您期望得到什么结果?