2017-10-12 51 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

我已經解決了,但謝謝你的時間:) –