根据类引用,TixmlText将const char *值作为输入。
我需要将从文本文件读取的整数数据存储到xml中。整数数据存储在int vector 中,并且 vector 的每个元素在传递给Tixml文本函数之前都已转换为const char *。
const char* intToXmlChar(int num)
{
stringstream abc;
string value;
abc<<num;
value=abc.str();
const char* ret_val = value.c_str();
//char* conv_val = const_cast<char*>(ret_val);
return ret_val;
}
但是当我终于看到生成的xml文档时。我在保存数字的元素中获得了垃圾值
<timestamp>1�504</timestamp>
如何正确存储整数数据?
我在tinyxml.h中在一定程度上跟踪了发生问题的位置
class TiXmlNode : public TiXmlBase
功能
void SetValue(const char * _value) {
printf(" pre ---number--- %s using this \n",_value); //-- if the value is say 18504
value = _value;
printf(" post ---number--- %s using this \n",_value); //-- becomes 1�504 saved in xml
}
值是相同的
class TiXmlNode
正在TIXML_STRING value;
很简单的?
正确存储整数数据
编辑:
感谢您的回答
从文档中我错过了一点
使用编译时间定义:
Tinyxml class ref
最佳答案
如果您正在编译具有STL支持的TinyXML(您可能应该这样做),那么TiXmlText
也具有std::string
构造函数。就像sekmet64所说的那样,当函数退出时,由std::string
分配给c_str()
的内存被释放,因此实际上是在返回指向垃圾的指针。
但是,我强烈建议您不要分配自己的内存。相反,返回一个std::string(它将为您处理内存):
std::string intToXmlChar(int num)
{
std::stringstream abc;
std::string value;
abc<<num;
return abc.str();
}
然后将其传递给TiXmlText构造函数
TiXmlText node(intToXmlChar(i));
或作为
TiXmlText node(intToXmlChar(i).c_str());
后一种情况还可以,因为
TiXmlText
将在临时字符串被销毁之前对其进行复制。除非(或直到)绝对必要,否则通常不要转换为
char*
,std::string
在大多数情况下是一种更安全,更优越的选择。