char*, LPCTSTR, TCHAR 의 차이 > WINAPI Q&A

본문 바로가기
사이트 내 전체검색

WINAPI Q&A

char*, LPCTSTR, TCHAR 의 차이

페이지 정보

profile_image
작성자 이즈
댓글 0건 조회 5,542회 작성일 07-01-04 03:07

본문

어떠한 문자열을 처리하는 자료형은 보통 char, wchar, TCHAR 를 사용한다.

쉽게 보면,
char* => LPSTR 라고 생각하면 되고
const char* => LPCSTR 라고 할 수 있다.

가운데 'C' 는 const 의 의미다. 'LP' 는 long pointer 의 의미.
끝에 STR 이라는 의미는 NULL 포인터로 끝난다는 의미. 즉, 마지막 인덱스에는 항상 NULL 이 채워져 있어야 한다는 것.
그래야만 str 관련 함수들이 동작을 하는 것이다. strlen, strcpy, strcmp 등등.. 이것들이 src param 의 끝에 NULL 이 없으면 무지 당황하게 된다.

가운데 'T' 가 들어간다는 것은 TCHAR 이라는 의미.
그렇다면 왜 T를 쓸까??

영문은 1바이트.

그런데, 우리나라 말이나, 중국어 등 영문권이 아닌 제 3세계 언어를 표현하기 위해서는
2바이트가 필요하다.. 이를 위해서 MultiByte 를 사용하기도 하지만 MultiByte 는
어떤 글씨는 1바이트 이고 어떤 글씨는 2바이트여서 메모리 관리가 어렵다.
그래서 나온 것이 wchar 인데,

wchar 는 모든 글씨(영문 포함)가 2바이트로 구성이 된다.
당연히 wchar 는 일반 ascii 타입의 char 보다 메모리 공간이 2배 필요하다.

그런데 본론인 TCHAR 는 무엇이냐?
바로 ACSCII 타입의 일반 char 또는 wchar 라는 의미다.
TCHAR 을 사용하면 char 인지 wchar 인지 구별하지 않고 그냥 코딩을 하면 된다.

TCHAR tch = _T('A'); <=> char ch = 'A';
TCHAR tch = _T('A'); <=> wchar wch = 'A';

배열도 역시.. 그냥 숫자 인덱스로 원하는 글씨의 위치를 추적할 수 있다.

그럼 무엇으로 현재 프로젝트의 TCHAR가 char 인지 wchar 인지를 구별할까?
UNICODE 라는 precompile 상수.

해당 프로젝트 project -> settings 에 _DEBUG 등등 선언되어 있는데, 끝에다
UNICODE 라고 쓰고 컴파일 하면 앞으로 나오는 모든 TCHAR 타입은 wchar 으로 변환해서
컴파일을 시도하게 된다.

가운데 C 다음의 T 는 TCHAR 이라는 의미

당연히 상수로 변환을 했으므로 변수에 값을 대입할 수 없겠다.
( b[3] = _T('A'); <- syntax error  <=> const char str = "ABCD"; str[3] = 'E' ; <- 이때 에러와 같은 이치)

(TCHAR 을 나타는 매크로가 _T 이다. (한문자 _T(' '), 문장 _T(" ") )

댓글목록

등록된 댓글이 없습니다.

Total 119건 1 페이지
WINAPI Q&A 목록
번호 제목 글쓴이 조회 날짜
119 뭐지 6824 06-30
118 증주 3876 09-04
117 인코 4379 08-08
116 aux 5870 08-08
115 연가 4697 08-02
114 연가 3284 08-02
113 연가 4482 08-02
112 연가 3590 08-02
111 연가 3757 08-02
110 연가 2351 08-02
109 연가 2398 08-02
108 연가 2953 08-02
107 연가 4720 08-02
106 연가 3081 08-02
105 연가 2433 08-02
104 연가 2335 08-02

검색

회원로그인

회원가입

사이트 정보

컴퓨터 정보,윈도우즈,리눅스,포토샵,3ds
맥스,프로그래밍 강좌팁

접속자집계

오늘
121
어제
350
최대
5,287
전체
635,468
Copyright © www.qdata.co.kr All rights reserved.