簡體   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