c++ - C++ append_node 中 rapidXml 的奇怪结果

标签 c++ rapidxml

我有这门课:

// XmlWrapper.h
class XmlWrapper{
private:
    xml_document<> doc;
public:
    XmlWrapper();
    string addNode( string node_name);
            string getXmlString();
};

// XmlWrapper.cpp
XmlWrapper::XmlWrapper(){};

XmlWrapper::addNode(string node_name){
    char _name[name.size()+1];
    strcpy(_name,name.c_str());
    _name[name.size()] = '\0';
    xml_node<> *root = doc.allocate_node(node_element,_name);
    this->doc.append_node(root);
    delete root;
    return SUCCESS;
}

string XmlWrapper::getXmlString(){
    string xmlString;
    print(back_inserter(xmlString), this->doc, 0);
    return xmlString;
}

这是我的 main.cpp:

XmlWrapper wrapper;
wrapper.addNode("message");
cout << wrapper.getXmlString() << endl;

但是,我的结果是一个奇怪的东西列表!!如果我在 addNode 函数中调用 wrapper.getXmlString(),结果会很好!那么我的问题是什么?

编辑: 如果我像下面这样直接在 main.cpp 中使用,一切都会正确:

xml_document<> doc;
xml_node<> *message_node = doc.allocate_node(node_element, "message");
doc.append_node(message_node);
string buffer;
print(back_inserter(buffer),doc,0);
cout << buffer << endl;

为什么会这样?

最佳答案

粗暴地说 - _name 在堆栈上,当您离开函数范围时将被销毁。您可以使用 allocate_string,或编写自己的垃圾收集器。

关于c++ - C++ append_node 中 rapidXml 的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10975154/

相关文章:

rapidxml - 使用 RapidXML 打印 XML 时防止引号和其他特殊字符的扩展

C++模型 View 设计

c++ - 使用 RapidXML 在 C++ 中更新 XML 节点和属性值

c++ - 如何用不同大小的 vector 初始化二维 vector

c++ - 在 C++ 和 CUDA 中 malloc 一个复杂的<float>

c++ - RapidXml 线程安全吗?

c++ - RapidXML 加载 xml 文件

c++ - RapidXML: "expected <"文件末尾错误与空白错误相关?

c++ - int &f = d 是什么意思

c++ - 无法编译任何 C++ 代码