Использование TinyXML для разбора строки файла XML

0

У меня есть библиотека, которая содержит XML файл по умолчанию, представленный как const char * хранящийся в байтах.

Я хочу, чтобы пользователь мог запросить дескриптор этого файла (в виде документа TiXmlDocument).

В настоящее время я пытаюсь сделать это, передав эту строку defaultFile (ее определение в собственном заголовочном файле) в файл TiXmlDocument.Parse(). Parse() передает мне указатель на мусор (но не null), который вызывает сбой при попытке вызвать SaveFile().

Я могу обойти это, написав тот же defaultFile в файле, используя:

FILE *file;
file = fopen("temp.prme", "w");
fprintf(file, "%s", defaultParameterFile);
fclose(file);

Я создаю новый TiXmlDocument используя конструктор, который принимает путь к файлу в качестве входного. Это работает, но это не реальный вариант, потому что я не хочу сохранять файлы на компьютере пользователя.

Из того, что я могу сказать, все, что делает конструктор, это чтение строки из файла, а затем отправка ее прямо в Parse(). Я проверил значения, которые передавались в памяти, и обнаружил очень мало различий.

При использовании метода-конструктора вы должны затем cal LoadFile(). В LoadFile() строка, передаваемая в Parse() была завершена нулем. Хотя defaultFile был. Кроме того, все новые строки (которые в defaultFile были перечислены как /r/n, были перечислены как \n\n.

Я попробовал изменить defaultFile чтобы соответствовать тому, что я видел у конструктора, и не повезло. Какие-либо предложения?

Для чего его ценность, defaultFile выкладывается примерно так:

const char defaultFile[] = {
/* 0x00000000 */   0x3C, 0x3F, 0x78, 0x6D,
...
};

Это примерно 9000 строк в длину, по 16 байт на строку.

  • 0
    Там было несколько ошибок в прошлом, но я думаю, что они исправлены сейчас. В любом случае, вам действительно нужно завершить NUL-строку, прежде чем передавать ее в Parse() . И что это за конструктор, который загружает файл?
  • 0
    @rodrigo Я хочу сказать, что конструктор этого не делает, поэтому я не могу это контролировать, и он работает без нуля. Документацию для конструктора можно найти здесь
Показать ещё 7 комментариев
Теги:
tinyxml

1 ответ

0

При непосредственном вызове в Parse() я TiXmlDocument в стеке. Данные были повреждены другими вызовами функций. Я исправил это, и все сработало.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню