gpt4 book ai didi

c++ - Rapidxml 正在写入错误的字符

转载 作者:行者123 更新时间:2023-11-30 02:03:15 24 4
gpt4 key购买 nike

我最近一直在使用 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

我的这个问题也可能相关:How to fix RapidXML String ownership concerns?

关于c++ - Rapidxml 正在写入错误的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12162661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com