【问题标题】:How can i construct BSTR with embedded NULL character in c++?如何在 C++ 中使用嵌入的 NULL 字符构造 BSTR?
【发布时间】:2012-04-04 14:29:56
【问题描述】:

如何构造带有嵌入 NULL 字符的 BSTR?

【问题讨论】:

  • 空字符对 BSTR 没有任何意义。
  • @Deanna: 是的,但它们对某些 BSTR 函数有用,例如 SysAllocStringSysReAllocString

标签: c++ winapi null bstr


【解决方案1】:

使用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';
    }
}

【讨论】:

  • 对不起,你能举个例子吗(我是 C++ 的初学者)。
【解决方案2】:

短代码sn-p

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 字符处停止。作为初学者,你真的需要吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2011-04-11
    相关资源
    最近更新 更多