• ベストアンサー

CStringからchar*への型変換について教えてください。

以前の質問に int型 → CString型/char型 がありましたが、 CString型をchar*型に変換する方法を 教えていただければありがたいです。 MSDNで「LPCTSTRキャスト」が説明されていましたが、 例が載ってないのでよくわかりませんでした。 よろしくお願いします。

  • zico
  • お礼率60% (48/80)

質問者が選んだベストアンサー

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.1

目的にもよりますが一時的にchar配列として使いたいならCString::GetBuffer()が利用できます。 char配列としての利用が終わったらCString::ReleaseBuffer()する必要がありますが。 直接CString内の文字列を扱う必要があるならCString::operator LPCTSTRで文字列ポインタが得られます。 ただし、CStringオブジェクトをいじると無効ポインタなる可能性があるので気をつけてください。 MSDNのMicrosoft Foundation Classリファレンス→CString→クラスメンバで確認してください。

zico
質問者

お礼

大変参考になりました。ありがとうございました。

その他の回答 (2)

  • jun_l
  • ベストアンサー率18% (4/22)
回答No.3

自信はないのですが、ちょっと書きたかったので・・・。 --------------- CString cStr = _T("文字列"); char * str = new char[cStr.GetLength() + 1]; strcpy(str,cStr); ~~~ delete [] str; --------------- ↑このようにすればstrにコピーできます。 正しい方法かどうかは分かりませんが。 別にnewでメモリーを確保しなくても普通の配列変数でいいですよ。

  • cocky
  • ベストアンサー率57% (232/402)
回答No.2

LPCTSTRキャストは要するに「const TCHAR*」へのキャストになるので、そのままではchar*としては使えません。 そのため、この場合は「(LPTSTR)(LPCTSTR)hogehoge」という形で、「CString→LPCTSTR→LPTSTR」と二段階キャストをすると、ただの「TCHAR*」にキャストができますから、Unicode環境でなければchar*として使えます。 Unicode環境の場合は残念ながらよくわかりません。

zico
質問者

お礼

大変参考になりました。ありがとうございました。

関連するQ&A

  • CString から LPCTSTRの型に変換

    visual studio 2013 VC++を使用していますが、WINDOWSの関数に渡すためにCString からLPCTSTRに変換する必要があります。実際にどのようにするのかわかりません。 例えば、以下のサンプルは他の質問コーナーの回答をアレンジしたものです CString str = _T("ABC"); int siz = str.GetLength()+1; LPCTSTR pszFName = new TCHAR[siz]; _tcscpy_s( pszFName, siz, str ); で変換するのですが LPCTSTRからwchar_t*へ変換できませんとエラーがでます _tcscpy_s()は使用できないのでしょうか

  • CString型からdouble型への変換

    C++は初心者です。VC4.0を使っていますがMFCなどは使っていません。 CString型の変数をint型やlong型への変換はなんとかできたのですが、double型へ変換することができずに困っています。atofを使えばいいのだと思い下記のように記述したのですが、コンパイルするとエラーがでます。   CString sample = "0.234";   double i;   i = atof((const char*)sample); error C2440: 'type cast' : cannot convert from 'class CString' to 'const char *' どう直せば無事にdouble i に0.234を格納できるのでしょうか?よろしくお願いします。

  • VC++にてCString型のフルパスをfopenする

    VC++(VisualStudio2005)にてCString型のフルパスをfopenしたいと思っています。 他ページでは char *name = new char[filepass.GetLength()+1]; strcpy( name, filepass ); でstrcpyでCstring→charへ変換できるとあったのですが、 'strcpy' : 2 番目の引数を 'CString' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) 1> この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。 というエラーをはいて実行できませんでした。 lstrcpy(name, filepass)でも 1 番目の引数を 'char [100]' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 となりました。 何か良い方法をご存じないですか? char型に変換できなくとも、結果的にfopenを使ってファイルオープンできれば良いです。

  • VC++ char[10]へのCString値の代入

    CString a = "ABCDEFGHIJ"; char[10] b; bにaを代入したいのですがstrcpyとか含めて色々(キャストしたり・・・) やってみましたがうまくいきません。 C++初心者でCStringの扱いがうまくできないのです(><) どなたかお助けくださいお願いします。

  • CStringをLPCTSTRへ変換

    お世話になっております。 VC2005を使用しております。 現在、CFileDialogのGetPathName(CString型)で設定された ファイル名に、CImage.save(LPCTSTR型)を使用して画像を保存したい と思っております。 しかし、CString型をLPCTSTR型に変換する方法がわかりません。 方法を教えていただけないでしょうか? 今は、GDI+を使用してませんが、やはり今後の事を考えると使用して ソフトを組んだほうがよいのでしょうか? よろしくお願いします。

  • CStringについて

    CStringにおいてFindではエラーが出ないのに、ReverseFindだとエラーがでます。 error C2664: 'ReverseFind' : 1 番目の引数を 'char [4]' から 'char' に変換できません。 (新しい機能 ; ヘルプを参照) この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。 キャストするとエラーは出ませんが文字列の検索は失敗してしまいます。 Findはまったく問題無いのにどうしてこのようなことが起きるのでしょう? どう対処すれば良いか教えてください。 CString ddd; ・ ・ nn=ddd.Find("DOW");     ←エラーなし nn=ddd.ReverseFind("DOW"); ←エラーあり 環境はWIN98 VC++6.0 MFCです。

  • 型変換の仕方について。。。

    VisualC++でプログラミングしています。 int型の数値データをCString型もしくは、char型の文字列に変換する方法をご存知の方、ぜひ、アドバイスお願いします。

  • C言語の型変換について

    short int 型をunsigned char型に変換する方法をおしえてください

  • CStringとCByteArrayの変換

    いつもお世話になっています。 MFCのCStringクラスとCByteArrayを相互に変換したいと考えているのですが、どうもうまくいきません。 文字コードはユニコードを想定しています。 ====================================================== CByteArray data; CString cs1 = _T("あいうえお"); CString cs2; LPBYTE lpByte = (LPBYTE)(LPCTSTR)cs1.GetBuffer(); data.SetSize(cs1.GetLength() * sizeof(TCHAR)); CopyMemory(data.GetData(), lpByte, data.GetSize()); cs1.ReleaseBuffer(); cs2 = (LPCTSTR)data.GetData(); AfxMessageBox(cs2); ====================================================== (現在の出力状況) あいうえお・・・・ 文字は正しく出力されますが、語尾に文字化けしたようなものがつきます。 他に良い方法があればよろしくお願いします。

  • Cstring(日本語含む)をcharに変換したいのですが

    日本語を含む文字列が格納されたCstringをcharに変換したく 以下のプログラムを作成しましたがwcstombs_s() でエラーに なってしまいます。(戻り値が EILSEQ) どうしたらいいか、アドバイスをいただけないでしょうか? CString csPass("Testテスト"); char cName[512]; size_t sz = 0; errno_t err; err= wcstombs_s(&sz, cName, sizeof(cName), csPass.GetString(), _TRUNCATE); if(0 != err){ return; } 【環境】 WindowsXP VC++2008