согласно ссылке на класс TixmlText принимает в качестве входных данных значения const char *. мне нужно сохранить целочисленные данные, прочитанные из текстового файла, в xml. целочисленные данные хранятся в векторе int, и каждый элемент вектора преобразуется в const char * перед передачей его в текстовую функцию Tixml.
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;
- Вопрос: Я упустил очень простую вещь?
- Вопрос: Как правильно хранить целочисленные данные
Изменить: Спасибо за ответы из документов, точку, которую я пропустил. Используйте определение времени компиляции:
TIXML_USE_STL
скомпилировать ту или иную версию. Это может быть передано компилятором или установлено как первая строка «tinyxml.h».
Примечание. При компиляции тестового кода в Linux установка переменной среды TINYXML_USE_STL = YES / NO будет управлять компиляцией STL. В файле проекта Windows предусмотрены цели STL и не STL. В вашем проекте , вероятно, проще всего добавить строку "#define TIXML_USE_STL" в качестве первой строки tinyxml.h.