Winapi 将LPWSTR分配给现有WSTR环
我正在寻找一种将LPWSTR的内容复制到现有WSTR的方法。 我已经找到了很多相反的例子,但我仍然在寻找一种方法Winapi 将LPWSTR分配给现有WSTR环,winapi,type-conversion,wstring,Winapi,Type Conversion,Wstring,我正在寻找一种将LPWSTR的内容复制到现有WSTR的方法。 我已经找到了很多相反的例子,但我仍然在寻找一种方法 谢谢如果这是为了节省分配时间,std::wstring通常很适合做正确的事情,但是如果您确实必须这样做 wcsncpy(&wstr[0], wsrc, wstr.size()-1); wstr[wstr.size()-1] = 0; 写那封信我觉得很肮脏。注意:这不会在wstr对象中分配空间。此外,我保证如果wstr实际上当前为空,它将爆炸,所以要小心。它只会使用你已经有的
谢谢如果这是为了节省分配时间,std::wstring通常很适合做正确的事情,但是如果您确实必须这样做
wcsncpy(&wstr[0], wsrc, wstr.size()-1);
wstr[wstr.size()-1] = 0;
写那封信我觉得很肮脏。注意:这不会在wstr对象中分配空间。此外,我保证如果wstr实际上当前为空,它将爆炸,所以要小心。它只会使用你已经有的东西来存储。如果您想要/需要更多的空间,那么.resize()可以适当调整,但正如我前面所说的,如果您愿意,std::wstring的赋值运算符将真正执行您想要的操作。如果这是为了节省分配时间,std::wstring通常可以执行正确的操作,但是如果您确实必须执行此操作
wcsncpy(&wstr[0], wsrc, wstr.size()-1);
wstr[wstr.size()-1] = 0;
写那封信我觉得很肮脏。注意:这不会在wstr对象中分配空间。此外,我保证如果wstr实际上当前为空,它将爆炸,所以要小心。它只会使用你已经有的东西来存储。如果您想要/需要更多的空间,那么适当地调整.resize(),但正如我前面所说的,如果您允许的话,std::wstring的赋值运算符将真正实现您想要的功能。为什么不呢
LPWSTR k = L"my string";
std::wstring ws(k);
或者如果您真的必须分配给现有的wstring
std::wstring existing;
....
existing.assign(k);
为什么不呢
LPWSTR k = L"my string";
std::wstring ws(k);
或者如果您真的必须分配给现有的wstring
std::wstring existing;
....
existing.assign(k);
这样做依赖于黑客和实现。正确的方法是将LPCWSTR分配给wstring-然后编译器将确保内容正确地复制到现有的char缓冲区(如果它存在)中,或者首先分配它,然后复制。这样做是一种黑客操作和实现依赖。正确的方法是将LPCWSTR分配给wstring-然后编译器将确保内容正确地复制到现有的char缓冲区(如果存在)中,或者首先分配它,然后复制。您不能保证
.c_str()
将在修改字符串句点后呈现相同的指针(如果您正试图这样做)
将LPWSTR
分配给std::wstring
对象的正确方法是使用操作符=()
,如:
std::wstring existingString = L"text";
LPCWSTR c_str = L"more text";
existingString = c_str;
但这是非常简单的,;也许你应该详细说明如果这不包括它,你将要做什么。你不能保证
.c_str()
在修改字符串句号后会呈现相同的指针(如果你正试图这样做的话)
将LPWSTR
分配给std::wstring
对象的正确方法是使用操作符=()
,如:
std::wstring existingString = L"text";
LPCWSTR c_str = L"more text";
existingString = c_str;
但这是非常简单的,;也许你应该详细说明一下,如果这还不包括它,你想做什么。完全正确。这将是答案的“随它去”部分。我写的不仅仅是复制到一个正在退出的wstring中,而且复制到这个已经存在的wsting的实际内存中,这可能有点过头了。使用赋值op或.assign()更安全,我完全同意。这将是答案的“随它去”部分。我写的不仅仅是复制到一个正在退出的wstring中,而且复制到这个已经存在的wsting的实际内存中,这可能有点过头了。使用赋值op或.assign()要安全得多,我完全同意。我同意这完全是一种黑客行为。完全不同意编译器将确保复制到现有缓冲区中。std::wstring的实施将确保:;编译器正在生成操作码。我同意这完全是一个黑客行为。完全不同意编译器将确保复制到现有缓冲区中。std::wstring的实施将确保:;编译器正在生成操作码。