[英]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.