如何附加' ='到一个字符串

时间:2017-10-12 17:32:13

标签: c arrays char

我正在尝试在数组末尾添加=,然后通过附加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;
}

3 个答案:

答案 0 :(得分:3)

在您的代码中,您可能会在之后出现的=之后添加0。所以,

        postExpr[postLen++] = '=';
        postExpr[postLen++] = 0;

应该是

        postExpr[postLen-1] = '=';
        postExpr[postLen++] = 0; 

或者之前在你的字符串中会有NULL个终结符。

答案 1 :(得分:1)

问题在于我的堆栈,我忘了初始化它,所以它会存储在'='之前附加的值0,从而使得char无法读取

答案 2 :(得分:1)

在我看来,你正在将postLen的地址传递给许多不同的子程序。

然后你抱怨说,一个字符在数组中的简单赋值,由你传递的变量索引不起作用。

我的建议是做两件事:

  1. 首先,在代码的case '=':部分,打印出postLen以及strlen(postExpr)以检查它们是否同步。

  2. 其次,开始查看各种子程序,看看是否可以确定postLen值出错的位置。