【问题标题】:Unable to read Russian string with _stprintf无法使用 _stprintf 读取俄语字符串
【发布时间】:2011-07-26 10:36:37
【问题描述】:

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

【问题讨论】:

  • 绝对错误的一件事是您将TCHARwcslen 混合在一起,这是一个仅限widechar 的函数。要么使用相应的 TCHAR 版本,要么(也许更好?)删除所有 TCHAR 引用,让您的应用程序仅使用 Unicode。

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


【解决方案1】:

是的。很多。简而言之。

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

其次,你没有使用任何适当的内存管理。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2015-04-01
    • 1970-01-01
    • 2019-11-06
    • 2021-05-16
    • 2016-07-10
    相关资源
    最近更新 更多