繁体   English   中英

C ++ - 将C字符串推送到模板堆栈

[英]C++ - Pushing a C-String onto a Template Stack

我相信对大多数人来说这是一个非常简单的问题。 但我正在用c ++编写XML的令牌recoginzer,我正在使用堆栈来确保匹配的开始和结束标记。 那么我的标签是c字符串......

char BeginTag[MAX];

我想把它推到我的模板堆栈上。 但我不确定通过堆栈的类型。 我努力了...

stack<char> TagStack;

但这不起作用。 我已经尝试了一些其他解决方案,但似乎没有工作。 有人能帮我吗?

数组不可分配,因此不能用作容器值类型。

但是,您可以定义包含数组的结构,并使用它:

struct Tag {
    char name[MAX];
};

stack<Tag> TagStack;

或者只为标签使用std::string

如果你发布了不起作用的代码,它会有所帮助,并告诉我们它是如何工作的。 (编译时错误?运行时错误?)但我的建议是使用std :: string,至少在堆栈上:

using namespace std;
stack<string> TagStack;

你应该能够在没有明确演员的情况下进入堆栈:

TagStack.push(BeginTag);

注意:我不认可您为此目的使用C字符串; 我也在tokenizer中使用std :: string。 但那是你的电话。 如果继续使用char数组,则可能需要将char [MAX]更改为char [MAX + 1],因为MAX通常用于表示字符串中的最大非空字符数。 因此,您需要确保为终止null分配了一个额外的char。 这可能只是一个样式问题,但它也可能有助于防止错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM