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