wprintf(L"%s", L"하하");이게 안된다는 것이다. 왜 그럴까? 그렇다면 이건?
// #1 wchar_t a[10]; mbstowcs(a, "하하", 5); wprintf(L"%s", a);첫번째 것과 비슷하지만.. 요걸 보자.
// #2 wchar_t *p; p = L"하하"; wprintf(L"%s", p);a와 p를 디버그 모드에서 보면 알겠지만.. 값이 "다르다". 그렇다면 #1과 #2의 다른점은? 특별히 달라 보이지 않는데.. 왜 출력이 안되는지... mbstowcs.c 파일을 뒤져보면.. mbstowcs()에서
// mbstowcs.c
if (pwcs)
{
...
#ifdef _MT
if (ptloci->lc_handle[LC_CTYPE] == _CLOCALEHANDLE)
#else /* _MT */
if (__lc_handle[LC_CTYPE] == _CLOCALEHANDLE)
#endif /* _MT */
{
/* C locale: easy and fast */
while (count < n)
{
*pwcs = (wchar_t) ((unsigned char)s[count]);
if (!s[count])
return count;
count++;
pwcs++;
}
return count;
}
...
}
와 같은 부분이 있다.
바로 현재 locale의 상태가 c locale라는 것.
문제를 알았다면 답은 바로 나온다.
locale.h에 선언되어 있는 setlocale() 라는 함수가 있는데 이것을 호출하면 locale를 변경할 수 있다.
그렇다면 일반적으로 사용되는 ansi로 바꾸어보자.
// #3 wchar_t a[10]; wchar_t *p; setlocale(LC_ALL, ".ACP"); mbstowcs(a, "하하", 5); p = L"하하"; wprintf(L"%s %s", a, p);둘다 잘 된다.
Posted by 장현준


