ワイド文字列
ワイド文字列について理解していなかったので個人的なまとめ。
//wchar_t wstr[] = "日本語"; // const char [11]' から 'wchar_t []' に変換出来ない wchar_t wstr[] = L"日本語"; // ワイド文字列の先頭に L をつける std::wcout.imbue(std::locale("japanese")); std::wcout << wstr[0] << std::endl; std::wcout << wstr[1] << std::endl; std::wcout << wstr[2] << std::endl; assert(wstr[0] == L'日'); assert(wstr[1] == L'本'); assert(wstr[2] == L'語'); wstr[2] = L'人'; assert(wstr[2] == L'人'); assert('a' == L'a'); assert(std::string("日本語").size() == 6); assert(std::wstring(L"日本語").size() == 3); assert(std::wstring(L"abc").size() == 3); for( const char* str = "日本語" ; *str != 0 ; str++){ std::cout << (*str) << std::endl; // 日本語で表示できない } for( const wchar_t* str = L"日本語" ; *str != 0 ; str++){ std::wcout << (*str) << std::endl; }
改めて見てみると扱いが全然違うことが分かります。
これから意識してみよう。
[参照]
http://hw001.gate01.com/eggplant/tcf/cpp/wchar_t_trap.html