C++ append_node中快速XML的奇怪结果

Weird result with rapidXml in C++ append_node

本文关键字:XML 结果 append node C++      更新时间:2023-10-16

我有这个类:

// 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()] = '';
    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;
}

这是我的主要.cpp:

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

但是,我的结果是一系列奇怪的事情!! 如果我wrapper.getXmlString() addNode函数中,结果将是okie!那么我的问题是什么?

编辑:如果我直接在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;

为什么会发生这种事情?

dirkgently 说的 - _name在堆栈上,当你超出函数范围时将被销毁。您可以使用allocate_string,也可以编写自己的垃圾回收。