Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从_bstr_t到std::string的转换_C++_String_Type Conversion - Fatal编程技术网

C++ 从_bstr_t到std::string的转换

C++ 从_bstr_t到std::string的转换,c++,string,type-conversion,C++,String,Type Conversion,我只是想把_bstr_t转换成std::string 我找到了一篇关于这个问题的帖子(),并完全按照描述的那样做了,但它引发了一个异常 这就是我所做的: _bstr_t BString; std::string STDString((char *) BString); 我得到了这个错误: 0CxC00000005: Access violation reading location 0x00000000 具体来说,在查看调用堆栈后,iosfwd.h中出现错误: static size_t _

我只是想把_bstr_t转换成std::string

我找到了一篇关于这个问题的帖子(),并完全按照描述的那样做了,但它引发了一个异常

这就是我所做的:

_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..的正确方法是什么


谢谢

b字符串
可以保存一个
null
值,而
std::string
不能,所以您必须对此进行说明

const char* buf = BString;
int bstrlen = BString.length();
std::string STDString( buf?buf:"", bstrlen);

请注意,BString可能在内部使用UTF16,因此char*重载将使用当前区域设置来选择字节编码,可能是CP-1252,导致某些字符无法正确转换

@MooingDuck刚刚编辑了代码。。是的,请注意,
BString
可能在内部使用UTF16,因此
char*
重载将使用当前区域设置来选择字节编码,可能是CP-1252,导致某些字符无法正确转换。您链接到的帖子可能全是废话,或者使用
/clr
编译,以某种方式使其中的代码正常工作。
\u bstr\u t
是COM
bstr
的包装器,它将字符串的长度存储在前4个字节中。所以演员组不会做这项工作。编辑:啊,我知道它是怎么工作的<代码>\u bstr\u t定义为
char*
whcar\u t*
@Praetorian Oops,我误读并撤回了投票结果。再次说明:@πντα的可能重复ῥεῖ: 该页面上的每个答案都有与此问题遇到的相同的错误。由于那一页上没有答案回答这个问题,我犹豫着结束这一页,因为这是一个骗局。也许一旦该页面有了更好的答案。不需要在条件中进行初始转换。@KonradRudolph:我没有测试过,但由于它有四个在布尔上下文中有效的隐式转换,我认为不进行转换将导致“歧义”编译器错误。@KonradRudolph“
错误C2440:'?':无法从'\u bstr\u t'转换为'bool'用户定义的不明确转换