Описание проблемы
Я использую Expat с пользовательской оболочкой C ++, которую я уже тестировал в других проектах.Я сталкиваюсь с проблемами, потому что исходные данные (c_str) не преобразуются в std :: string правильным образом.Это меня беспокоит, потому что я не изменил источник обертки.
Похоже, что строка получает символы с нулевым символом в конце после этого преобразования:
onCharacterData( std::string( pszData, nLength ) ) // --> std::string( char* pszData)
Как я могу это исправить?
Собственная оболочка экспата
// Wrapper defines the class Expat and implements for example:
void XMLCALL Expat::CharacterDataHandler( void *pUserData, const XML_Char *pszData,
int nLength )
{
Expat* pThis = static_cast<Expat*>( pUserData );
// XML_Char is char, therefore this call contains i.e.: std::string("hello", 5)
pThis->onCharacterData( std::string( pszData, nLength ) );
}
Пользовательский анализатор
// Parser is defined as: class Parser : Expat
void Parser::onCharacterData(const std::string& data )
{
// data is no longer char*, but a std::string.
// It seems to contain \0 after each character which is wrong!
// [...]
}
Символьные данные в оболочке экспата (символ *)
Символьные данные в анализаторе (std :: string)