本日のその他自分用メモ(CString⇒char*変換関係)

プロジェクトのプロパティ>全般>文字セットで「マルチバイト文字セットを使用する」になっていると、CString cstr;から、char p[];への変換は、strcpy( p, cstr );とかであっけなく簡単にできるのだが、ここの設定が「Unicode文字セットを使用する」になっていると、例えば

CString pw;
char* s_pw[ /* 十分なバイト数 */]; // あるいは動的確保領域
  {
    size_t sz = 0;
    wcstombs_s(&sz, s_pw, pw.GetLength()+1, pw, _TRUNCATE);
  }

のような処理をしないと、CStringからchar*型への文字列変換がどうにもままならない。またUnicodeになっちゃってると、MessageBoxとかに渡す普通の"hello"などといった文字列も、何やら_T("hello")とか書かないと怒られるようになってしまうま。