LPSTR, LPCSTR, LPTSTR, LPCTSTR, LPWSTR, LPCWSTR

Posted by 겨울에
2011. 9. 26. 22:21 scrap/ C/C++
출처 : http://beggu84.blog.me/90098891240

[출처] LPSTR, LPCSTR, LPTSTR, LPCTSTR, LPWSTR, LPCWSTR |작성자 헐쿠 



LP: long pointer (.Net에선 64bit, VC++에선 32bit)

STR: string 자료형 (NULL값을 가진 char* 배열)

T: unicode

W: wide(2byte) char

C: constant

 

LPSTR = long pointer + string = char*

LPCSTR = long pointer + constant + string = const char*

LPCTSTR = long pointer + constant + t_char + string = const char* 혹은 const w_char*

LPTSTR = long pointer + t_char + string = char* 혹은 w_char*

LPWSTR = long pointer + wide + string = w_char*

LPCWSTR = long pointer + constant + wide + string = const w_char*

 

windows 환경에서 유니코드를 표현하기 위해 TCHAR, t_char를 쓰는데

컴파일러 운영체제에서 멀티바이트 환경이면 char형으로,

unicode 환경이면 w_char, wide char 형으로 type casting 한다.

LPWSTR에 W는 멀티바이트, unicode 두 환경에서 모두 unicode 문자열을 쓴다

하지만 LPCTSTR에 T는 환경설정에 따라서 선택해서 쓸 수 있다.

그러므로 언어에 좀 더 자유롭게 개발하려면 T를 사용하는 것이 좋을 것이다.

 

흔히 CString을 char*로 캐스팅할 때 (LPSTR)(LPCTSTR)string을 쓴다.

(LPCTSTR)은 연산자 오버로딩(operator overloading)으로 const char*를 반환한다.

그리고 const char*를 char*에 대입할 수 없기 때문에

(LPSTR) 강제 캐스팅으로 const를 날린다.