あなたは設計ミスをしています。
明らかに、知りたいのは、数値を書き込むのに必要な文字数です。
そのために _*printf_ を使用していますが、これは良い考えです。「書き込まれた」文字数を計算したいだけなので、必要です。しかし、何も表示したくないので、単にprintfの代わりにfprintfを刺しました。しかし、fprintfは、書き込むファイルがないと機能しません...
スティーブが言ったように、メモリ内の文字列に書き込むsnprintf()を使用する必要があります。
スティーブが言うように、NULL 文字列を指定したsnprintfは、Windows 以外では意図したとおりに動作するはずです。次に、Windowsでは、後で破棄する一時的な文字列を提供するだけです。
size_t computeNumCharsNeededToPrintMyStuff(double d)
{
size_t ret = 0;
size_t maxBuffSize = 100; // should be plenty enough
char *tmpBuff = new char[maxBuffSize ];
ret = snprintf(tmpBuff, maxBuffSize, "PI = %f", d);
delete[] tmpBuff;
return ret;
}
次に、次のように呼び出します。
n = computeNumCharsNeededToPrintMyStuff(3.14)
(この関数は、何かを表示するのに必要なサイズを計算するように拡張できますが、今のところは単純にしたいと思います。)