2017-10-12 74 views
1

我想在我的数组的末尾添加=,然后通过附加0如何追加“=”为字符串

这是我如何分配我的空间结束它

char* postExpr = malloc(sizeof(char)*MAX_LEN); 

我尝试了很多方法,但我仍然无法在字符串末尾添加字符'=',其他字符都可以正常工作。

什么,我是用infExpr [I]试图

postExpr[postLen++] = 61; 
postExpr[postLen++] = '='; 
postExpr[postLen++] = 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; 
} 
+1

请显示完整的代码。这个角色没有什么特别之处。 –

+0

这里发布的内容不足以显示问题。请用[最小,完整,可验证示例]更新您的问题(http://stackoverflow.com/help/mcve)。 – dbush

+0

我看不到在代码本身中张贴的贴子。 –

回答

1

的问题是与我的筹码,我忘了initializate它,所以它会存储值0这是之前“=”附加制成,因此焦炭不可读

2

在你的代码是0后加入=可能这是以前出现在那里。所以,

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

应该

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

还是会有NULL终止您的字符串之前。

+0

感谢您的回答,我发现了我的解决方案,如果您有兴趣了解更多信息,我会添加答案。谢谢:) –

0

在我看来,你是传递地址postLen到很多不同的子程序。

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

我的建议是做两件事情:

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

  2. 其次,开始寻找你的各种子程序,看看你能否确定postLen值出错的地方。

+0

我已经解决了,但谢谢你的时间:) –