我正在为Windows开发,我还没有找到有关如何正确声明以及稍后设置unicode字符串的充分信息。到目前为止,
wchar_t myString[1024] = L"My Test Unicode String!";
我假设上面做的是[1024]是我在字符串中需要多少个字符的字符串长度。 L“”确保引号中的字符串是unicode(我找到的alt是_T())。现在稍后在我的程序中,当我尝试将该字符串设置为另一个值时,
myString = L"Another text";
我遇到编译错误,我做错了什么?
此外,如果有人有一个简单而深入的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;
}
答案 0 :(得分:5)
最简单的方法是首先以不同的方式声明字符串:
std::wstring myString;
myString = L"Another text";
如果您坚持直接使用wchar_t
数组,则可以wcscpy()
使用wcsncpy()
或更好<cwchar>
:
wchar_t myString[1024];
std::wcsncpy(myString, L"Another text", 1024);
答案 1 :(得分:3)
wchar_t myString[1024] = L"My Test Unicode String!";
正在初始化数组,如
wchar_t myString[1024] = { 'M', 'y', ' ', ..., 'n', 'g', '\0' };
但是
myString = L"Another text";
是一个你不能对数组做的赋值。你必须将新字符串的内容复制到旧数组中:
const auto& newstring = L"Another text";
std::copy(std::begin(newstring), std::end(newstring), myString);
或者如果是指针
wchar_t* newstring = L"Another text";
std::copy(newstring, newstring + wsclen(newstring) + 1, myString);
或nawaz建议使用copy_n
std::copy_n(newstring, wsclen(newstring) + 1, myString);