• 締切済み

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"しかセットされません。 何か設定などでこのようになるのでしょうか? これをセットした文字列をセット、取得可能とならないものでしょうか?

みんなの回答

回答No.5

 こんにちは。  以下の様にGetString()を呼び出して見ては。 CString aaa; aaa = _T("ABCDEF"); TCHAR tc[MAX_PATH]; ::_stprintf_s(tc, _T("%s"), aaa.GetString());

zaza3
質問者

お礼

ご回答くださった皆様いろいろとありがとうございました。 unicode(2byte文字コード)関係の設定が思い通りにならなかったようです。 基礎から学びなおしたいと思います。 sprintf(bbb,"%S",aaa) と %s を「%S」 に変更したらうまく行きました。

すると、全ての回答が全文表示されます。
  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.4

#2、#3の方は Unicode版を作成する前提で答えてますが そんなこと考えてないという、貴方のために、、 とりあえず VC6のプロジェクト設定の、プリコンパイル定義で MBCSがあるか確認 UNICODEが定義されていると_TマクロはUnicode文字列に置換されるので MBCSにしてみる。 設定を変えたくないなら _Tを外せば動くと思います

すると、全ての回答が全文表示されます。
  • Lchan0211
  • ベストアンサー率64% (239/371)
回答No.3

sprintfを使うつもりだったのなら、_stprintfに変更してください。 (No.2さんの指摘通り変数bbbはTCHAR型です。) ワイド文字を使うプロジェクト設定になっているのにsprintfを使うと、 このよう現象になります。 (ワイド文字の'A'は、0x41,0x00になるため)

すると、全ての回答が全文表示されます。
  • hhsession
  • ベストアンサー率100% (1/1)
回答No.2

strcpyの使用方法が間違っています。関数の仕様を確認してください。 後、_Tマクロを使用して文字列をセットされているようですので、strcpy ではなく _tcscpy を使用されたほうがよいです。 せっかくの_Tマクロで汎用テキストマッピングを行っているのに、台無しです。 変数bbbについても同様で、char型 の変わりに TCHAR型 を使用されたようがよいです。

すると、全ての回答が全文表示されます。
  • 0x131cc6e
  • ベストアンサー率36% (42/115)
回答No.1

>// aaaには "A"の先頭1文字しかセットされない というのをどうやって確認したんですか? >strcpy(bbb, "%s", aaa); // としても >// bbbには "A"しかセットされません。 まずstrcpyの関数仕様を確認しましょう。

zaza3
質問者

補足

すみません strcpyではなく sprintf(bbb,"%s",aaa) としても aaa に "A"のみとなります。 TRACE( _T("%s"),aaa); で デバッガで確認すると"ABCDEFG"が出力されます。 aaa,bbbはデバッガ上の値を見て確認しました。

すると、全ての回答が全文表示されます。

関連するQ&A