2013-05-15 3 views
2

문자열을 LPCWSTR로 변환하는 함수를 작성하려고합니다. 다음은 내가 가지고있는 것이다 :C++ - 문자열과 LPCWSTR 사이의 변환

나는이 코드를 디버깅과 함께 실행했고 리턴 라인에서 전송 된 문자열은 안전하게 w에 앉았다. 그것을 반환 할 때 그러나,이 같은 같습니다

을 "ووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووو وووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووو ꑯ 䎕 骙 ᰀ 䪀 ɽ 绐 ɽ ▼ ཛ E "

... 그래서 기본적으로, 쓰레기. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

2

넓은 문자열 w은 함수의 끝에서 범위를 벗어나서 소멸됩니다.

c_str()에 의해 반환 된 값은 더 이상 유효한 데이터를 가리 키지 않습니다.

대신 와이드 문자열을 반환하고 c_str()을 필요한 위치에서만 사용하십시오.

wstring stows(string str) 
{ 
    return wstring(str.begin(), str.end()); 
} 

//... 

wstring ws = stows("hello"); 

api_call_needing_LPCWSTR(ws.c_str()); 
+0

좋아요, 그렇다면 유효한 포인터를 어떻게 반환 할 수 있습니까? –

+2

'wstring'을 반환합니다. –

2

할당되지 않은 메모리를 여기에서 재 시도하고 있습니다. wstring이 범위를 벗어 났고 포인터를 반환하고 있습니다. 그래서 쓰레기가 나옵니다.

관련 문제