无法使用_stprintf读取俄语字符串

时间:2011-07-26 10:36:37

标签: c++ string visual-c++ unicode

我有以下代码将检索到的火线板名称分配给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,代码中有什么问题吗?

1 个答案:

答案 0 :(得分:3)

是。许多。简而言之。

首先,BSTR不是printf函数族所期望的。 BSTR以其长度为前缀,printf将期望NULL终止符。这也标志着您使用wcslen作为错误。

其次,您未能使用任何适当的内存管理。

您需要使用SysStringLen来获取长度,然后将结果存储在保证自行释放的C ++缓冲区中。 ATL提供了CComBSTR类,应该可以解决这个问题。

相关问题