C++의 wcout 과 wstring 에 대한 질문드립니다. (덧붙여 return?
글쓴이: ixevexi / 작성시간: 토, 2003/11/22 - 8:53오후
특수한 (한자를 사용해야하는) 프로그램인데요
당연히 wchar_t를 쓰기로 했습니다.
대략 코드는 다음과 같습니다.
int main() { wstring buffur = L"金延秀"; wcout << buffur; wcout << buffur.c_str(); wcout << buffur[1]; wchar_t * name =L"김연수" wcout << name; }
물론 맞는 헤더들도 다 넣어서 컴파일시 워닝하나 안뜹니다.
문제는 예상했던 출력값이 나오는게 아니라 그냥 아무것도 안나옵니다.
제가 무얼 잘못했는지 사실 잘 모르겠습니다. -_-;; 고수분들 도와주셔요
그리고 위에서 return 0;가 없는데 어케 워닝내지는 에러메시지가 안나오냐?
제말이 그말입니다. 감히 strong type인 C++이 return 0;를 빼먹다니!!!
int main()
{
//컴파일러가 정적변수들을 초기화하는 코드들...
//내코드들
//컴파일러가 정적변수 리소스를 해체하는 코드들...
}
위에서 굵게된 것들이 실제로는 컴파일시에 추가된다고 들었습니다.
그것때문에 return 값을 안써도 되게 표준이 변했는지 느무느무 궁금합니다.
갈쳐주세요..
Forums:
참조
흠..
출력하실때 로케일 설정이 안되어서 안나오는것 아닐까요 ^^;
한번 로케일 설정을 해보세요
로케일 설정된 xterm과 심지어는 윈도우xp!에서도 해보았습니다.
로케일 설정된 xterm과
심지어는 윈도우xp!에서도 해보았습니다.
제가 알기론 xp는 유니코드/2바이트문자/를 완벽히 지원하는 걸로 알고 있는데
둘다 아무것도 안나옵니다. ㅠ.ㅜ
정녕 char로 노가다를 해야하는 것입니까.....
C++, 그리고 C++....
죽어도 C++
참조
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
std::locale::global( std::locale( "kor" ) ); //"UTF-8") );
std::cout << "Set locale to " << std::locale().name() << std::endl;
wstring buffur = L"金延秀";
wcout << buffur << endl;
wchar_t * name =L"김연수";
wcout << name;
return 0;
}
한글 로케일 설정하니 잘 찍힙니다 ^^:
Linux에서는 테스트 안해봤습니다.
아마 똑 같이 되지 않을가 싶습니다 ^^;
참고해보세요 :-)
전에 C++ 문제가 있길래 풀어보다가 문득 생각이 나서 wstring와 wcout을 써본 적이 있습니다. 아래와 같이 하니 결과가 나오더군요. 전에 테스트 해봤던 플랫폼은 win2000 + VC6입니다.
맘에 안드는 부분도 있지만 w_char 문제라면 참고해보세요 :-)
PS: 제가 예전에 테스트 해본결과로는 wstring에서 []를 쓰는 것은 안 좋아보입니다. 반환값이 short int등으로 나오니 (2byte코드를 한번에 출력할려고 하니 어쩔수 없겠지요.) 차라리 substr으로 문자열로 짤라내는 것이 좋더군요.
- 죠커's blog / HanIRC:#CN
답변 감사드립니다. ^^C++에서도 로케일 설정을 해야하는군요
답변 감사드립니다. ^^
C++에서도 로케일 설정을 해야하는군요
초보인지라 잘 몰랐습니다.
제가 본 책들에선 국제화에 관한 주제가 너무 부족한지라...
혹시 유니코드나 국제화에 관한 좋은 책이 있다면 추천을...
그리고 return을 안써도 되는 이유가 아직도 안나왔네요
궁금해 죽겠어요....
C++, 그리고 C++....
죽어도 C++
경고는 100% 신용할수 없습니다.
예전에 저도 삽질한 적이 있습니다. 로케일과 wstring의 []연산자. 생각하면 끔찍합니다. 간단한 거지만 한동안 삽질하게 만들었으니깐요.
국내에서 찾은 자료들은 실제로 안되는 경우가 많아서 저는 일본과 중국 자료들을 참고했습니다. 국제화에 대해서 중국보다도 쳐진다는 것에 서글펐었네요.
경고가 안나온 이유는 단순히 말하면 임플리멘테이션의 마음입니다. (main의 return이 없어도 허용하는지에 대해서는 살펴봐야겠네요.) 표준에서 main의 return을 반드시 허용하는지는 지금 포맷을 한 상태라서 pdf를 열수 없어서 확인이 안되지만...
경고나 에러에 대해서는 (..) 임플리멘테이션의 마음입니다. 쓸데없는 워닝과 에러도 뱉고 쓸만한 워닝과 에러를 안 뱉는 경우도 있지요.
- 죠커's blog / HanIRC:#CN
[url]http://www.research.att.com/~bs/bs_
http://www.research.att.com/~bs/bs_faq2.html#void-main
에 가보시면..
라고 써있네요.. 안써도 되는가봅니다..
답변 감사드립니다. :D 좋은 한 주일 시작하세요
답변 감사드립니다. :D
좋은 한 주일 시작하세요
C++, 그리고 C++....
죽어도 C++
댓글 달기