我有以下代码将检索到的火线板名称分配给a
TCHAR
变量。
TCHAR* firewireName = new TCHAR[wcslen(variantProperty.bstrVal)+1];
_stprintf(firewireName, _T("%S"), variantProperty.bstrVal);
VariantClear(&variantProperty);
但是当火线名称是俄语时LSI 1394 OHCI совместимый хост-контроллер
我firewireName
变量仅包含LSI 1394 OHCI
我是C ++中的n00b,代码中有什么问题吗?
答案 0 :(得分:3)
是。许多。简而言之。
首先,BSTR不是printf
函数族所期望的。 BSTR以其长度为前缀,printf
将期望NULL终止符。这也标志着您使用wcslen
作为错误。
其次,您未能使用任何适当的内存管理。
您需要使用SysStringLen来获取长度,然后将结果存储在保证自行释放的C ++缓冲区中。 ATL提供了CComBSTR类,应该可以解决这个问题。