2

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

4

2 回答 2

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';
    }
}
于 2012-04-04T14:33:41.657 回答
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 字符处停止。作为初学者,你真的需要吗?

于 2020-03-20T11:54:10.947 回答