- PR -

VC++2005での、CStringからCharへの変換

1
投稿者投稿内容
よしよしよっしー
会議室デビュー日: 2006/04/13
投稿数: 2
投稿日時: 2006-04-13 14:58
VC++2003以前では下記のコードで変換できていたのですが、2005になってから変換ができません、どなたか変換方法のご教授をお願いします。

CString str = _T("test");
char buf[256];
strcpy( buf, str );

宜しくお願いします。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-04-13 15:09
TCHARというのはご存知でしょうか?
# _Tマクロを意味も知らず使っているようですね
TCHAR.H におけるジェネリック テキストのマッピング

VS2005からは、デフォルトの文字セットが Unicode になったため、
TCHARはすべてwchar_t型にコンパイル時に置換されるようになりました。
例)
  • TCHAR  →wchar_t
  • LPCTSTR →const wchar_t*
  • _T("〜") →L"〜"
  • CString →wchar_tを1文字とした文字列クラス


よって、_Tマクロを使う場合は、TCHARをつかうようにコーディングします。
コード:

CString str = _T( "test" );
TCHAR buf[ 256 ];
_tcscpy_s( buf, str );



明に char 型としてつかいたい場合はコード変換しないといけません。
wcstombs_sあたりを使って、Unicodeを変換してみてください。

最初から、マルチバイト文字セットを使いたいのであれば、プロジェクトのプロパティから設定してください。
(この場合だと、なんで_Tマクロなんて使っているのっていうことになりますけど。)

類似スレ
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=345765&SiteID=7


ちなみに、C/C++言語はVBとは違って、識別子は大文字小文字を区別します。
Char とかくと、System::Char構造体(C++/CLI)を指すように誤解されますので注意してください。

[ メッセージ編集済み 編集者: Blue 編集日時 2006-04-13 15:28 ]
よしよしよっしー
会議室デビュー日: 2006/04/13
投稿数: 2
投稿日時: 2006-04-13 16:31
ご回答ありがとうございました。
デフォルトの文字セットをプロパティで変更すればよいのですね。
(これが解りませんでした)
ある製品の関数の引数にcharを渡さなければいけないので、それで困っておりました。
渡す引数がTCHARなら問題なかったのですが、、。
1

スキルアップ/キャリアアップ(JOB@IT)