rapidxml 给节点赋值时出现乱码问题

本文主要探讨了在使用rapidxml库构建XML节点时遇到的字符乱码和printf打印不全的问题。问题源于赋值对象的生命周期管理。解决方案是使用`allocate_string`分配内存来确保字符串的有效性,并用`std::cout`替代`printf`以完整输出XML内容。此外,文章还提供了关于C++和rapidxml库的编程实践。

项目场景:

要实现一个通过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; 
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值