不慣れな方法で使用されるのprintf
-
24-09-2019 - |
質問
RAD Studio 2009のにC ++ Builderプロジェクトをアップグレードするとき、私はこのコード行を見つけます:
mProcessLength->Text.printf("%d",mStreamLength);
しかし、このラインの意図するものであるとよりよい同等のものです、2009年にコンパイルされませんか? mProcessLength->Text
が今wchar_t*
であることを考える。
解決
私は、あなたがこれらのエラーを取得していることを疑うます:
E2034 Cannot convert 'const char *' to 'const wchar_t *'
E2342 Type mismatch in parameter 'format' (wanted 'const wchar_t *', got 'const char *')
それはあなたがミスマッチしているのprintfに渡すパラメータです。 それを変更します:
mProcessLength->Text.printf(L"%d",mStreamLength);
を正しい形にあなたの文字列リテラルを変更します。
他のヒント
チャンスはwcharですが、UnicodeStringのVCL列型として扱われることをいいます。これは、文字列へのポインタを除き、標準のprintfの引数を取るprintf関数を持っています。 UnicodeStringに自身がフォーマットされた文字列で満たされます。
UnicodeStringには、自動的にスタック上に作成され、printfのメソッドが呼び出されるので、、ポインタは、その後のwcharに背中を詰めされます。
あなたはおそらくwsprintfをしたい...のように見えますが、おそらくちょうどwvsprintfにそのパラメータを渡すことを、printfの名前のメンバ関数で、もともといくつかのクラスだった。
サイドノートでは、テキストと仮定すると、新しい値を持つプロパティをupateれませんその上のprintf()を呼び出す、プロパティです。以下に等しくC ++ Builderのすべてのバージョンでは、代わりに使用することができるようにAnsiString型とUnicodeStringの両方が、数値をフォーマットするためのコンストラクタを有する
mProcessLength->Text = mStreamLength;
所属していません StackOverflow