DOBON.NET DOBON.NETプログラミング掲示板過去ログ

CString型からの変換

環境/言語:[VisualStudio 2005 MFC]
分類:[.NET]

CStringからchar*に変換したいのですがエラーが出てうまくいきません。

    str = "test";

    char *p = new char[str.GetLength()+1];
    strcpy( p, str );

    delete [] p;

error C2664: 'strcpy' : 2 番目の引数を 'CString' から 'const char *' に変換できませんとエラーが出てしまいます。
■No28443に返信(kintonyさんの記事)
> CStringからchar*に変換したいのですがエラーが出てうまくいきません。

お使いのプロジェクトの設定が Unicode 文字セットだからでは?

マルチバイト文字セットの場合、CString から暗黙的にキャストできますが、Unicode 文字セットの場合はできなかったはずです。
このため、CT2A cstr(str); といったように CT2A でマルチバイト文字セットに変換するやり方が考えられます。


なお、char と wchar_t は違うものです。
char/wchar_t の違い、マルチバイト文字セットと Unicode 文字セットの違いについて調べてみてください。
  • 題名: Re[1]: CString型からの変換
  • 著者: Hongliang
  • 日時: 2011/04/12 0:03:11
  • ID: 28445
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
TCHAR* じゃなくて、char* ですか?
VS2005 から既定の文字セットがUnicodeになったので、CString も Unicode ベースになっています。
一旦 CStringA のコンストラクタに CString を渡して生成してやり、そちらを使うようにすれば char* へのコピーもできます。

が、char* ですか?
確かにUnicode になっていました。

strcpy( p, CStringA(str) );

と修正したところうまく行きました。
ありがとうございます。

文字列が良く分からなくて、TCHAR*のことも調べてみたいと思います。
解決済み!
  • 題名: Re[3]: CString型からの変換
  • 著者: Blue
  • 日時: 2011/04/13 8:50:25
  • ID: 28454
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
2011/04/13(Wed) 08:50:38 編集(投稿者)

文字列によってはnewで取得する領域をオーバーしませんか?

CStringA strA(str);
char* p = new char[strA.GetLength() + 1];
strcpy(p, strA);

とすべきでは?


newにこだわらないなら_strdupをつかうと

char* p = _strdup(strA(str));

と記述できます。(freeは必要ですが)
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板