问题描述
我正在将 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!
// [...]
}