我只是想将_bstr_t转换为std :: string ..
我发现了一个关于这个问题的帖子(LINK),并且完全如上所述,但它正在引发异常..
这就是我所做的:
_bstr_t BString;
std::string STDString((char *) BString);
我收到了这个错误:
0CxC00000005: Access violation reading location 0x00000000
具体来说,在查看调用堆栈后,iosfwd.h中的错误:
static size_t __CLRCALL_OR_CDECL length(const _Elem *_First)
{ // find length of null-terminated string
return (*_First == 0 ? 0
: _CSTD strlen(_First));
}
将_bstr_t转换为std :: string的正确方法是什么??
由于
答案 0 :(得分:3)
BString
可以保留null
值,而std::string
则不能,因此您必须对此进行说明。
const char* buf = BString;
int bstrlen = BString.length();
std::string STDString( buf?buf:"", bstrlen);
请注意,BString可能在内部使用UTF16,因此char *重载将使用当前语言环境来选择字节编码,可能是CP-1252,导致某些字符无法正确转换。