2017-10-12 7 views
1

'='문자열에 추가 할어떻게 내 배열의 끝에서 <code>=</code>을 추가 한 다음이 내가 내 공간을 할당하는 방법입니다 0</p> <p>를 추가하여 종료하려고

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 깜빡, 내 스택, 그래서 그것은 '='전에 추가 때문에 당신이 지나가는 걸 그것은 나에게 보인다

2

당신이 0 후 아마 =를 추가 거기에 이전에 존재합니다. 그래서,

0

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

해야 또는 전에 문자열에 NULL 터미네이터있을 것입니다.

+0

귀하의 답변 덕분에 해결책을 찾았습니다. 더 알고 싶다면 답을 추가했습니다. 고마워요 :) –

0

읽을 수 문자를 하였다 0 값을 저장하는 것 주소가 postLen 인 경우 다른 서브 루틴이 많습니다.

그리고 나서 주위를 돌아 다니는 변수로 인덱스 된 배열의 문자 할당이 간단하지 않다는 불만이 있습니다. , 코드의 case '=': 부분,

  1. 첫째가 동기화되어 있는지 확인하는 또한 postLenstrlen(postExpr)을 인쇄 :

    내 조언 두 가지 작업을 수행하는 것입니다.

  2. 두 번째로 다양한 서브 루틴을 살펴보고 postLen 값이 잘못된 부분을 확인할 수 있는지 확인하십시오.

+0

난 이미 그것을 해결했지만, 시간 내 주셔서 감사합니다 :) –