いくつかのコードをマルチバイトからユニコードに移動していて、文字列のフォーマットが間違っています。 Visual Studio 2015では、sprintf()とwsprintf()の間でwidth引数の指定子 '*'が異なるように見えます。これはコンパイラのバグか副作用ですか、それとも本当に明白な何かが欠けていますか?VS2015のsprintf()とwsprintf()の相違点をフォーマットする
出力と、以下のコード、:
char cOutA [ 64 ];
wchar_t wcOutA [ 64 ];
sprintf (cOutA, "Multibyte = %.*f\n", 3, 2.12345);
wsprintf (wcOutA, L"Unicode = %.*f\n", 3, 2.12345);
printf (cOutA);
wprintf (wcOutA);
出力:
Multibyte = 2.123
Unicode = *f
私は両方とも3桁まで私に浮動小数点数を与えるために期待していました。私は間違って何をしていますか?
wsprintfはWindowsに組み込まれたヘルパー関数でした。 Win3に戻って、OSとそのアプリケーションを640KBのメモリに詰め込む必要があります。それは1つのコーナーをカットし、浮動小数点をサポートしていません。 MSDNの記事は「使用しないでください」と怒鳴ります。 swprintfの代わりにCRT関数を使用してください。 –
あなたはHansですが、MSDNのドキュメントとコンパイラは、C標準ライブラリの文字列関数のすべてについて私に教えてくれるし、古いコードをコンパイルしています。しかし、wsprintf()は浮動小数点数に対して壊れていますが、swprintf()は浮動小数点数に対しては壊れているようです。これは、特に他のTCHAR関数が名前に「t」を持つ傾向があるため、それらを混在させることが容易であるので、むしろ混乱しているようです。 _tcscpy() – Piers