生活随笔
收集整理的這篇文章主要介紹了
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
;
總結
以上是生活随笔為你收集整理的rapidxml 给节点赋值时出现乱码问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。