11

doubleを使用して値を出力できませんwsprintf()。私は試しsprintf()てみましたが、うまくいきました。

wsprintf()andに使用される構文sprintf()は次のとおりです。

wsprintf(str,TEXT("Square is %lf "),iSquare); // Does not show value

sprintf(str," square is %lf",iSquare);  // works okay

使用中に間違いを犯していwsprintf()ませんか?

4

4 に答える 4

33

wsprintf浮動小数点をサポートしていません。間違いはそれをまったく使用することです。

のようなものが必要な場合でもsprintf、ワイド文字/文字列の場合は、swprintf代わりに必要です。

実際には、TEXTマクロを使用しているので、代わりに必要になるでしょう:文字列が狭いか広いかを決定するために使用する_stprintfのと同じプリプロセッサ マクロと同期して、狭い実装から広い実装に移行します。TEXTただし、このアプローチ全体は、Microsoft がまだ 32 ビット NT カーネルと 16 ビット カーネルの両方に基づいたバージョンの Windows を販売およびサポートしていた時代の遺物です。16 ビット バージョンでは、最小限のワイド文字しかサポートされていなかったため、Microsoft は、単一のソース コード ベースをコンパイルして、ナロー文字 (16 ビット カーネルを対象とする) またはワイド文字 (32 ビット カーネルを対象とする) を使用できるようにすることに懸命に取り組みました。カーネル)。16 ビット カーネルは長い間使用されていないため、サポートする理由はほとんどありません。

価値があるのwsprintfは、ほぼ完全に歴史的な遺物です。どうやらのw略ですWindows。Windows の一部として含まれていたのは、16 ビット時代にさかのぼります。当時、Windows は内部的に浮動小数点を使用していなかったため、浮動小数点をサポートせずに作成されました。かなり些細なことです。

于 2013-08-12T20:44:27.723 に答える
2

wsprintf浮動小数点をサポートしていません。ドキュメントを参照してください-lfは有効な形式コードとしてリストされていません。

Visual Studio 標準ライブラリのswprintf関数部分が必要です。対応するすべての形式コードをサポートしてsprintfいます。

于 2013-08-12T20:44:09.647 に答える
2

この関数wsprintf()は浮動小数点パラメーターをサポートしていませんswprintf()。浮動小数点値を使用している場合は、代わりに使用してみてください。

swprint の詳細については、こちらを参照してください。

于 2013-08-12T20:44:34.657 に答える