我正在尝试创建一个成员函数,用于从字符串设置 rapidxml::xml_document<> 对象,std::string、const std::string 和 const char * 的重载对象工作正常。
当我尝试直接加载 char * 时,我得到一个缓冲区溢出,使用复制的字符串可以工作(我想避免这种情况,因为字符串很长)。
我的系统:使用 g++ 4.8.2 进行 Debian 测试
编辑:我知道该字符串将被 rapidxml 修改(对于const char * 对象,因此我创建一个副本(每个 std::vector))
产生相同溢出的示例代码如下:
#include <iostream>
#include <vector>
#include "rapidxml.hpp" // RapidXml 1.13
int main() {
char * str = (char *)"<efa><departures>data</departures></efa>";
rapidxml::xml_document<> doc;
// I'd like to avoid the copying in the following code block
# if 0
std::vector<char> writable;
if (str) {
while (* str) {
writable.push_back(* str);
str++;
}
} else {
writable.push_back('\0');
}
# define str &writable[0]
# endif
std::cout << "pre" << std::endl;
doc.parse<rapidxml::parse_no_data_nodes> (str);
std::cout << "post" << std::endl;
std::cout << doc.first_node()->name() << std::endl;
}