• ベストアンサー

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

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

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

  • ベストアンサー
  • FAY
  • ベストアンサー率49% (95/193)
回答No.2

>bにaを代入したいのですがstrcpyとか含めて色々(キャストしたり・・・) CString a = "ABCDEFGHJ"; char b[10]; strcpy(b, a.LockBuffer()); a.UnlockBuffer(); とか?

mugi-cha
質問者

お礼

動きました。#1さんの方法でも動きましたが #2さんの回答を参考にLockBufferとかキーワードを調べて見ました。 大変助かりましたどうもありがとうございました。

その他の回答 (3)

回答No.4

No.3 です。 失礼しました。CString には、c_str() はないようです。 あと、No.3 の #include <cstring> はたまたまた綴りが同じだけで、MFC の CString とは別物です。

mugi-cha
質問者

お礼

もしかして、調べてくださったのですか? どうもありがとうございました(^^)

回答No.3

CString は使ったことがないのですが、文字列がらみのクラスにはたいていの場合、Cの文字列との互換性のために、c_str() というメンバ関数があるはずです。 #include <cstring> CString a = "ABCDEFGHIJ"; char b[10]; std::strcpy(b, a.c_str()); あと、この場合、ABCDEFGHIJ の最後にくっついている、'\0' までをコピーしようとしますから、b[10] では、良くないことが起こる可能性があります。 (数が足りない)

  • pokepotto
  • ベストアンサー率31% (21/67)
回答No.1

lstrcpyを使っては? CString a ="ABCDEFGHIJ"; char b[10]; lstrcpy(b,a);

mugi-cha
質問者

お礼

うごきました(^^)ありがとうございました。

関連するQ&A

  • 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を使ってファイルオープンできれば良いです。

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

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

  • 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です。

  • VC6++ char配列の文字列をシリアライズする方法

    入門書には、char配列の文字列をシリアライズで保存する場合は、CStringにキャストして保存するとあったのですが、保存時は ar << (CString)m_char; で保存されているようなのですが、読み出し時はどうすればいいのでしょうか? ar >> (CString)m_char; では読めませんでした。 VC初心者です。よろしくお願いします。

    • ベストアンサー
    • CGI
  • 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を格納できるのでしょうか?よろしくお願いします。

  • CStringについて

    よろしくお願い致します。 CString型の文字の最後の1文字を’¥0’に変更するにはどうすれば良いのでしょうか? CStringのことが良く分かっていないので、質問の仕方が変かも知れませんがお教えください。 今は仕方なしに、こんな感じでやってます。 CString m_InputData; char moji[100]; int n; strcpy(moji,m_InputData); n=strlen(moji); moji[n-1]='\0' m_InputData=moji;

  • charの操作について

    お世話になります、フジと申します。 今回皆様にお聞きしたいことはchar型変数の操作についてなのですが、次のプログラムのようにchar型に代入した整数を16進数用に変換させ、最後に同じchar型の変数に代入したいと考えています。 int a,b,c; char data = 48; //dataに10進数48を代入 c = (int)data; //ここでcは48になる a = c/16;          //16進数用に変換 b = c%16; c = 10*a + b;        //ここでcは30になる このint型変数c(30)をchar型変数dataに代入するにはどうしたらいいでしょうか? char buf[5]; sprintf(buf,"%d",c); にすればchar型の配列に代入することは出来ますが、これだとcの値30がbuf[0]=3,buf[1]=0となってしまい、目的の操作が達成できません。 よい方法をしっている方がいましたら、宜しくお願い致します。

  • char型のポインタ配列に変数の値の代入できる?

    c言語でchar型のポインタ配列に変数の値を代入できるのでしょうか? 例えば int A[10]={1,2,3,4,5,6,7,8,9,10}; char *C[10]; のCに配列Aの中のデータを文字列として入れたいのです。 C[0]="A[0]"としてもA[0]という文字列が代入されてしまうだけなので… よろしくお願いします。

  • キャストについて str = (CString*)("999") ;

    環境 WIN98 VC++6.0 MFC にて いつもお世話になります。 先日質問したばかり(QNo.682705)なのですが、やはり納得できないことがあるのでお願いします。 分かっている人からみれば、おかしな疑問と思われるかも知れませんが、私にとっては素朴に疑問が生じてしまいます。 *************************** 以下2つのコードのうち、<A>は文法的にOKで<B>がNGな理由が知りたいです。 <A> CString* str ; str = (CString*)m_array.GetAt(i) ; //OK <B> CString* str ; str = (CString*)("999") ; //NG <A>は、m_arrayの要素にCString*を入れていて、初めて成り立つ式です。 と教わりましたが、むしろ私にはCString*以外が入っているため、CString*のキャストしていると思える。 CString*が入っているのなら、キャストする必要は無いのではないでしょうか? ネット上で見つけたコードなため、実際の値やm_arrayの宣言がどうなっているかは確認出来ません。 そして、<A>がおかしなコードでは無いという大前提にたつと、<A>は別の表現をすると <A> str = (CString*)(CString*以外のポインタ) ; となります。 そうすると<B>のコードも、"999"は999の文字列が入っているアドレスを指すポインタであるという考えが正しいとすると、 <B> str = (CString*)(999をさすポインタ) ; となり、おかしなコードではないと思えるのですが、考え方のどこがおかしいのでしょうか? ************************** 以下のことを教わった上であえて聞いています。 str = (CString*)("999"); は、リテラル文字列をつっこもうとしています。 リテラル文字列とCStringはまったく別物です。

  • VS C++6.0のCString にて先頭1文字しかセットされないのですが・・・

    Visual Studio C++ 6.0 にてあるサンプルPGより修正を行っているのですが (VS C++6.0初心者です) CString aaa; // と定義し aaa = _T("ABCDEFG"); //と文字列をセットしても // aaaには "A"の先頭1文字しかセットされない char bbb[20]; strcpy(bbb, "%s", aaa); // としても // bbbには "A"しかセットされません。 何か設定などでこのようになるのでしょうか? これをセットした文字列をセット、取得可能とならないものでしょうか?