메뉴 건너뛰기


Computer Science > Language Processing
 
4장. 윈도우즈(C/C++)에서 문자열 사용법 총정리
 
 
1. 정리
 
지금까지 여러가지의 문자열 처리 타입과 클래스들을 살펴 보았습니다.
문자열을 처리하는게 사실 쉬운일이 아니군요.
하지만 한번 쭉 읽으면서 정리를 하셨다면 대충 어떻게 사용해야 할 지 감은 잡으셨을 것 같습니다.
 
정리를 한다면 다음과 같습니다.
 
- 유니코드와 MBCS을 잘 구분하여 사용하여야 한다. 
- 클래스의 문자열은 형변환해서 수정하지 말아라.
- 다른 문자형 및 클래스로의 변환은 바로되지 않을 경우 LPCSTR, LPWCSTR 혹은 BSTR로 변환한 후 자신 원하는 타입으로 변환을 시도하라.
 
뭐 이것보다 생각해야 할 것이 많겠지만 실제 코딩시 위의 사항만 생각하신다면 무난할 것 같습니다.
 
다음은 각각의 형변환을 위해 LPCSTR, LPCWSTR, BSTR로 변환이 가능한지를 나타내는 표입니다.
 
이 표는 http://bektekk.wo.to/str04.htm 에서 가지고 왔습니다. 또한 여기 까지 작성한 강좌의 많은 부분도 이 웹링크의 문서의 많은 부분을 참조하였음을 밝힙니다.
 
 
Classstring
type
convert 
to char*?
convert to
const char*?
convert to
wchar_t*?
convert to
const wchar_t*?
convert
to BSTR?
construct
from char*?
construct
from wchar_t*?
_bstr_tBSTRyes, cast1yes, castyes, cast1yes, castyes2yesyes
_variant_tBSTRnononocast to
_bstr_t3
cast to
_bstr_t3
yesyes
stringMBCSnoyes, c_str()
method
nononoyesno
wstringUnicodenononoyes, c_str()
method
nonoyes
CComBSTRBSTRnononoyes, cast
to BSTR
yes, castyesyes
CComVariantBSTRnononoyes4yes4yesyes
CStringTCHARno6in MBCS
builds, cast
no6in Unicode
builds, cast
no5yesyes
COleVariantBSTRnononoyes4yes4in MBCS buildsin Unicode builds
1 Even though _bstr_t provides conversion operators to non-const pointers, modifying the underlying buffer may cause a GPF if you overrun the buffer, or a leak when the BSTR memory is freed.
2 A _bstr_t holds a BSTR internally in a wchar_t* variable, so you can use the const wchar_t* converter to retrieve the BSTR. This is an implementation detail, so use this with caution, as it may change in the future.
3 This will throw an exception if the data cannot be converted to a BSTR.
4 Use ChangeType() then access the bstrVal member of the VARIANT. In MFC, this will throw an exception if the data cannot be converted.
5 There is no BSTR conversion function, however the AllocSysString() method returns a new BSTR.
6 You can temporarily get a non-const TCHAR pointer using the GetBuffer() method.

 
 
 
Creative Commons License
Creative Commons License이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Copyright 조희창(Nicholas Jo). Some rights reserved. http://bbs.nicklib.com