循环期间在数组中过度写入的值

我目前正试图将一个等式转换为更简单的形式,并发现我的代码在循环结束时过度写入了值

我发现了类似的讨论,但并不完全是我想要的。大多数文章都使用其他语言,所以我无法得到答案

如有任何答案,我们将不胜感激

以下是我的代码

int index=0;
int结果=0;
char-tresult[100];
char*方程[100]={NULL,};
char*temp=strtok(输入“);
对于(int i=1;i<x;i=i+2)
{
char*temp_符号=方程[i];
如果(*临时符号=='*'))
{
结果=atoi(方程式[i-1])*atoi(方程式[i+1]);
sprintf(tresult,“d”,result);
方程[i-1]=tresult;
sprintf(方程式[i],“d”,0);
sprintf(方程式[i+1],“d”,0);
}
}
对于(int j=0;j<x;j++)
{
printf(“%s”,等式[j]);
}

预期投入

5*3+1*2

目标产量

150+200

我将通过添加额外代码将0删除,使其成为

15+2

但目前,我的输出看起来像

200+200

当我打印出循环中的值时,所有值都正确显示。造成这种问题的原因可能是什么

如果我们画出指针,可能更容易理解

假设输入最初等于”;5*3+1*2“,然后在循环之后,方程将如下所示:

+-------------+
|方程[0]|------------------------\
+-------------+                         |
|方程[1]|-->|输入[2]|……|124;+------------+-----+
+-------------+>-->tresult[0]||
|方程[2]|-->|输入[4]|……|124;+------------+-----+
+-------------+                         |
|方程[3]|------------------------/
+-------------+
|方程[4]|-->|输入[10]||
+-------------+
|方程[5]|-->|输入[12]||
+-------------+

如上所述;图纸;方程[0]方程[3]都将指向单个数组的第一个字符tresult

tresult将始终包含最后一次使用sprintf写入其中的内容(tresult,“d”,result)。在您的示例中,哪个将是“;2“

发表评论