質問: strcmp(buf, "593"); ```
回答: こんにちは。 細々違っています。 まず、TCHAR型は、Visual C++固有の型です。プロジェクトのプロパティの全般にある「文字セット」の設定が、「マルチ バイト文字セットを使用する」ならchar型、「Unicode 文字セットを使用する」ならwchar_t型になります。前者は1バイト、後者は2バイト(Visual C++の場合)です。 GetDlgItemText()のnMaxCountは「 TCHAR 単位で指定します」ですから、バイト単位で結果を返すsizeofでは不適切です。 `(int)(sizeof(buf)/sizeof(TCHAR))`のような記述をすると文字セットがどちらの場合でも対応できます。 同様にstrcmp()ではなく_tcscmp()を使った方が好ましいです。 最後に文字定数も同じ問題があります。"abc"はchar型文字列です。L"abc"はwchar_t型文字列です。両者を切り替えるマクロとしてTEXT().aspx)があります。 【余談ですが】 C++で取り扱う文字コードとして何を使うのか、結構悩ましいです。 MicrosoftはUTF-16を推奨しています。linuxではUTF-8がデフォルトです。 Visual C++では「Unicode 文字セットを使用する」時UTF-16となります。「マルチ バイト文字セットを使用する」の時は残念ながらShift-JISです。UTF-8も扱うことも可能です。 Windows専用ソフトならUTF-16にしておいた方が無用なトラブルに巻き込まれないです。ただし、UTF-16非サポートなライブラリは多々ありますから、それらを使う時たいへん面倒な思いをします。 マルチ・プラットフォーム対応する場合はUTF-8に統一するのがベストかも知れません。Windowsではちょっと面倒ですが、対策は可能です。何と言ってもUTF-16非対応なライブラリを使う時の苦労が大きく減ります。