我正在写一个中缀到postfix转换器。它工作得很好,除了我有问题将堆栈的其余部分添加到后缀。堆栈是
vector<char>
,后缀是一个字符串。在我读完所有内容后,我尝试以下内容:
while (!stack.empty()) {
postfix.push_back(stack.back());
stack.pop_back();
}
但没有附加内容。我甚至尝试使用Debug-mode,看起来很好,但没有任何附加内容。
std::cout << postfix.c_str();
从堆栈中删除最后一个运算符。我甚至试图暂时保存它,但它没有被推动。
由于限制,我无法在pastebin中发布所有四个文件。我使用Visual Studio 2010 Ultimate并且没有错误,只是没有附加字符。
答案 0 :(得分:1)
你打印出这个字符串的方式是不必要的复杂 - 而且可能是错误的。如果你替换
std::cout << postfix.c_str();
与
std::cout << postfix;
然后,您将看到字符串中的内容,,即使它包含嵌入的空字符。
由于您使用'\ 0'作为错误指示符但未检查它,因此您可能嵌入了空值。通过使用c_str(),您明确要求在第一个空值处截断字符串。