2010-10-15 3 views
-1

Эй, ребята, я работаю над программой, которая получает выражение постфикса и вычисляет его ..Чтение строки не будет должным образом

У меня есть две функции:

  1. Преобразование инфикс в Postfix
  2. Вычислить суффикса

когда я пытаюсь небольшие выражения, как 1 + 1 или (1 + 1) * 1, он отлично работает , но когда я использую все операнды я получаю что-то противное,

Вот пример: 2 * 2/2 + 1-1 получает что-то вроде: 222/* 11- + T_CHECKÖÐ7 не █Ã

Если вы видите, что выражение верно до тех пор? T»

Я считаю, что это какой-то параметр ошибка, поэтому я положу заголовок и возвращать значения здесь

первый)

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

второй)

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

Caller)

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

Благодаря

+1

Я думаю, вы также должны указать определение convert (char *). –

+0

Этого недостаточно, чтобы сказать наверняка, но если в конце строки есть «мусор», дважды проверьте, что ваш код всегда ставит символ «\ 0» в конце после его создания. – aschepler

+0

Эти фрагменты кода являются неполными: кода синтаксического анализа или преобразования не существует. Что такое 'tamP' и' result'? Как вы читаете в строке? Как вы пишете результирующую строку? Любые ответы, которые вы получите, будут только догадываться, пока вы не опубликуете что-то более полное. –

ответ

1

Возможно, вы не добавляете символ «\ 0» в конце «сообщения» (после последнего разумного символа) в функции convert (char *). Это одна из причин, о которой я могу думать. Попробуйте установить полную строку «\ 0», прежде чем сделать что-нибудь с ним:

 
memset(post, 0, tamP); 

должен делать.

+0

Это почти что-то делало, но вы ведете меня по правильному вопросу, я не знаю почему, но когда стек закончил поместить операнды, на последней строке была получена эта wierld штука, а затем я положил '\ 0 «когда стек заканчивается, помещая операнды и работая! Thks – Guilherme

4

Такого рода странные строки выглядит как ошибка переполнения буфера. Вероятно, вы переписываете нуль-терминатор, поэтому, когда строка печатается (или позже используется), она продолжает идти до тех пор, пока не найдет ее, изучая случайную память программ, пока она не попадет туда.

Проверьте правильность всех ваших строковых манипуляций.