2012-01-18 9 views
2

또는 wchar_t *를 사용하여 wstring을 초기화하는 방법은 무엇입니까?wchar_t *를 wstring으로 변환하려면 어떻게해야합니까?

나는 이런 식으로 시도했지만 꽤 효과가 없습니다. LPVOID가 주어지며 wchar_t 포인터를 가리 킵니다. 그냥 보통 문자열 함수를 사용할 수 있도록 wstring에 넣기를 원합니다.

LPVOID lpOutBuffer = NULL; 
//later in code this is initialized this way 
lpOutBuffer = new WCHAR[dwSize/sizeof(WCHAR)]; 
//fills up the buffer 
doStuff(lpOutBuffer, &dwSize); 
//try to convert it to a wstring 
wchar_t* t = (wchar_t*)lpOutBuffer; 
wstring responseHeaders = wstring(t); 

printf("This prints response headers: \n%S", t); 
printf("This prints nothing: \n%S", responseHeaders); 

doStuff 정말 난 그냥 쉽게 내 예를 이해할 수 있도록 그것을 변경 WinHttpQueryHeaders 를 호출합니다.

+2

작동해야합니다 -'wstring'에 대한 생성자가 있습니다. 너는 무엇을 얻 느냐? 또한 버퍼가 null로 종료 되었습니까? –

+0

코드를 업데이트하여 포인터를 초기화했습니다. 나는 C++을 처음 사용하기 때문에 포인터와 같은 것에 대해 머리를 감싸고있다. 나는 wchar_t가 null로 끝나는 지 모른다. 나는 WinHttpQueryHeaders Funtion을 호출하고있다. - http://msdn.microsoft.com/en-us/library/windows/desktop/aa384102(v=vs.85).aspx 버퍼가 null 인지를 알 수 없었다. . – ScArcher2

+1

@ ScArcher2 : "그게 효과가 없다"는 것은 무엇을 의미합니까? –

답변

3

wstring 개체를 printf으로 전달하는 것은 작동하지 않습니다. 당신에게 기본 문자열 데이터에 const 포인터를 제공합니다()

printf("This prints nothing: \n%S", responseHeaders.c_str()); 

c_str로 두 번째 prinf 라인을 바꿔.

+0

이것은 나의 문제가 있었던 곳이다. 고맙습니다! – ScArcher2

+0

@ ScArcher2이 오류를 피할 수 있도록 컴파일러에 printf 형식 검사가 있는지 확인해야합니다. – bames53

+1

WinHttpQueryHeaders에 대한 참조는 Visual C++를 제안합니다. 그렇지 않습니다. –

4

당신이 말하는 같은 wchar_t포인터에 LPVOID 점, 간접의 수준이 잘못입니다합니다.

LPVOID lpOutBuffer; 
wchar_t** t = (wchar_t**)lpOutBuffer; 
wstring responseHeaders = wstring(*t); 

편집 : 질문이 변경되었습니다. 이 대답은 더 이상 적용되지 않습니다.

+0

나는 내가 뭘 말하고 있는지 알지 못하기 때문에 나는 나의 예를 바로 잡았다 고 생각한다. – ScArcher2