根据类引用,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&#x00;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&#x00;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在大多数情况下是一种更安全,更优越的选择。

    10-01 16:07