从_bstr_t转换为std :: string

时间:2014-07-02 20:22:24

标签: c++ string type-conversion

我只是想将_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的正确方法是什么??

由于

1 个答案:

答案 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,导致某些字符无法正确转换。