LPSTR, LPCSTR, LPTSTR, LPCTSTR, LPWSTR 의 의미는 다음과 같다.

 

먼가 다 비슷해 보이지만

원래 C와 C++은 string이라는 똑똑한 자료구조형을 Compiler 차원에서 지원하고 있지 않는다.
그대신 가장 많이 사용하는 string을 어떻게 저장해야 할지에 대해 고심한 결과 배열의 끝에 \0또는 NULL 값을 넣어

string을 표현하도록 했다.

Windows에서는 이런 String처리를 위해서 char*형을 그대로 쓰기보다는 LPCSTR등의 표현을 사용  함으로 편의성을 돕고 있다.

 

LP는 Long Pointer를 나타내는 약어로 16bit를 표현합니다. 
C는 constant, 즉 함수의 내부에서 인자값을 변경하지 말라는 표현입니다.
STR은 말 그대로 String으로 내부적으로는 char 배열에 null값 종료를 말한다.

 

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

결과적으로 마지막에 나타낸 형과 같다는 것이다.

 

W는 Wide char을 말하며 unicode를 말한다.   win9x에서 사용하던 mulibyte와는 다르다. 물론 한글조합형 코드도 아니다.

 

LPWSTR = long porinter wide string = w_char*
LPCWSTR = long porinter constant wide string = const w_char*

T


LPCTSTR = long pointer constant t_string = const tchar*


t_char는 마이크로 소프트가 세계 각국에 제품을 판매하면서 각국의 언어에 맞추어 개발하는것에 문제를 느끼고  windows를

unicode기반으로 개발하는 작업에 착수하였다.  그런데 문제는 char는 1byte이고 wide char는 2byte이므로 포인터 연산을 많이 하는 C,C++코드는 호환성에 치명적인 문제가 생겼다.

그래서 컴파일러가 percompile option을 보고, 환경에 맞게 동작하는 코드를 작성할수 있게 새로운 변수모양으로 Macro를 선언하게 되었다. 그것이 TCHAR, t_char이라는 변수 이다.

 

이 변수들은 운영체제가 multi-byte환경이면 char형으로 , unicode환경이면 w_char, wide char로 type casting된다.

그래서 보통 window 9x, 2000계열의 환경에서는 LPTSTR = LPSTR = char* . LPCTSTR = LPCSTR = const char* 가 된다.

MFC에서 제공하는 CString class는 LPCTSTR라는 함수를 통해서 일단 안전하게 const char*형으로  얻어오게 하는것이다.

 

CString myString; 
[LPCTSTR]myString 이라 해주면 myString 내부의 string 값을 꺼내오게 도와주는 연산자 또는 함수를 사용하게 된다.
즉 [LPCTSTR]는 변환값이 const char*인 함수이다. mystring의 내부 string 자료 함수를 통해 자료를 꺼내온후 char*  type으로 형변환을 하게 되는것이다.


저작자 표시 비영리
신고