如何声明wchar_t并稍后设置其字符串值?

use*_*756 8 c++ string unicode wchar

我正在为Windows开发,我还没有找到有关如何正确声明以及稍后设置unicode字符串的充分信息.至今,

wchar_t myString[1024] = L"My Test Unicode String!";
Run Code Online (Sandbox Code Playgroud)

我假设上面做的是[1024]是分配的字符串长度,我需要在该字符串中有多少个字符.L""确保引号中的字符串是unicode(我找到的alt是_T()).现在稍后在我的程序中,当我尝试将该字符串设置为另一个值时,

myString = L"Another text";
Run Code Online (Sandbox Code Playgroud)

我收到编译错误,我做错了什么?

此外,如果任何人有一个简单而深入的unicode应用程序资源,我想有一些链接,曾经为一个专门用于该网站的书签添加书签,但似乎现在已经不见了.

编辑

我提供了整个代码,我打算将它用作DLL函数,但到目前为止还没有返回.

#include "dll.h"
#include <windows.h>
#include <string>
#include <cwchar>

export LPCSTR ex_test()
{
wchar_t myUString[1024];
std::wcsncpy(myUString, L"Another text", 1024);

int myUStringLength = lstrlenW(myUString);

MessageBoxW(NULL, (LPCWSTR)myUString, L"Test", MB_OK);

int bufferLength = WideCharToMultiByte(CP_UTF8, 0, myUString, myUStringLength, NULL, 0, NULL, NULL);
if (bufferLength <= 0) { return NULL; } //ERROR in WideCharToMultiByte
return NULL;

char *buffer = new char[bufferLength+1];
bufferLength = WideCharToMultiByte(CP_UTF8, 0, myUString, myUStringLength, buffer, bufferLength, NULL, NULL);
if (bufferLength <= 0) { delete[] buffer; return NULL; } //ERROR in WideCharToMultiByte

buffer[bufferLength] = 0;

return buffer;
}
Run Code Online (Sandbox Code Playgroud)

Die*_*ühl 5

最简单的方法是首先以不同的方式声明字符串:

std::wstring myString;
myString = L"Another text";
Run Code Online (Sandbox Code Playgroud)

如果您在使用数组坚持wchar_t直接,你会使用wcscpy()或更好wcsncpy()的<cwchar>:

wchar_t myString[1024];
std::wcsncpy(myString, L"Another text", 1024);
Run Code Online (Sandbox Code Playgroud)