Sma*_*tti 2 c++ string null-terminated expat-parser
我正在使用Expat和自定义C++包装器,我已经在其他项目上测试过.我遇到了问题,因为原始数据(c_str)没有以正确的方式转换为std :: string.这让我印象深刻,因为我没有改变包装器的来源.
看起来这个字符串在转换后得到以null结尾的字符:
onCharacterData( std::string( pszData, nLength ) ) // --> std::string( char* pszData)
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
// 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 ) );
}
Run Code Online (Sandbox Code Playgroud)
// 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!
// [...]
}
Run Code Online (Sandbox Code Playgroud)

