我正在尝试在数组末尾添加=
,然后通过附加0来结束它
这就是我分配空间的方式
char* postExpr = malloc(sizeof(char)*MAX_LEN);
我尝试了很多方法,但我仍然没有添加字符' ='在我的字符串的末尾,每个其他角色都可以正常工作。
我尝试过什么
postExpr[postLen++] = 61;
postExpr[postLen++] = '=';
postExpr[postLen++] = infExpr[i];
infExpr [i]中的存储了值' ='
编辑:
char* infix2postfix (const char* infExpr) {
char* postExpr = malloc (sizeof(char)*MAX_LEN);
if(postExpr == NULL)
return NULL;
tStack* s = (tStack*) malloc(sizeof(tStack));
if(s == NULL)
{
free(postExpr);
return NULL;
}
unsigned postLen = 0;
for(int i = 0; i< MAX_LEN; i++)
{
switch(infExpr[i])
{
case '*':
case '/':
case '+':
case '-': doOperation(s,infExpr[i],postExpr,&postLen); break;
case '(': stackPush(s,infExpr[i]); break;
case ')': untilLeftPar(s,postExpr,&postLen); break;
case '=':
while(!stackEmpty(s))
{
stackTop(s,&postExpr[postLen++]);
stackPop(s);
}
postExpr[postLen++] = '='; //NO APPEND HERE!!!
postExpr[postLen++] = 0;
postLen = MAX_LEN;
break;
case 0:
postExpr[postLen++] = '=';
postExpr[postLen++] = 0;
postLen = MAX_LEN;
break;
default: postExpr[postLen++] = infExpr[i]; break;
}
}
return postExpr;
}
答案 0 :(得分:3)
在您的代码中,您可能会在之后出现的=
之后添加0
。所以,
postExpr[postLen++] = '=';
postExpr[postLen++] = 0;
应该是
postExpr[postLen-1] = '=';
postExpr[postLen++] = 0;
或者之前在你的字符串中会有NULL
个终结符。
答案 1 :(得分:1)
问题在于我的堆栈,我忘了初始化它,所以它会存储在'='之前附加的值0,从而使得char无法读取
答案 2 :(得分:1)
在我看来,你正在将postLen
的地址传递给许多不同的子程序。
然后你抱怨说,一个字符在数组中的简单赋值,由你传递的变量索引不起作用。
我的建议是做两件事:
首先,在代码的case '=':
部分,打印出postLen
以及strlen(postExpr)
以检查它们是否同步。
其次,开始查看各种子程序,看看是否可以确定postLen
值出错的位置。