0

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

// 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を返します:'void ATL :: CStringT :: Format(const wchar_t *、...)':パラメータ1を'constchar[33]'から'constwchar_t*'に変換できません

2つ目は、エラーはありませんが、テキストは漢字で表示されます。

3番目はエラーC2440を返します:'static_cast':'constchar[33]'から'wchar_t'に変換できません

CStringsをwchar_t*sに変換するためのアイデアはありますか?
ありがとう

4

3 に答える 3

3

さて、あなたがどの文字列タイプをターゲットにしたいのかは完全には明確ではありませんが、これが私がやっていることです:

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

マルチバイト文字列をUnicode文字列に型キャストしようとするとコンパイルされる場合がありますが、それでもマルチバイト文字列であるため、問題が発生します。必要に応じて、文字列全体を型キャストするだけでなく、変換する必要があります。

于 2011-01-06T03:42:34.270 に答える
2

問題は、UNICODEビルドを実行していることです(これは問題ありません)。

_CString.Format(); 

関数iは、最初のパラメーターがワイド文字列であることを期待しています。L""ワイド文字の文字列リテラルを作成するには、構文を使用する必要があります。

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

もちろん、int変数を実際にCStringにフォーマットするには、指定子が必要です。

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

ヘッダーを含めると、tchar.hMicrosoftのマクロを使用して、UNICODEを作成しているかどうかに応じて、文字列リテラルのワイド文字または通常の古い文字(別名ANSI)を作成できます。

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

しかし、ANSIサポートを必要とするレガシーなものをサポートすることを計画していない限り、私はおそらくそれらを気にしないだろうと思いますtchar.h

于 2011-01-06T06:03:53.387 に答える
0

mbstowcs関数を試してください。 http://msdn.microsoft.com/en-us/library/ms235631(v=vs.80).aspx

于 2011-01-06T03:44:05.747 に答える