(TCHAR*)"XXXX%x";與_T("XXXX%x")不同
編者:李國帥
qq:9611153 微信lgs9611153
時間:2009-04-10
問題描述及期望效果:
有些錯誤並不是馬上出錯,而是並非按預期進行。
(TCHAR*)"XXXX%x";與_T("XXXX%x")一樣嗎?
使用
TCHAR* p = (TCHAR*)"XXXX%x";
_tprintf (p, x << 16);
可以正常打印信息嗎?仔細看了才知道怎麼回事 。
-------直接更改項目字符集屬性,很多時候確實沒有異常,但是沒有異常不代表就正確。
測試:
結果
兩者是不同的
TCHAR* p = (TCHAR*)"XXXX%x";
如果項目使用 Unicode 字符集,就會有錯
wchar_t* p = (wchar_t*)"XXXX%x";//把多字節字符常量"XXXX%x"的地址保存在p中
如果項目使用多字節字符集,則是正常
CHAR* p = (CHAR*)"XXXX%x";//把寬字節字符常量"XXXX%x"的地址保存在p中
而TCHAR* p2 = (TCHAR*)_T("X%x");如果項目使用 Unicode 字符集,相當於
wchar_t* p =L"XXXX%x";
因爲在#include <tchar.h>中可以看到定義,如果使用 Unicode 字符集
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
#define __T(x) L ## x
直接更改項目字符集屬性,很多時候確實沒有異常,但是沒有異常不代表就正確。