LPCWSTRとかLPSTRとか、いろいろありすぎてよくわからないWin32の文字列型。
初心者はとりあえずTCHARだけ覚えておきましょう。
混乱を避けるため、あえて理屈抜きで、Win32の文字列型についてシンプルにまとめてみました。
Win32の文字列型は難しい
Win32は古くからの歴史を受け継いでいるため、文字列型がたくさんあります。
「ワイド文字とかマルチバイト文字とか、よくわからん。とりあえず動かしたい!どれを使えばいいの?」という人もいるでしょう。
文字列のキホンはTCHAR
早速、結論です。
文字列型の変数を用意したいときは、とりあえずTCHARで定義しておけばよいです。
TCHAR str[256];
TCHARで定義しておけば、関数側が要求する型がLPWSTRでもLPCWSTRでも、そのまま投入できます。
あと、文字列を定義するときは必ず[256]のように長さも書くことが必要です。
これさえおさえておけば、ほかの言語とほぼ同様に文字列変数を扱うことができます。
変数の初期化
文字列型の変数(TCHAR)を初期化するには、以下のようにします。
TCHAR hoge[256]= _T("hogehoge!");
_Tというマクロを使います。TEXT(“”)でも一緒です。日本語も変数に格納することができます。
文字列を代入する
TCHARに文字列を代入するには、wsprintfを使います。
TCHAR hoge[256];
wsprintf(hoge, _T("%s"), _T("hogehoge!"));
これもほぼお決まりのパターンですので、そのまま覚えてしまいましょう。
変数を文字列として代入する
変数(例えばINT型など)を文字列として代入したいときも、wsprintfを使います。
TCHAR hoge[256];
wsprintf(hoge, _T("%d"),123 );
▲これを実行すると、hogeは“123”という文字列が入ります。
複数の変数を代入することもできます。
TCHAR hoge[256];
wsprintf(hoge, _T("%d%d"),123,345 );
▲これを実行すれば、hogeは“123345”という文字列となります。
文字列と組み合わせることもできます。
TCHAR hoge[256];
wsprintf(hoge, _T("変数は%d%d"),123,345 );
▲これを実行すれば、hogeは“変数は123345”という文字列となります。
上記コードでの%d
はフォーマット指定子と呼ばれるものです。引数に指定された変数をどういう形式で表示するかを指定できます。
フォーマット指定子 | 変数 |
%dまたは%i | 数値 |
%s | 文字列 |
ほかのフォーマット指定子については、Microsoftのホームページに掲載されています。
関数から文字列を取得する
Win32の関数から文字列を取得したいときも、TCHARで大丈夫です。
TCHAR PATH[260];
GetCurrentDirectory(260, PATH);//カレントディレクトリのパスを格納
Win32の関数は通常は文字列型をLPCWSTR型で返します。この場合もTCHARで定義した変数に値を格納することができます。あまり考えずにTCHARで変数を用意しましょう。
メッセージボックスに変数を表示する
取得したTCHAR型の変数は、メッセージボックスにそのまま表示できます。
TCHAR hoge[256];
wsprintf(hoge, _T("%s"), _T("hogehoge!"));
MessageBox(NULL, hoge, hoge, NULL);
便利です。
とりあえずTCHARを覚えよう
TCHARはうまいことできている文字列型で、環境にあった文字列型を自動的に選択してくれるようになっています。
ですので、とりあえずTCHARで定義しておけばだいたい動きます。
あとはプログラミングしながら、違いを覚えていけばいいと思います。
コメント