プロジェクトのプロパティ>全般>文字セットで「マルチバイト文字セットを使用する」になっていると、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")とか書かないと怒られるようになってしまうま。