|
XE5에서 c_str() 과 t_str()은 둘다 wchar* 로 반환함. 구분이 없음
유니코드를 처음 지원하면서 VCL 라이브러리를 만들 때 TCHAR 타입에 따라서 다른 포인터형이 사용될 수 있도록 한 거지만
사실상 t_str()은 의미가 없음. C++ 표준에선 string Templete 의 T에 따라서 c_str()의 타입이 조건부 컴파일 되도록하기 때문에
c_str() 이외의 다른 반환 함수가 필요 없음. 둘 다.. 똑 같은 타입이면서 c_str() 하나로 통일하지 않고 그대로 두고 있는 것은
모바일에 빠져서 열심히 삽질하고 있는 엠바의 무성의 때문이 아닐런지..
정성훈.해미 님이 쓰신 글 :
: 안녕하세요.
: 정성훈.해미입니다.
:
: 문자열 변수형 AnsiString과 UnicodeString는 모두 c_str() 함수를 내장하고 있지만
: 약간 다릅니다.
:
: AnsiString의 경우 c_str()은 char*로 반환하고
: UnicodeString의 경우 c_str()은 wchar*로 반환합니다.
: UnicodeString을 char*로 반환할려면 t_str()을 사용하야 합니다.
:
: OpenDialog1->FileName 은 UnicodeString형이고
: strcpy함수는 인자로 char*를 받기 때문에
:
: 다음과 같이 t_str()로 해주시면 짤리지 않고 정상적으로 나옵니다.
:
: strcpy(aaa, OpenDialog1->FileName.t_str()); //.t_csr()을 사용
:
:
:
: 초보사용자 님이 쓰신 글 :
: :
: : char aaa[256];
: : .
: : .
: : .
: : strcpy(aaa, OpenDialog1->FileName.c_str());
: :
: : 이렇게 코딩이 돼있고요...
: : 옛날 버전 빌더로는 제대로 컴파일이 됐었는데, C++Builder XE5로 설치하고
: : 실행했더니 에러가 납니다.
: :
: : Cannot convert 'wchar t*' to 'const char *' <-이런 에러가 납니다.
: :
: : 그래서
: : strcpy(aaa, (const char *)OpenDialog1->FileName.c_str());
: : 이렇게 했더니 에러는 없어졌는데,
: : 정상적으로 strcpy가 안되고 첫글자 하나만 aaa에 들어가네요....
: :
: : 조언부탁드립니다.
: :
: : 미리 꾸벅^^*
|