문제

std :: wstring.c_str ()는 wchar_t*를 반환합니다.

WCHAR_T*에서 TCHA*로 또는 std :: WSTRING에서 TCHAR*로 어떻게 이동합니까?

감사

도움이 되었습니까?

해결책

#include <atlconv.h>

TCHAR *dst = W2T(src.c_str());

ANSI 또는 유니 코드 빌드에서 올바른 일을합니다.

다른 팁

이것을 사용하십시오 :

wstring str1(L"Hello world");
TCHAR * v1 = (wchar_t *)str1.c_str();

tCHA*는 유니 코드가 정의 된 경우 wchar_t*로 정의됩니다. 그렇지 않으면 char*입니다. 따라서 코드는 다음과 같이 보일 수 있습니다.

wchar_t* src;
TCHAR* result;
#ifdef UNICODE
result = src;
#else
//I think W2A is defined in atlbase.h, and it returns a stack-allocated var.
//If that's not OK, look at the documenation for wcstombs.
result = W2A(src);
#endif

안에 일반 WCHAR_T가 TCHA와 같은 크기가 아닐 수 있으므로 불가능합니다.

문자 세트간에 변환하기 위해 이미 여러 솔루션이 나열되어 있습니다. 캐릭터 세트가 변환되는 범위에 대해 겹치는 경우 작동 할 수 있습니다.

가능한 한 문제를 완전히 회피하고 다음과 같이 TCHA 문자에 정의 된 표준 문자열을 사용하는 것을 선호합니다.

typedef std::basic_string<TCHAR> tstring;

이것을 사용하면 이제 Windows TCHA 매크로와 호환되는 표준 라이브러리 호환 문자열이 있습니다.

당신이 사용할 수있는:

wstring ws = L"Testing123";
string s(ws.begin(), ws.end());
// s.c_str() is what you're after

Windows에서 작동한다고 가정합니다.

유니 코드 빌드 구성에 있다면 TCHAR 그리고 wchar_t 같은 것입니다. /z 세트가 있는지 여부에 따라 캐스트가 필요할 수 있습니다. wchar_t 유형 대 WCHAR_T는 typedef입니다.

멀티 바이트 빌드 구성에 있다면 필요합니다. MultiByteToWideChar (그리고 Vera).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top