2010-10-15 53 views
-1

嗨,我工作的一個程序,獲得一個後綴表達式並計算出它..讀字符串不會正確

我有兩個功能:

  1. 轉換綴與postfix
  2. 計算後綴

當我嘗試小表情,就像1 + 1或(1 + 1)* 1,它工作正常 但是當我使用所有的操作數我得到的東西討厭,

這裏是例子: 2 * 2/2 + 1-1 得到這樣的: 222/* 11- +T_CHECKÖÐ7█Ã

如果你看到的,表達的是正確的,直到'? T」

我相信它的一些參數的錯誤,所以我就把這頭這裏返回值

1日)

char* convert(char *infix); 
char *post = (char *)malloc(sizeof(char)*tamP); 
return post; 

2日)

int evaluate(char *postfix) 
while (*postfix != '\0') 
return result; 

來電)

char* post = convert(infix); 
result = evaluate(post); 

感謝

+1

我想你還應該提到convert(char *)的定義。 – 2010-10-15 18:47:41

+0

這是沒有足夠的信息可以肯定地說,但如果字符串末尾有「垃圾」,請仔細檢查您的代碼是否在構建完成後始終在末尾放置'\ 0'字符。 – aschepler 2010-10-15 18:49:14

+0

這些代碼片段不完整:沒有解析或轉換代碼。什麼是「tamP」和「結果」?你如何閱讀字符串?你如何寫結果字符串?你得到的任何答案只是猜測,直到你發佈更完整的東西。 – 2010-10-15 18:52:56

回答

1

您可能未在convert(char *)函數中的'post'末尾(最後一個明智的字符之後)添加'\ 0'字符。這是我能想到的一個原因。 嘗試將完整的字符串「\ 0」你做任何事情之前,它:

 
memset(post, 0, tamP); 

應該做的。

+0

它幾乎做到了這一點,但是你帶領我處理正確的問題,我不知道爲什麼,但是當堆棧完成操作數時,最後一個字符串得到了那些更好的東西,然後我把'\ 0 '當堆棧放置操作數並工作時! THKS – Guilherme 2010-10-15 19:46:00

4

那種怪異的字符串看起來更像是一個緩衝區溢出錯誤。您可能會覆蓋null終止符,因此當字符串被打印(或稍後使用)時,它會一直持續到找到一個字符串,然後檢查隨機程序內存直到它到達那裏。

檢查您的所有字符串操作是否正確。