複製鏈接
請複製以下鏈接發送給好友

LPTSTR

鎖定
由於Win32 API文檔的函數列表使用函數的常用名字(例如, SetWindowText),所有的字符串都是用TCHAR來定義的。(除了XP中引入的只適用於Unicode的API)。
外文名
LPTSTR
適    用
Unicode的API
定    義
TCHAR

LPTSTRLPTSTR解釋

表示指向字符/字符串指針。WINDOWS 下面的程序設計可以支持MBCS和UNICODE兩種編碼的字符串,具體用那種就看你定義了MBCS宏還是UNICODE宏。MBCS宏對應的字符串指針 是char*也就是LPSTR,UNICODE對應的指針是unsigned short*也就是LPWSTR,為了寫程序方便微軟定義了類型LPTSTR,在MBCS下它就是char*,在UNICODE下它是unsigned char*,這樣你就可以重定義一個宏進行不同字符集的轉換了。
LP:長指針(long pointer)。
T:win32環境中有一個_T宏,用來標識字符是否採用Unicode編碼(兩字節表示一個字符),若程序中定義了Unicode,該字符/字符串被作為Unicode字符串,否則就是標準的ANSI(單字節表示一個字符)字符串。
STR:表示這個變量是一個字符串。
/* LPTSTR 轉換成 CString */
(1)直接賦值
CString strText;
LPTSTR lpszText = _T("LPTSTR >> CString");
strText = lpszText;
::MessageBox( NULL, strText , _T("標題"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
(2)CString::Format()格式化
CString strText;
LPTSTR lpszText = _T("LPTSTR >> CString");
strText.Format( _T("%s"), lpszText );
::MessageBox( NULL, strText , _T("標題"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
/* CString 轉換成 LPTSTR */
CString strText( _T("This is a test") );
LPTSTR lpszText =(LPTSTR)(LPCTSTR)strText;
::MessageBox( NULL, lpszText, _T("標題"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
(2)使用lstrcpy()
CString strText( "This is a test" );
LPTSTR lpszText = new TCHAR[strText.GetLength()+1];
lstrcpy( lpszText, strText );
::MessageBox( NULL, lpszText, _T("標題"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
(3)使用CString::GetBuffer()
CString strText(_T("This is a test "));
LPTSTR lpszText = strText.GetBuffer();
strText.ReleaseBuffer();
::MessageBox( NULL, lpszText, _T("標題"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
/* char * 轉換成 CString
char chArray[] = "This is a test";
char * p = "This is a test";
CString theString = chArray;
theString.Format(_T("%s"), chArray);
theString = p;
/* CString轉換成char*
1.
CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);
2.
CString s(_T("Char test "));
LPTSTR p = s.GetBuffer(); [1] 
LPTSTR dot = strchr(p, ''.'');
// 在這裏添加使用p的代碼
if(p != NULL)
*p = _T('');
s.ReleaseBuffer();

LPTSTRc++中LPTSTR

LPCTSTR,LPWSTR, PTSTR, LPTSTR,wchar_t區別
L表示long指針,這是為了兼容Windows 3.1等16位操作系統遺留下來的,在win32中以及其他的32位操作系統中, long指針和near指針及far修飾符都是為了兼容的作用,沒有實際意義。即win32中,long,near,far指針與普通指針沒有區別,LP與P是等效的。
P表示這是一個指針。
T表示_T宏,這個宏用來表示你的字符是否使用UNICODE, 如果你的程序定義了UNICODE或者其他相關的宏,那麼這個字符或者字符串將被作為UNICODE字符串,否則就是標準的ANSI字符串。
STR表示這個變量是一個字符串。
C表示是一個常量,const。
LPTSTR:
如果定義了UNICODE宏則LPTSTR被定義為LPWSTR。typedef LPTSTR LPWSTR;
否則LPTSTR被定義為LPSTR。 typedef LPTSTR LPSTR;
下面列出一些常用的typedefs:
類型 MBCS Unicode
WCHARwchar_twchar_t
LPSTR char* char*
LPCSTR const char* const char*
LPWSTRwchar_t* wchar_t*
LPCWSTR constwchar_t* const wchar_t*
TCHAR charwchar_t
LPTSTR TCHAR*(或char*) TCHAR* (或wchar_t*)
LPCTSTR const TCHAR* const TCHAR*
所以結論,在VS2005系統中,為提高可移植性,定義字符串時用TCHAR,轉化為UNICODE時用_T而不用L。
參考資料