[英]Rapidxml is writing wrong characters
我最近一直在使用Rapidxml,並遇到了以下問題。 當我嘗試添加非硬編碼但在程序運行時生成的屬性時,rapidxml會插入錯誤的字符。
這是我的代碼示例:
void ProcessInfo::retriveInfo()
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe = { sizeof(pe) };
BOOL fOk = ProcessFirst( &pe, hSnapshot );
using namespace rapidxml;
xml_document<> doc;
xml_node<>* decl = doc.allocate_node(node_declaration);
decl->append_attribute(doc.allocate_attribute("version", "1.0"));
decl->append_attribute(doc.allocate_attribute("encoding", "utf-8"));
doc.append_node(decl);
xml_node<>* root = doc.allocate_node(node_element, "rootnode");
while(fOk)
{
std::string processFile = pe.szExeFile;
xml_node<>* processName = doc.allocate_node(node_element, PROCESS_NODE);
root->append_node( processName );
processName->append_attribute(doc.allocate_attribute( PROCESS_NAME, processFile.c_str() ) );
char szPID[PID_BUFFER];
memset(szPID, 0x00, sizeof(szPID) );
itoa(pe.th32ProcessID, szPID, 10 );
processName->append_attribute(doc.allocate_attribute( PROCESS_ID, szPID ));
char szParentPID[PID_BUFFER];
itoa( pe.th32ParentProcessID, szParentPID, 10 );
processName->append_attribute(doc.allocate_attribute( PROCESS_PARENT_ID, szParentPID ));
std::cout << processFile.c_str() << " " << szPID << " " << szParentPID << std::endl;
fOk = ProcessNext( &pe, hSnapshot );
}
doc.append_node( root );
std::cout << doc;
}
編碼似乎有問題,但我無法弄清楚,為什么? 有人可以幫幫我嗎?
當您將字符串傳遞給RapidXML時,它不會復制它,它只會記住該地址。 因此,您添加的“變量”字符串將被覆蓋,從而破壞RapidXML文檔。
在這里閱讀本節。
http://rapidxml.sourceforge.net/manual.html#namespacerapidxml_1modifying_dom_tree
特別是,您需要更改使用如下變量的allocate_attribute調用: -
char *node_name = doc.allocate_string(szPID); // Allocate string and copy name into it
processName->append_attribute(doc.allocate_attribute(PROCESS_ID, node_name); // Set node name to node_name
我的這個問題也可能是相關的: 如何修復RapidXML字符串所有權問題?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.