LPCSTR 32-bit 指針,指向一個常量字串
LPSTR 32-bit 指針,指向一個字串
LPCTSTR 32-bit 指針,指向一個常量字串。此字串可移植到Unicode 和DBCS
LPTSTR 32-bit 指針,指向一個字串。此字串可移植到Unicode 和DBCS
---------------------------------------------------------------------------------------------------------
L表示long指針, 這是爲了兼容Windows 3.1等16位操作系統遺留下來的, 在win32中以及其他的32爲操作系統中, long指針和near指針及far修飾符都是爲了兼容的作用。沒有實際意義。
P表示這是一個指針,C表示是一個常量T在Win32環境中,有一個_T宏,這個宏用來表示你的字符是否使用UNICODE, 如果你的程序定義了UNICODE或者其他相關的宏,那麼這個字符或者字符串將被作爲UNICODE字符串,否則就是標準的ANSI字符串。STR表示這個變量是一個字符串。
所以LPCTSTR就表示一個指向常固定地址的可以根據一些宏定義改變語義的字符串。同樣, LPCSTR就只能是一個ANSI字符串,在程序中我們大部分時間要使用帶T的類型定義。LPCTSTR == const TCHAR *
-------------------------------------------------------------------------------------------------
char是C語言標準數據類型,字符型,至於由幾個字節組成通常由編譯器決定,一般一個字節。Windows爲了消除各編譯器的差別,重新定義了一些數據類型,你提到了另外幾個類型都是這樣。CHAR爲單字節字符。還有個WCHAR爲Unicode字符,即不論中英文,每個字有兩個字節組成。如果當前編譯方式爲ANSI(默認)方式,TCHAR等價於CHAR,如果爲Unicode方式,TCHAR等價於WCHAR。在當前版本LPCSTR和LPSTR沒區別,即以零結尾的字符串指針,相當於CHAR *。
--------------------------------------------------------------------------------------------------
LPSTR、LPCSTR相當於char *,所以這種類型變量的賦值等同於char *的賦值。如果你不瞭解char *的賦值,你需要去看看C語言入門的書,比如譚浩強的《C語言程序設計》第9章就介紹了這個問題。下面給出兩個例子,一個是直接賦值,另一個是間接的。
Ex1: LPSTR lpstrMsg = "I'm tired.";
Ex2: char strMsg[]="I'm tired.";
LPSTR lpstrMsg = (LPSTR) strMsg;
---------------------------------------------------------------------
以上是網上對這幾個的簡要介紹。