2012-09-03 2 views
1

LPWSTR의 내용을 기존 wstring으로 복사하는 방법을 찾고 있습니다. 나는 그 반대를하기 위해 많은 예제를 발견했지만, 여전히 그것을 할 방법을 찾고있다.기존 wstring에 LPWSTR 할당

감사

답변

1

이 할당 시간을 절약 할 경우, 표준 : : wstring의 보통 옳은 일을하는 것이 좋다,하지만 당신은 정말 절대적으로이 작업을 수행해야하는 경우 ...

wcsncpy(&wstr[0], wsrc, wstr.size()-1); 
wstr[wstr.size()-1] = 0; 

나는 정말 더러운 쓰는 것을 느꼈다. 참고 :이 작업은 wstr objet에 공간을 할당하지 않습니다. 또한, wstr이 실제로 비어 있다면, 나는 그것이 폭발 할 것이라는 것을 보증합니다. 그래서 조심하십시오. 이미 저장되어있는 용도로만 사용됩니다. 더 많은 공간을 원한다면 .resize()를 적절히 필요로하지만 앞에서 말했듯이 std :: wstring의 대입 연산자는 방금 방치하면 원하는대로 할 것입니다. 하지

LPWSTR k = L"my string"; 
std::wstring ws(k); 

이 또는 당신이 정말을하는 기존의 형식 wstring

std::wstring existing; 
.... 
existing.assign(k); 
+0

"wstr = wsrc;" 아무도? –

+0

* 정확하게 *. 그것은 그 대답의 일부분이 될 것입니다. 아마도 기존의 wstring에 복사 할뿐만 아니라 기존 wsting의 실제 메모리를 복사하는 것이 지나치게 과장 될 것입니다. 이는 내가 작성한 것입니다. 할당 op 나 .assign()을 사용하는 것이 훨씬 안전합니다. 나는 완전히 동의합니다. – WhozCraig

1

. 올바른 방법은 에 wstring에 LPCWSTR을 할당하는 것입니다. 그러면 컴파일러는 내용이 올바로되었는지 을 기존 char 버퍼에 복사하거나 먼저 할당 한 다음 복사합니다.

1

에 할당해야하는 경우 것은 해킹 및 구현에 의존 왜

+0

총 해킹에 동의합니다. * 컴파일러가 완전히 동의하지 않으면 기존 버퍼로 복사합니다. std :: wstring의 구현은이를 보장합니다. 컴파일러는 opcode를 구축하고 있습니다. – WhozCraig

+0

예, 예 ... 명확하게 :) –

2

.c_str()이 문자열 (마침표)을 수정 한 후에 동일한 포인터를 렌더링한다고 보장 할 수 없습니다.

std::wstring 개체에 LPWSTR를 할당하는 올바른 방법은 같은 operator=()을 사용하는 것입니다

std::wstring existingString = L"text"; 
LPCWSTR c_str = L"more text"; 
existingString = c_str; 

그러나 이것은 매우 간단하다; 어쩌면 당신은 그것이 그것을 커버하지 않으면 당신이하려고하는 것에 대해 정교해야합니다.

관련 문제