Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 将LPWSTR分配给现有WSTR环_Winapi_Type Conversion_Wstring - Fatal编程技术网

Winapi 将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实际上当前为空,它将爆炸,所以要小心。它只会使用你已经有的

我正在寻找一种将LPWSTR的内容复制到现有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的实施将确保:;编译器正在生成操作码。