_t("")是乙個巨集,他的作用是讓你的程式支援unicode編碼
因為windows使用兩種字符集ansi和unicode,
前者就是通常使用的單位元組方式,
但這種方式處理象中文這樣的雙位元組字元不方便,
容易出現半個漢字的情況。
而後者是雙位元組方式,方便處理雙位元組字元。
windows nt的所有與字元有關的函式都提供兩種方式的版本,而windows 9x只支援ansi方式。
如果你編譯乙個程式為ansi方式,
_t實際不起任何作用。
而如果編譯乙個程式為unicode方式,則編譯器會把"hello"字串以unicode方式儲存。_t和_l的區別在於,_l不管你是以什麼方式編譯,一律以unicode方式儲存。
lpstr:32bit指標指向乙個字串,每個字元佔1位元組
lpcstr:32-bit指標指向乙個常字串,每個字元佔1位元組
lpctstr:32-bit指標指向乙個常字串,每字元可能佔1位元組或2位元組,取決於unicode是否定義
lptstr:32-bit指標每字元可能佔1位元組或2位元組,取決於unicode是否定義
l是表示字串資源為unicode的。
比如wchar_t str = l"hello world!";
這個就是雙子節儲存字元了。
_t是乙個適配的巨集~
當#ifdef _unicode的時候
_t就是l
沒有#ifdef _unicode的時候
_t就是ansi的。
比如 lptstr lpstr = new tchar[32];
tchar* szbuf = _t("hello");
以上兩句使得無論是在unicode編譯條件下都是正確編譯的。
而且ms推薦你使用相匹配的字串函式。
比如處理lptstr或者lpctstr 的時候,不要用strlen ,而是要用_tcslen
否則在unicode的編譯條件下,strlen不能處理 wchar_t*的字串。
t是非常有意思的乙個符號(tchar、lpctstr、lptstr、_t()、_text()...),它表示使用一種中間型別,既不明確表示使用 mbcs,也不明確表示使用 unicode。那到底使用哪種字符集?編譯的時候才決定
C 中L和 T 之區別
字串前面加l表示該字串是unicode字串。t是乙個巨集,如果專案使用了unicode字符集 定義了unicode巨集 則自動在字串前面加上l,否則字串不變。因此,visual c 裡邊定義字串的時候,用 t來保證相容性。vc支援ascii和unicode兩種字元型別,用 t可以保證從ascii編碼...
C 中L和 T 之區別
字串前面加l表示該字串是unicode字串。t是乙個巨集,如果專案使用了unicode字符集 定義了unicode巨集 則自動在字串前面加上l,否則字串不變。因此,visual c 裡邊定義字串的時候,用 t來保證相容性。vc支援ascii和unicode兩種字元型別,用 t可以保證從ascii編碼...
C 中L和 T 之區別
字串前面加l表示該字串是unicode字串。t是乙個巨集,如果專案使用了unicode字符集 定義了unicode巨集 則自動在字串前面加上l,否則字串不變。因此,visual c 裡邊定義字串的時候,用 t來保證相容性。vc支援ascii和unicode兩種字元型別,用 t可以保證從ascii編碼...