C++에서 string형이 안전한가요???
글쓴이: BrownBear / 작성시간: 금, 2014/05/30 - 1:14오후
C#이나 Java에서는 아무렇지도 않게 string형을 사용해왔는데
C++에서 #include , using std::string;형을 추가로 해서 string을 사용하니 많은 함수에서 LPCWSTR, TCHAR, const char*등 여러가지 형을
요구를 하던데 그대로 string.c_str()형을 이용해서 형변환을 해서 코딩을하긴했는데 안전성이 어떤가요???? 즉 메모리 관리 차원에서나, 오류차원에서나 별차이없나요??
Forums:
ㅋㅋㅋㅋ 네 걱정말고 쓰셔요 컴파일러가 에러
ㅋㅋㅋㅋ
네 걱정말고 쓰셔요
컴파일러가 에러 뿜으면 그 때, 하나의 프로젝트를 유니코드/MBCS 둘 다 컴파일하기 위해선 윈도우/MSVC가 어떤 메커니즘을 제공하고 있는지 찾아보시고요. TCHAR가 어떻게 정의되어있는지 보시면 되겠죠.
강제로 형변환하는 것만 하지 마시고요.
강제로 형변환하는 것만 하지 마시고요. reinterpret_cast 뿐만 아니라 const_cast도 마찬가지입니다.
아래처럼 형변환을 하는데
LPCWSTR을 요구한다면
string TEST = "TEST";
라는것이 있고
A라는 함수에서 인자로 LPCWSTR를 요구한다면
A((LPCWSTR)TEST.c_str());
이렇게 해주는데 괜찮을까요??
아니오. 안됩니다. LPCWSTR은 wide
아니오. 안됩니다. LPCWSTR은 wide character 문자열형을 의미합니다.
http://msdn.microsoft.com/en-us/library/cc230352.aspx
그럼 c++에서는 std::basic_string 형이 대응되겠죠. std::wstring이 그겁니다.
std::wstring TEST = L"TEST";
A(TEST.c_str());
먼저 요 아래 달린 링크를 쭉 읽어보세요.
감사합니다.
아 찾고있었는데 이렇게 쉬운게있었네요 형변환 하는게 그렇게짜증날지 몰랐는데
감사합니다.
사실 wchar_t* 와 char* 사이의 형
사실 wchar_t* 와 char* 사이의 형 변환보다는 실제 데이터의 문자셋 변환이 좀 더 실제적인 문제로 부딪히게 되시지 싶습니다. MutliByteToWideChar 와 WideCharToMultiByte 를 노상 쓰셔야 될 듯..
http://www.jiniya.net/lecture
http://www.jiniya.net/lecture/techbox/unicode1.html
사람들이 신경을 안쓰고 대충 짜서 그렇지 쉬운 문제 아닙니다.
서로 다른 두 타입간에 섞어쓰려면 변환하는 중간과정이 필요합니다.
이건 문자열들끼리도 마찬가지로 적용됩니다.
LPCWSTR, TCHAR, const char *, wchar_t 들을 모두 각자 다른 타입을 생각을 하시는게 좋을 겁니다.
서로간의 변환을 명시적으로 처리하시고, 이 과정을 함수나 패턴으로 만들어두면 나중에 바뀌어야 할때 편하겠죠.
예전에는 ASCII만 생각하면 되었는데 유니코드 인코딩이 난립하면서 완전 복마전이 되어버렸습니다.
표준 함수 대신에 특정 라이브러리를 기준으로 정해서 그것만 쓰는 것도 좋은 방법 중 하나입니다.
MS면 WinAPI(유니코드 계열 W접미사 붙는 함수 위주로)로, 리눅스면 iconv나 GTK로...
유니코드가 덩치는 커도
utf-16이 가변길이로서 최대 4바이트 크기로 제일 크지만 모든 문자코드를 지원하기 때문에 국제적으로 통용되는 프로그램을 만들고자 한다면, utf-16이 좋지 않을까 하는데요. 만약 범세계적인 통신 프로그램을 만든다고 하면 서로 다른 문자끼리의 교신을 어떻게 표현할 수 있을까요? 그럴 필요가 없다면 ascii도 좋은 문자코드이죠.
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
시스템 간 데이터 교환 목적으로는 요즘은 utf-8이
시스템 간 데이터 교환 목적으로는 요즘은 utf-8이 사실상 표준입니다. 유니코드가 보편화되기 이전에 영문권에서 발전해온 기존 시스템들, 데이터들이 사용하던 7-bit ASCII와 하위 호환이 되기 때문에. 한국처럼 비영문권인 곳에서 아스키는 쓸모가 없습니다, 영어만 쓸 게 아니면.
utf-16은 아예 유니코드/wide-character API를 기반으로 하는 윈도우 플랫폼에서 많이 쓰게 되죠.
댓글 달기