C ++奇怪的编码字符添加在我的char指针的末尾

时间:2011-02-21 04:35:42

标签: c++ string pointers character-encoding char

我有一个将中缀表示法转换为后缀表示法的功能。我遇到的唯一问题是生成的后缀符号字符串的最后一个字符是

任何想法发生了什么?这是功能。如果我打印作为参数传递的中缀char *,它将被正确打印。当我在函数结束时打印postfix 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 个答案:

答案 0 :(得分:3)

你看到的胡言乱语可能是你在空堆栈上从EMPTY返回的pop常量。在assert(!isempty(s))函数中粘贴pop以确保您不会尝试从空堆栈弹出。如果在调试器中运行程序,调试器应该向您显示触发assert的上下文(即堆栈跟踪)。

尝试从空容器弹出会显示程序中存在严重缺陷。你不应该只返回一个特殊的值,并希望被调用者不愿意检查它。当检测到这种错误时,明智的是“立即失败,然后大声失败”。这样可以更容易地找出错误原因。它还有助于确保在部署程序之前检测到错误。

答案 1 :(得分:2)

在main()中将line []复制到infix []:

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

完成复制后,您无法终止中缀数组。你看到的角色就是申报时的那些角色。