본문 바로가기

강의자료/C/C++

051. tchar를 사용하자.


◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!


tchar는 안시코드(char)와 유니코드(wchar_t) 문자열로 바로 변환할 수 있는 일종의 매크로 타입이다.
이를 이용하면, 해당 프로그램이 안시코드를 필요로 하는지 유니코드를 필요로 하는지에 상관없이 코드를 작성할 수 있다.
프로그램 작성 후, 프로젝트 설정 또는 #define만으로 원하는 코드로 컴파일을 할 수 있다.
visual studio 2008의 경우 기본 설정이 유니코드로 되어있어 tchar를 사용할 경우, 유니코드로 컴파일이 된다.

#include  
#include 
using namespace std;

/*
#ifdef _UNICODE
#define TCHAR wchar_t
#define _T(x) L##x
#define _tcscpy_s wcscpy_s
#else
#define TCHAR char
#define _T(x) x
#define _tcscpy_s strcpy_s
#endif
*/

#ifdef _UNICODE
#define _tcout wcout
#else
#define _tcout cout
#endif

int main( )
{
	wcout.imbue(locale("korean"));

	TCHAR src[] = _T("MBC 아카데미 디지털 교육원");
	TCHAR dest[128];

	// 문자열 복사.
	_tcscpy_s(dest, _countof(dest), src);			// 버퍼가 작을 경우, 런타임 에러 발생.
	_tcout << dest << endl;

	// 문자열의 일부만 복사.
	//strncpy_s()
	_tcsncpy_s(dest, _countof(dest), src, 12);		// 12글자만 복사.
	_tcout << dest << endl;

	TCHAR str1[128] = _T("MBC 아카데미 ");
	TCHAR str2[] = _T("디지털 교육원");

	// 문자열 합성.
	_tcscat_s(str1, _countof(str1), str2);
	_tcout << str1 << endl;

	// 문자열의 일부만 합성.
	_tcsncat_s(str1, _countof(str1), str2, 6);		// 한글 1글자를 1글자로 해석한다.
	_tcout << str1 << endl;

	// 문자열 비교.
	int ret = _tcscmp(src, str1);
	if(ret == 0) _tcout << _T("같은 문자열.") << endl;
	else _tcout << _T("다른 문자열.") << endl;

	// 문자열 포맷 생성.
	TCHAR gugu[] = _T("구구단");
	int dan = 5, row = 2;
	_stprintf_s(dest, _countof(dest), _T("%s : %d x %d = %d"), gugu, dan, row, dan*row);
	_tcout << dest << endl;

	return 0;
}