(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
直接更改项目字符集属性,很多时候确实没有异常,但是没有异常不代表就正确。