Какое максимальное количество символов выводится sprintf при выводе переменных с плавающей запятой и двойных? - PullRequest
5 голосов
/ 30 августа 2011

Если я сделаю это:

void printfloat(float number)
{
    printf("%f", number);
}

и

void printdouble(double number)
{
    printf("%f", number);
}

Какое максимальное количество символов может выводиться каждой функцией?

Ответы [ 3 ]

3 голосов
/ 25 мая 2012

При тестировании с использованием MS Visual Studio 10 получается строка 811 из

sprintf(buf, "%.*f", 500, -DBL_MAX);

Конечно, более длинные строки возможны с более высокими значениями точности.

Но оставаясь с "% f"Максимальное количество символов, выводимых для «\ 0»: 317 + 1.
То есть для переносимого кода:

#include <float.h>
#include <stdio.h>

    char buf[1/*'-'*/ + (DBL_MAX_10_EXP+1)/*308+1 digits*/ + 1/*'.'*/ + 6/*Default? precision*/ + 1/*\0*/];
    sprintf(buf, "%f", -DBL_MAX);

Функция printfloat (число с плавающей запятой) - единственный параметр «число»float и ограничен диапазоном float, преобразуется в double при передаче в sprintf ().Это максимальное значение, таким образом, FLT_MAX.Таким образом, максимальное количество выводимых символов составляет 47 + 1 для '\ 0'.

    char buf[1/*'-'*/ + (FLT_MAX_10_EXP+1)/*38+1 digits*/ + 1/*'.'*/ + 6/*Default? precision*/ + 1/*\0*/];
    sprintf(buf, "%f", -FLT_MAX);
2 голосов
/ 30 августа 2011

Вывод:

Мне не удалось заставить snprintf сказать мне, насколько большой будет строка, и я хочу сохранить код как можно более независимым от компилятора. Итак, вот решение, которое я придумал.

char numstr[50];
sprintf_s(numstr, "%g", *value);
m_stringRepresentation += numstr;

% g выводит число в научной нотации, что строго ограничивает количество символов. Я выбрал достаточно большой буфер для размещения всего, что может выводиться. Моя единственная зависимость от компилятора - sprintf_s.

1 голос
/ 30 августа 2011

Программа быстрого тестирования, переданная по каналу wc -c, показывает 47 символов для числа с плавающей запятой и 317 для значения типа double. Программа:

#include <stdio.h>
#include <float.h>

int main(void) {
        printf("%f", -DBL_MAX);
}

Обратите внимание, что вы можете использовать snprintf, чтобы ограничить вывод n символами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...