問題の説明
Expat をカスタム C++ ラッパーと共に使用していますが、これは他のプロジェクトで既にテスト済みです。元のデータ (c_str) が正しい方法で std::string に変換されていないため、問題が発生しています。ラッパーのソースを変更していないので、これは気になります。
この変換後、文字列が null で終わる文字を取得するようです。
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!
// [...]
}