【发布时间】: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 新手,不知道如何处理此错误。
错误
错误 C2664: 'void ATL::CStringT::Format(const wchar_t *,...)' : 无法将参数 1 从 'const char [6]' 转换为 'const wchar_t *'
这行:
m_Echo1.Format("%d %",state.dwMemoryLoad);
【问题讨论】:
默认情况下,Windows 应用程序设置为使用 16 位字符,而不是 8 位字符。将引用的字符串更改为 L"%d %" 以指定 16 位字符的字符串。
【讨论】:
_T("%d %%")。单个独立的 % 不是有效的格式说明符。我相信较新版本的 Microsoft 库在遇到安全异常时会在运行时引发安全异常。
您发布的代码行有 2 个明显错误:
%)。如果您希望格式字符串包含文字百分号,则必须使用 %% 对其进行转义。m_Echo1 是CString 类型,则参数必须包含在_T 或TEXT 宏中:_T( "%d %%" )。如果m_Echo1 是CStringW 类型,则必须通过在参数前面加上L:L"%d %%",将参数作为UNICODE 字符串文字传递。注意:您发布的错误消息与代码行不匹配。错误消息指的是const char [6],而代码中的字符串文字是const char [5] 类型。确保错误消息和代码匹配。
【讨论】: