我想實現一個應用程序,我希望用戶在命令行上輸入重音字符。我想要做的是將char數組轉換成wstring的向量。如何將重音字符從命令行轉換爲wstring?
我在Linux上。
這是我走到這一步:
#include <vector>
#include <string>
#include <cstring>
#include <iostream>
std::vector<std::wstring> parse_args(int argc, const char* argv[]){
std::vector<std::wstring> args;
for(int i = 0; i < argc - 1; ++i){
auto raw = argv[i+1];
wchar_t* buf = new wchar_t[1025];
auto size = mbstowcs(buf, raw, 1024);
args.push_back(std::wstring(buf, size));
delete[] buf;
}
return std::move(args);
}
int main(int argc, const char* argv[]){
auto args = parse_args(argc, argv);
for(auto& arg : args){
std::wcout << arg << std::endl;
}
}
它的工作原理與普通字符預期,但重音字符不一樣。舉例來說,如果我做的:
./a.out Ménage
崩潰:
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_S_create
[1] 30564 abort ./a.out Ménage
唯一的例外來自wstring的的構造,因爲大小= 18446744073709551615(爲size_t - 1,我認爲),這似乎表明,有意想不到的角色。
我不明白它出了什麼問題?
我在做什麼錯了?
編輯:這將更好地
如果我添加
setlocale(LC_ALL, "");
在節目的開始,它不會崩潰,但會輸出一個奇怪的字符:
M�nage
現在可以成爲我的控制檯的問題嗎?
你的窗口? –
@PreetKukreti:Windows很少有名爲'a.out'的可執行文件。 – MSalters
這可能證明有幫助:http://stackoverflow.com/questions/6400597/why-does-mbstowcs-return-invalid-multibyte-character – hmjd