1

我正在寻找一种将 LPWSTR 的内容复制到现有 wstring 的方法。我找到了很多相反的例子,但我仍在寻找一种方法来做到这一点。

谢谢

4

4 回答 4

2

您不能保证.c_str()在修改字符串句点后会呈现相同的指针(如果这是您想要做的)。

LPWSTR将 a 分配给对象的正确方法std::wstring是使用operator=(),例如:

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

但这非常简单;如果这没有涵盖它,也许您应该详细说明您要尝试做什么。

于 2012-09-03T13:09:37.643 回答
1

如果这是为了节省分配时间,std::wstring 通常可以做正确的事情,但如果你真的绝对必须这样做......

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

我觉得写那个真的很脏。注意:这不会在 wstr 对象中分配空间。此外,我保证如果 wstr 实际上是空的,它会爆炸,所以要小心。它只会使用您已经拥有的任何东西进行存储。如果您想要/需要更多空间,则适当地使用 .resize() ,但正如我之前所说,std::wstring 的赋值运算符真的可以满足您的需求,只要您允许它。

于 2012-09-03T12:31:44.020 回答
1

为什么不

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

或者如果您真的必须分配给现有的 wstring

 std::wstring existing;
 ....
 existing.assign(k);
于 2012-09-03T12:34:53.390 回答
1

这样做是一个 hack 和实现依赖。正确的方法是将 LPCWSTR分配给wstring - 然后编译器将确保将内容正确复制到现有的 char 缓冲区(如果存在)或首先分配它然后复制。

于 2012-09-03T12:37:50.610 回答