[질문]유니코드 함수 사용시 문자열 표현방법...
글쓴이: id7468 / 작성시간: 수, 2004/06/16 - 11:03오전
음..질문을 또올리네요.. ^^; 이번엔 유니코드문제인데요.
윈도우즈에서 ANSI함수를 가지고 유니코드를 사용할때 보통
wchar_t name[30];
wcscpy(name, L"개똥이");
보통 문자열 앞에 L 을 붙여주는데요. POSIX계열에서도 똑같이 쓰나요? 솔라리스에서 컴파일 해보니 형변환 없이 포인터가 인자가 넘어왔다고 나오는데요. 인자형이 틀린것 같습니다. 어떤식으로 표기해줘야하는지요.
그리고 희한한건 윈도우즈에서의 swprintf와 솔라리스나 리눅스 쪽에서 사용하는 swprintf가 인자가 틀리다는 겁니다. 윈도우즈 함수가 짝퉁인가요?
감사합니다.
Forums:
답변은 아니지만...
프로그램에서 wchar_t와 L""을 사용하지 마세요. 언젠가는 반드시 후회하게 됩니다.
윈도우즈라면 TCHAR와 TEXT(""), 혹은 _T""를 사용하셔야 합니다. 전에 바꾸느라 아주 생고생을 한적이 있습니다. 일반론적이 얘기지만 단정은 모든 프로그머의 적입니다. 구현 방법이 차이가 너무나 커서 한쪽을 완전히 포기하는게 아닌, 유니코드와 멀티바이트/안시 정도의 차이라면 양쪽을 다 지원하는게 좋습니다.
그리고 익숙치 않아서 처음에는 고생을 하겠지만 sprintf대신에 snprintf를, strcpy대신에 strncpy를 사용하세요. 모든 스트링 관련 함수는 다 최대 크기가 들어가는 걸 써야합니다. 원도우라면 실제 _sntprintf와 _tcsncpy가 되겠죠. size_t 하나가 더 들어가서 타이핑이 귀찮기는 하지만 언젠가 목숨을 구해줄겁니다.
산넘어 산
사용하는 컴파일러의 버젼별로 틀릴 수 있는것 같네요.제가 가지고 있는
사용하는 컴파일러의 버젼별로 틀릴 수 있는것 같네요.
제가 가지고 있는 LINUX의 gcc(3.2.2)에서는 정상적으로 동작을 하네요.
물어보신 두가지는 다음과 같습니다.
1. L을 붙이는건 표준인것 같네요. 양쪽(MS, *NIX)에서 동일하게 사용됩니다.
2. swprintf는 똑같은 형으로 정의가 되어있습니다.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_sprintf.2c_.swprintf.asp
http://www.scit.wlv.ac.uk/cgi-bin/mansec?3C+swprintf
직접한번 확인해 보세요.
------------------------------
좋은 하루 되세요.
그렇군요.
네.. 그렇군요. 제가 로컬로 깔아놓은 MSDN에는
int swprintf( wchar_t *buffer, const wchar_t *format [, argument] ... );
요런 타입밖에 않 나와있어서 다른줄 알았는데 또 있었군요. 감사합니다.
그리고 솔라리스 테스트 해본 결과 L 을 붙여주면 정상적으로 동작하더군요.
현재 제가 QNX에서 테스트 하고 있는데 이놈이 잘못된거 같습니다.
답변 주신분들 모두 감사드립니다. :lol:
댓글 달기