C ++ Странно закодированный символ добавлен в конце моего указателя символа - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть функция для преобразования инфиксной записи в постфиксную запись. Единственная проблема, с которой я столкнулся, заключается в том, что последний символ полученной строки записи постфикса 100

Есть идеи, что происходит? Это функция. Если я печатаю инфиксный символ *, переданный в качестве параметра, он печатается правильно. Это когда я печатаю постфиксный код char * в конце функции, я получаю за последний символ

   #include <iostream>
#include <string>
#include <fstream>
#include <string.h>
#include <ctype.h>
#include "queue.h"
#include "stack.h"

#define EXPRESSION_MAX_SIZE 50
#define MAX 10
#define EMPTY -1

using namespace std;

struct stack
{
    char data[MAX];
    int top;
};

Ответы [ 2 ]

3 голосов
/ 21 февраля 2011

Наблюдаемый вами тарабарский символ - это, вероятно, константа EMPTY, которую вы возвращаете из pop в пустом стеке.Вставьте assert(!isempty(s)) в свою функцию pop, чтобы убедиться, что вы не пытаетесь выскочить из пустого стека.Если вы запускаете вашу программу в отладчике, отладчик должен показывать вам контекст (то есть трассировку стека), в котором был запущен assert.

Попытка выскочить из пустого контейнера выявляет серьезную ошибку в программе.Вы не должны просто возвращать специальное значение и надеяться, что вызываемый абонент потрудится проверить его.При обнаружении ошибок такого рода целесообразно «немедленно потерпеть неудачу и громко потерпеть неудачу».Это значительно облегчит выявление причины ошибок.Это также поможет гарантировать, что ошибки будут обнаружены до развертывания вашей программы.

2 голосов
/ 21 февраля 2011

При копировании строки [] в infix [] в main ():

for(unsigned int i=0; i<=line.size(); i++)
{
    infix[i] = line[i];
}

Вы не смогли завершить массив infix после завершения копирования.Символы, которые вы видите - это то, что было во время объявления.

...