LPWSTR의 내용을 기존 wstring으로 복사하는 방법을 찾고 있습니다. 나는 그 반대를하기 위해 많은 예제를 발견했지만, 여전히 그것을 할 방법을 찾고있다.기존 wstring에 LPWSTR 할당
감사
LPWSTR의 내용을 기존 wstring으로 복사하는 방법을 찾고 있습니다. 나는 그 반대를하기 위해 많은 예제를 발견했지만, 여전히 그것을 할 방법을 찾고있다.기존 wstring에 LPWSTR 할당
감사
이 할당 시간을 절약 할 경우, 표준 : : 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);
. 올바른 방법은 에 wstring에 LPCWSTR을 할당하는 것입니다. 그러면 컴파일러는 내용이 올바로되었는지 을 기존 char 버퍼에 복사하거나 먼저 할당 한 다음 복사합니다.
에 할당해야하는 경우 것은 해킹 및 구현에 의존 왜
총 해킹에 동의합니다. * 컴파일러가 완전히 동의하지 않으면 기존 버퍼로 복사합니다. std :: wstring의 구현은이를 보장합니다. 컴파일러는 opcode를 구축하고 있습니다. – WhozCraig
예, 예 ... 명확하게 :) –
.c_str()
이 문자열 (마침표)을 수정 한 후에 동일한 포인터를 렌더링한다고 보장 할 수 없습니다.
std::wstring
개체에 LPWSTR
를 할당하는 올바른 방법은 같은 operator=()
을 사용하는 것입니다
std::wstring existingString = L"text";
LPCWSTR c_str = L"more text";
existingString = c_str;
그러나 이것은 매우 간단하다; 어쩌면 당신은 그것이 그것을 커버하지 않으면 당신이하려고하는 것에 대해 정교해야합니다.
"wstr = wsrc;" 아무도? –
* 정확하게 *. 그것은 그 대답의 일부분이 될 것입니다. 아마도 기존의 wstring에 복사 할뿐만 아니라 기존 wsting의 실제 메모리를 복사하는 것이 지나치게 과장 될 것입니다. 이는 내가 작성한 것입니다. 할당 op 나 .assign()을 사용하는 것이 훨씬 안전합니다. 나는 완전히 동의합니다. – WhozCraig