Rapidxml写错了字符
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
我的这个问题可能也很相关:如何解决RapidXMLString所有权问题?
相关文章:
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- 首要问题的答案让值班员搞错了
- 看起来is_nothrow_constructible_v()在MSVC中被破坏了,我错了吗
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 我的C++线程做错了什么?
- 如何正确使用 >=?(a+f()+c)>=0 错了吗?
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- 没有输出的合并排序我做错了什么?
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 在C++中使用 AKS 素数测试计算双胞胎素数 我做错了什么?
- 指针相关的UE4崩溃.我的指针哪里错了?
- 我一直试图弄清楚我在这个链表程序中做错了什么
- 我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?
- FFMPEG,C++,内存泄漏,我做错了什么?
- 我做错了什么?反向字符串 C++
- 我在这个课上做错了什么?
- 这个RLE解码功能只解码第一个字符,我做错了什么?
- Rapidxml写错了字符
- 我的程序应该摆脱不是数字的字符,但不能完全工作,关于我做错了什么有什么想法吗?