문자열에 대해서 늘 할때마다 고생을 하고 있다..
프로젝트 속성에서 멀티바이트 또는 유니코드 중에 설정해서 문자열에 대한 처리를 생각하게 된다.
멀티바이트의 경우는 보통 한 문자를 1byte로 처리하다가 경우에 따라 2byte로 묶어서 처리를 한다. 이와 같이 그 char에 대한 크기가 고정적이지 않기 때문에 문자열이 깨지는 현상이 생길수 있다.
이에 대한 문제 해결책이 유니코드.. 유니코드는 모든 글을 2byte로 처리를 한다. 하지만 시스템 설정에 따라서 설정을 용이하게 문자열을 처리할 수 있는 것이 tchar..!!
아래와 같이 설정이 바뀐다..
#ifdef _UNICODE #define TCHAR wchar_t #define _T(x) (Lx) #define _tcscpy_s wcscpy_s #else #define TCHAR char #define _T(x) (x) #define _tcscpy_s strcpy_s #endif #ifdef _UNICODE #define _tcout wcout |
문자열에 사용되는 함수
strcpy -> wcscpy -> _tcscpy (문자열을 복사) strncpy -> wcsncpy -> _tcsncpy ( 사이즈 만큼 복사) strlen -> wcslen -> _tcslen (문자열 길이 확인) strcat -> wcscat -> _tcscat (두 문자열 이어 붙이기) strncat -> wcsncat -> _tcsncat (사이즈 만큼 이어 붙이기) strcmp -> wcscmp -> _tcscmp (문자열 비교) (반환 값(-1, 0, 1)) strncmp -> wcsncmp -> _tcsncmp ( 사이즈 만큼 문자열 비교) stricmp -> wcsicmp -> _tcsicmp (대소문자를 구별하지 않고 문자열을 비교) strnicmp -> wcsnicmp -> _tcsnicmp (사이즈 만큼 대소문자를 구별하지 않고 문자열을 비교) strchr -> wcschr -> _tcschr (문자 찾기) strrchr -> wcsrchr -> _tcsrchr (문자 찾기 (문자열 끝에서 부터 검색))strstr -> wcsstr -> _tcsstr (문자열 찾기) strpbrk -> wcspbrk -> _tcspbrk (문자 찾기 (두번째 인수를 찾고자 하는 문자들의 집합(문자열)으로 구성) strtok -> wcstok -> _tcstok (문자열 자르기 (두번째 인수를 집합(문자열)으로 구성 가능)) => 해당 문자가 NULL로 치환 됨 strset -> wcsset -> _tcsset (문자 치환, 첫째 인수의 모든 문자를 두번째 인수 문자로 변경함) => "abc" -> "bbb" strnset -> wcsnset -> _tscnset (사이즈 만큼 문자 치환) strupr -> wcsupr -> _tcsupr (대문자로 치환) strlwr -> wcslwr -> _tcslwr (소문자로 치환) strrev -> wcsrev -> _tcsrev (문자열 역정렬) => "가나다라마" -> "마라다나가" [출처] 문자열 함수 (멀티바이트->유니코드->TCHAR)|작성자 콩이아부지
|
참고
CString::GetBuffer() 메쏘드의 용도
http://www.indidev.net/forum/viewtopic.php?p=381
< http://blog.naver.com/alonglog/130044427979 : char, wchar_t, TCHAR, CString 클래스 >
< http://blog.naver.com/jangpro1003/90098546315 : char *, LPCSTR, TCHAR 차이 >
< http://blog.naver.com/chizeta/100022303081 : TCHAR 매크로 설명 >
< http://blog.naver.com/pir9562/20031286323 : 문자열의 불편함을 해소하기 위한 TCHAR >
< http://blog.naver.com/picbuddy/80020151178 : CString -> char * 형변환 >