2010-10-15 62 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终止符,因此当字符串被打印(或稍后使用)时,它会一直持续到找到一个字符串,然后检查随机程序内存直到它到达那里。

检查您的所有字符串操作是否正确。