我正在尝试使用以下代码格式化CString:
const wchar_t * wch = L"μ";
CString str;
str.Format(_T("%c"), wch[0]);
然而,不是str具有值“μ”而是实际上设置为“¼”。当我调试它时,它将wch识别为“μ”。
此外,如果我这样做:
const wchar_t * wch = L"μ";
CString str;
str.Format(_T("%s"), wch);
它给出值为“¼”的str。 (它似乎没有出现,但在1/4之后应该有一个上标L.)
编译器被设置为使用unicode,因为在程序中我可以调用_T()并且正确评估它,而不是在格式化CString时。
我做错了什么?
* 编辑:* 进行更多调试表明CString Format方法的arglist接收的值为“Ü_”
答案 0 :(得分:4)
我认为您需要使用“长”字符或字符串格式说明符 - %lc
wchar_t
和%ls
或%S
字符串。< / p>
答案 1 :(得分:1)
尝试
setlocale(LC_ALL, "");
在调用Format之前。 (除非你做任何不寻常的事情,否则在应用程序开始时调用setlocale就足够了。)
答案 2 :(得分:0)
我看到Miu
%c
和%lc
// a1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <afx.h>
int _tmain(int argc, _TCHAR* argv[])
{
const wchar_t * wch = L"μ";
CString str;
str.Format(_T("%c"), wch[0]);
MessageBox( GetForegroundWindow(), str.GetBuffer(), L"MyChar", MB_OK + MB_ICONHAND );
str.Format(_T("%s"), wch);
MessageBox( GetForegroundWindow(), str.GetBuffer(), L"MyChar", MB_OK + MB_ICONHAND );
return 0;
}