C++ append_node中快速XML的奇怪结果
Weird result with rapidXml in C++ append_node
我有这个类:
// 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,也可以编写自己的垃圾回收。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- Cppcheck生成xml转储文件
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 在更改for循环的第三部分后,未使用for循环结果
- 如何在pugixml中获取节点的内部XML
- 如何使用tinyxml2从XML加载父实体和子实体
- 使用++运算符会导致意外的结果
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- C++Brute Force攻击函数不会返回结果
- boost xml parsingl将xml的路径作为变量发送
- C++ append_node中快速XML的奇怪结果
- 从服务器接收 xml 结果
- 如何导入谷歌测试xml结果到VSTS