0

我有一个宽 char 变量,我想用一个字符串大小对其进行初始化。我尝试了以下但没有奏效。

std::string s = "aaaaaaaaaaaaaaaaaaaaa"; //this could be any length 
const int Strl = s.length();
wchar_t wStr[Strl ]; // This throws error message as constant expression expected.

我有什么选择来实现这一目标?malloc 在这种情况下会起作用吗?

4

3 回答 3

3

由于这是 C++,请使用new而不是malloc.

它不起作用,因为 C++ 不支持 VLA。(可变长度数组)

数组的大小必须是编译时常量。

 wchar_t* wStr = new wchar_t[Strl];

 //free the memory
 delete[] wStr;
于 2012-05-11T06:32:17.507 回答
3

首先,你不能只是将一个字符串复制到一个宽字符数组中——一切都会对你发狂。

Astd::string是用 建造的char,astd::wstring是用 建造的wchar_t。将 a 复制string到 awchar_t[]是行不通的——你会得到胡言乱语。阅读 UTF8 和 UTF16 以获取更多信息。

也就是说,正如Luchian所说,VLA 不能在 C++ 中完成,他的堆分配可以解决问题。

但是,我必须问你为什么要这样做?如果您正在使用std::string,则(几乎)不需要使用字符数组。我假设您正在尝试将字符串传递给以字符数组/指针作为参数的函数 - 您知道.c_str()将返回指向内容的指针的字符串函数吗?

于 2012-05-11T06:35:04.107 回答
1
std::wstring ws;
ws.resize(s.length());

这将为您提供一个 wchar_t 容器,该容器将用于此目的,并且在概念上是一个可变长度容器。并尽量远离 C++ 中的 C 样式数组,标准容器适合各种情况,包括与 C api 库的接口。如果您需要将字符串从 char 转换为 wchar_t ,c++11 引入了一些字符串转换函数来将 wchar_t 转换为 char,但我不确定它们是否可以反过来工作。

于 2012-05-11T06:50:46.527 回答