如何在c ++中构造带有嵌入式NULL字符的BSTR?

时间:2012-04-04 14:29:56

标签: c++ winapi null bstr

如何使用嵌入的NULL字符构造BSTR?

2 个答案:

答案 0 :(得分:4)

使用SysAllocStringLen()传递null作为第一个参数来分配缓冲区,然后以您喜欢的任何方式填充正文。像这样:

BSTR bstr = SysAllocStringLength( 0, desiredLength );
if( bstr == 0 ) {
   //handle error, get out of here
}
for( int i = 0; i < desiredLength; i++ ) {
    if( i % 3 == 0 ) {
       bstr[i] = 0;
    } else {
       bstr[i] = 'A';
    }
}

答案 1 :(得分:0)

简短代码段

BSTR HasNul = ::SysAllocStringLen(L"Who needs\0 embedded like that?", 30);
std::wcout << L"Last character: " << HasNul[29] << "  " << HasNul << L"\n";

BSTR的长度为30,因此最后一个字符为HasNul[29],在我的示例中为问号。输出是

Last character: ?  Who needs

因为纯C ++方法std::wcout停在第一个NUL字符处。作为初学者,您真的需要吗?