前提・実現したいこと
マルチバイト文字が格納されているchar型の文字列をvector<char>に変換したいです。
char String = "abcあいうえお"*
↓変換後
vector<char> vec = {"a", "b", "c", "あ", "い", "う", "え", "お"}*
このような風にしたいのですが、マルチバイト文字が厄介で上手く文字を分割できず、例外が発生して処理が中断されてしまいます。
memcpy辺りに問題があるとは思いますがどうすればいいかわかりません。助言をお願いします……
該当のソースコード
C++
1#include <vector> 2#include <iostream> 3 4void foo(const char* String) { 5 std::vector<char*> vec; 6 7 for (int i = 0; String[i] != '\0'; ++i) { 8 int len = mblen(&String[i], MB_CUR_MAX); 9 char* buf; 10 memcpy(&buf, &String[i], len); 11 vec.push_back(buf); 12 } 13 14 for (const auto &c : vec) { 15 //Exception thrown at 0x0F9AD6CC (ucrtbased.dll) in 16 //Project1.exe: 0xC0000005: Access violation reading location 0xCCCCCC82. 17 std::cout << c << " "; 18 } 19} 20 21 22int main() { 23 foo("あのイーハトーヴォの透き通った風"); 24}
開発環境はVisual Studio 2017です。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/23 10:01
2018/03/23 11:27
2018/03/23 12:25
2018/03/24 02:27
2018/03/24 03:17
2018/03/24 03:18