将LPWSTR分配给现有的wstring

时间:2012-09-03 12:28:17

标签: winapi type-conversion wstring

我正在寻找一种方法将LPWSTR的内容复制到现有的wstring。 我已经找到了很多反面的例子,但我仍然在寻找一种方法。

由于

4 个答案:

答案 0 :(得分:2)

你不能保证.c_str()在修改字符串后会呈现相同的指针,句点(如果你正在尝试这样做的话)。

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

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

但这非常简单;也许你应该详细说明如果不能覆盖它你想要做什么。

答案 1 :(得分:1)

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

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

我觉得写得很脏。注意:这不会在wstr对象中分配空间。此外,我保证如果事实上wstr目前是空的,它会爆炸,所以要小心。它只会使用你已有的任何存储空间。如果你想要/需要更多的空间,那么.resize()应该是正确的,但正如我之前所说的,std :: wstring的赋值运算符将真正做到你想要的东西。

答案 2 :(得分:1)

为什么不

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

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

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

答案 3 :(得分:1)

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