在vs.Net 2003 (Version 7.1.3088 English)的代碼入下:
CString m_strShow;
m_strShow.Format("%d",100);
在使用Use Multi-Byte Character Set編譯事一切正常;但是使用Use Unicode Character Set選項編譯時,出現如下的錯誤:
error C2664: 'void ATL::CStringT<BaseType,StringTraits>::Format(ATL::CSimpleStringT<BaseType,t_bMFCDLL>::PCXSTR,...)' : cannot convert parameter 1 from 'const char [3]' to 'ATL::CSimpleStringT<BaseType,t_bMFCDLL>::PCXSTR'
with
[
BaseType=wchar_t,
StringTraits=StrTraitMFC_DLL<wchar_t>,
t_bMFCDLL=true
]
and
[
BaseType=wchar_t,
t_bMFCDLL=true
]
Windows使用兩種字符集ANSI和UNICODE,前者就是通常使用的單字節方式,但這種方式處理象中文這樣的雙字節字符不方便,容易出現半個漢字的情況。而後者是雙字節方式,方便處理雙字節字符。Windows NT的所有與字符有關的函數都提供兩種方式的版本,而Windows 9x只支持ANSI方式。_T一般同字常數相關,如_T("Hello")。如果你編譯一個程序爲ANSI方式,_T實際不起任何作用。而如果編譯一個程序爲UNICODE方式,則編譯器會把"Hello"字符串以UNICODE方式保存。_T和_L的區別在於,_L不管你是以什麼方式編譯,一律以以UNICODE方式保存。