Вы делаете ошибку проектирования.
Очевидно, что вам нужно знать количество символов, необходимое для написания вашего номера.
Вы используете _ * printf_ для этого, что является хорошей идеей. Вы просто хотите вычислить количество символов "написано", следовательно, необходимо. Но вы не хотите, чтобы что-либо отображалось, поэтому вы укололись fprintf вместо printf . Но fprintf не работает без ФАЙЛА для записи в ...
Как сказал Стив, вам лучше использовать snprintf () , который записывает в строку в памяти.
Как говорит Стив, snprintf , снабженный строкой NULL, должен работать должным образом, за исключением окон. Затем на окнах, просто предоставьте ему временную строку, которую вы потом отбросите.
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)
(Эта функция может быть улучшена для вычисления размера, необходимого для отображения чего-либо, но я бы пока оставил это простым).