문제

방법이 있습니까? 내 컴퓨터는 AMD64입니다.

::std::string str;
BOOL loadU(const wchar_t* lpszPathName, int flag = 0);

내가 사용할 때 :

loadU(&str);

VS2005 컴파일러는 말합니다.

Error 7 error C2664:: cannot convert parameter 1 from 'std::string *__w64 ' to 'const wchar_t *'

어떻게하니?

도움이 되었습니까?

해결책

std :: wstring 객체가 있으면 전화 할 수 있습니다. c_str() 그것을 얻기 위해 wchar_t*:

std::wstring name( L"Steve Nash" );
const wchar_t* szName = name.c_str();

그러나 좁은 문자열에서 작동하므로 먼저 넓어야합니다. 여기에는 다양한 옵션이 있습니다. 하나는 Windows의 내장을 사용하는 것입니다 MultiByteToWideChar 루틴. 그것은 당신에게 줄 것입니다 LPWSTR, 이는 동등합니다 wchar_t*.

다른 팁

먼저 그것을 std :: wstring으로 변환합니다.

std::wstring widestr = std::wstring(str.begin(), str.end());

그런 다음 C 문자열을 가져옵니다.

const wchar_t* widecstr = widestr.c_str();

이것은 ASCII 문자열에만 작동하지만 기본 문자열이 UTF-8 인코딩 된 경우 작동하지 않습니다. MultibyteWideChar ()와 같은 변환 루틴을 사용하면이 시나리오가 올바르게 처리되도록합니다.

ATL 텍스트 변환 매크로를 사용하여 좁은 (char) 문자열을 넓은 (wchar_t) 하나로 변환 할 수 있습니다. 예를 들어 std :: string을 변환합니다.

#include <atlconv.h>
...
std::string str = "Hello, world!";
CA2W pszWide(str.c_str());
loadU(pszWide);

코드 페이지를 지정할 수도 있으므로 std :: 문자열이 UTF-8 숯이 포함되어 있으면 사용할 수 있습니다.

CA2W pszWide(str.c_str(), CP_UTF8);

매우 유용하지만 창문 만.

Linux/Unix에있는 경우 GNU C (ISO C 90)에 정의 된 MBSTOWCS () 및 WCSTOMBS ()를 살펴보십시오.

  • MBS는 "Multi Bytes String"을 나타냅니다. 기본적으로 일반적인 0이 종료 된 C 문자열입니다.

  • WCS는 넓은 숯불을 나타냅니다. WCHAR_T 배열입니다.

Wide Chars에 대한 자세한 내용은 GLIBC 문서를 살펴보십시오. 여기.

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