项目场景:
要实现一个通过map容器创建一个节点数组,把map中的数据组装成xml格式发送到服务端
问题描述
`当使用rapidxml给节点赋值后,打印输出 出现乱码。并且打印输出时printf无法打印全部数据。
代码如下:
rapidxml::xml_node<>* paddresslist = doc.allocate_node(rapidxml::node_element,"AddressList",NULL);
root->append_node(paddresslist);
for (auto it = base_msg.add_infolist.begin(); it != base_msg.add_infolist.end(); it++)
{
rapidxml::xml_node<>* pdresinfo = doc.allocate_node(rapidxml::node_element,"AddressInfo",NULL);
paddresslist->append_node(pdresinfo);
AddressInfo pdressinfo = it->second;
pdresinfo->append_node(doc.allocate_node(rapidxml::node_element,"IP",pdressinfo.m_ip.c_str()));
pdresinfo->append_node(doc.allocate_node(rapidxml::node_element,"SubMask",pdressinfo.m_submask.c_str()));
pdresinfo->append_node(doc.allocate_node(rapidxml::node_element,"GateWay",pdressinfo.m_gateway.c_str()));
pdresinfo->append_node(doc.allocate_node(rapidxml::node_element,"MAC",pdressinfo.m_mac.c_str()));
}
....
printf("%s\n",text);
原因分析:
是因为要赋值的生命周期问题导致
具体描述:http://t.zoukankan.com/kex1n-p-3285900.html
解决方案:
使用allocate_node()对临时变量进行处理
代码如下:
pdresinfo->append_node(doc.allocate_node(rapidxml::node_element,"IP",doc.allocate_string(pdressinfo.m_ip.c_str())));
打印不全问题
std::cout << text << std::endl;
本文主要探讨了在使用rapidxml库构建XML节点时遇到的字符乱码和printf打印不全的问题。问题源于赋值对象的生命周期管理。解决方案是使用`allocate_string`分配内存来确保字符串的有效性,并用`std::cout`替代`printf`以完整输出XML内容。此外,文章还提供了关于C++和rapidxml库的编程实践。
7614

被折叠的 条评论
为什么被折叠?



