【问题标题】:cannot convert parameter 1 from 'const char [6]' to 'const wchar_t *无法将参数 1 从 'const char [6]' 转换为 'const wchar_t *
【发布时间】:2013-08-11 21:18:22
【问题描述】:

我是 MFC 新手,不知道如何处理此错误。

错误

错误 C2664: 'void ATL::CStringT::Format(const wchar_t *,...)' : 无法将参数 1 从 'const char [6]' 转换为 'const wchar_t *'

这行:

m_Echo1.Format("%d %",state.dwMemoryLoad);

【问题讨论】:

    标签: mfc cstring


    【解决方案1】:

    默认情况下,Windows 应用程序设置为使用 16 位字符,而不是 8 位字符。将引用的字符串更改为 L"%d %" 以指定 16 位字符的字符串。

    【讨论】:

    • 两个 cmets:使用 T 宏几乎总是更好 - 所以_T("%d %%")。单个独立的 % 不是有效的格式说明符。我相信较新版本的 Microsoft 库在遇到安全异常时会在运行时引发安全异常。
    【解决方案2】:

    您发布的代码行有 2 个明显错误:

    1. 格式字符串包含非法格式说明符(尾随%)。如果您希望格式字符串包含文字百分号,则必须使用 %% 对其进行转义。
    2. 您使用的字符串文字与所需的编码不匹配,即 ANSI 和 UNICODE 字符编码不匹配。如果m_Echo1CString 类型,则参数必须包含在_TTEXT 宏中:_T( "%d %%" )。如果m_Echo1CStringW 类型,则必须通过在参数前面加上LL"%d %%",将参数作为UNICODE 字符串文字传递。

    注意:您发布的错误消息与代码行不匹配。错误消息指的是const char [6],而代码中的字符串文字是const char [5] 类型。确保错误消息和代码匹配。

    【讨论】:

      猜你喜欢
      • 2020-04-04
      • 2014-05-19
      • 2015-06-26
      • 2015-08-05
      • 1970-01-01
      • 2017-03-31
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多