繁体   English   中英

初始化宽字符数组

[英]Initialize wide char array

我有一个很宽的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是否可以工作?

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

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

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

 wchar_t* wStr = new wchar_t[Strl];

 //free the memory
 delete[] wStr;

首先,您不能仅将字符串复制到宽字符数组中, 否则一切都会发疯。

一个std::string是用char构建的,一个std::wstring是用wchar_t构建的。 string复制到wchar_t[]将无法正常工作-您将无所适从。 阅读有关UTF8和UTF16的更多信息。

就像Luchian所说的那样, VLA不能用C ++完成,而他的堆分配就可以解决问题。

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

std::wstring ws;
ws.resize(s.length());

这将为您提供wchar_t容器,该容器将达到目的,并且从概念上讲是可变长度的容器。 并尝试尽可能避免使用C ++中的C样式数组,标准容器适合各种情况,包括与C api库的接口。 如果您需要将字符串从char转换为wchar_t,则c ++ 11引入了一些字符串转换函数以将wchar_t转换为char,但是Im不确定它们是否可以以其他方式工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM