as per the class reference the TixmlText takes const char* values as input.
i need to store integer data read from a text file into xml. the integer data is stored in int vector and each element of the vector is converted to const char* before passing it to Tixml text function.
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;
}
But when i finally see the generated xml document. i get garbage values in the element where i save the number
<timestamp>1�504</timestamp>
how do we store integer data properly?
i had traced the where the problem was happening to an extent in the tinyxml.h
class TiXmlNode : public TiXmlBase
the function
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
}
where the value is of the same class TiXmlNode
being TIXML_STRING value;
- Question: Am i missing some thing
very simple? - Question: How can i
store the integer data properly
Edit:
Thanks for the answers
from the docs a point which i missed
Use the compile time define:
TIXML_USE_STL
to compile one version or the other.
This can be passed by the compiler, or
set as the first line of “tinyxml.h”.Note: If compiling the test code in
Linux, setting the environment
variable TINYXML_USE_STL=YES/NO will
control STL compilation. In the
Windows project file, STL and non STL
targets are provided. In your project,
It’s probably easiest to add the line
“#define TIXML_USE_STL” as the first
line of tinyxml.h.
If you’re compiling TinyXML with STL support (which you probably should be)
TiXmlTextalso has astd::stringconstructor. As sekmet64 says, the memory allocated by thestd::stringforc_str()is released when the function exits so you are, in effect, returning a pointer to garbage.However, I would strongly recommend against allocating your own memory. Instead, return a std::string (which will take care of the memory for you):
and then pass this into the TiXmlText constructor either as
or as
the latter case is ok because
TiXmlTextwill take a copy of the temporary string before it is destroyed.In general stay away from conversion to a
char*unless (or until) absolutely necessary,std::stringis a safer and superior option the vast majority of the time.