Via testów, przy użyciu MS Visual Studio 10, ciąg 811 wynikał z
sprintf(buf, "%.*f", 500, -DBL_MAX);
pewnością dłuższe ciągi są możliwe przy większych wartościach precyzji.
Ale pozostając przy "% f", maksymalna liczba znaków wyjściowych wynosi 317 + 1 dla "\ 0".
Więc dla przenośnego kodu:
#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);
Funkcja printfloat (numer float) samotny parametr „numer”, jako pływaka i ograniczone do zakresu pływaka jest, przeprowadza się dwukrotnie w przejściu do sprintf(). Jego maksymalną wartością jest zatem FLT_MAX. Tak więc maksymalna liczba znaków wyjściowych wynosi 47 + 1 dla "\ 0".
char buf[1/*'-'*/ + (FLT_MAX_10_EXP+1)/*38+1 digits*/ + 1/*'.'*/ + 6/*Default? precision*/ + 1/*\0*/];
sprintf(buf, "%f", -FLT_MAX);
zawsze można kontrolować tę kwotę: http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/FUNCTIONS/format.html#width – BlackBear
ja nie wiem chcesz to kontrolować. Chcę wydrukować wszystko, co zwykle wydrukuje, i wiedzieć, jaka jest maksymalna. – Almo
Część tego już została odebrana. Przynajmniej dla dwojaków: http: //stackoverflow.com/questions/1701055/what-is-the-maximum-length-in-chars-eded- to-represent-any-double-value –