質問

私は(書式を使用する必要のあるプログラムを持っています)。 CStringの変数に文字列リテラルとint型を結合する機能。私はこれを行うにはいくつかの異なる方法を試してみましたが、それらのコードはここにあります:

// declare variables used
CString _CString;
int _int;

// try to use format function with string literal
_CString.Format("text",_int); 

// try to use format function with C-Style cast
_CString.Format((wchar_t)"text",_int);

// try to use format function with static_cast 
_CString.Format(static_cast<wchar_t>("text"),_int);

最初のものを返しますエラーC2664: '無効ATL :: CStringT ::フォーマット(定数はwchar_t *、...)': 'のconstのchar [33]' から 'のconst wchar_t型*' に1パラメータ変換することはできません。

秒の場合は、エラーがないが、テキストを漢字で表示されます。

第1リターンエラーC2440: 'static_castを': 'のconst char型[33]' と 'はwchar_t'

へ変換することができません

wchar_tにCStringsを変換するための任意のアイデア* sの?
おかげ

役に立ちましたか?

解決

問題が

ですから、(結構です)UNICODEビルドを実行していることです
_CString.Format(); 

私はワイド文字の文字列にするための最初のパラメータを期待して機能します。あなたはワイド文字列リテラルを形成するためにL""構文を使用する必要があります:

_CString.Format(L"text",_int); 

もちろん、あなたが実際のCStringにフォーマットint変数を取得するために指定が必要になります。

_CString.Format(L"text: %d",_int); 
あなたはtchar.hヘッダーが含まれている場合、

は、あなたが作るために、Microsoftのマクロを使用することができます文字列リテラルワイド文字か(そうでない場合はANSIとして知られている)正規古い文字あなたがUNICODEかを構築しているかどうかに応じます:

_CString.Format(_T("text: %d)",_int); 

私は言うだろう、あなたはANSIのサポートを必要とするだろうサポートレガシーものにしている計画、私はおそらくtchar.hのものを気にしないだろう場合を除きます。

他のヒント

まあ、それはあなたがターゲットに欲しいものを文字列型の完全には明らかではないのですが、ここで私がやっているだろう何ます:

_CString.Format(_T("%d"), _int);
型にしようとすると、コンパイルしてUnicode文字列にマルチバイト文字列をキャストし、それはまだマルチバイト文字列だから、それはトラブルを求めています。それはあなたが欲しいものだ場合は、文字列全体だけでなく、それを型キャスト変換する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top