Qua thử nghiệm, sử dụng MS Visual Studio 10, một chuỗi của 811 kết quả từ
sprintf(buf, "%.*f", 500, -DBL_MAX);
Chắc chắn dây còn có thể xảy ra với các giá trị chính xác lớn hơn.
Nhưng ở lại với "% f", số lượng ký tự tối đa là 317 + 1 cho '\ 0'.
Vì vậy, đối mã di động:
#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);
Chức năng printfloat (số float) duy nhất tham số "number", là một phao và giới hạn trong phạm vi của một float, được chuyển thành một đôi trong đi qua để sprintf(). Do đó, giá trị tối đa là FLT_MAX. Vì vậy, số lượng tối đa các ký tự đầu ra là 47 + 1 cho '\ 0'.
char buf[1/*'-'*/ + (FLT_MAX_10_EXP+1)/*38+1 digits*/ + 1/*'.'*/ + 6/*Default? precision*/ + 1/*\0*/];
sprintf(buf, "%f", -FLT_MAX);
Bạn luôn có thể kiểm soát số tiền mà: http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/FUNCTIONS/format.html#width – BlackBear
tôi không muốn kiểm soát nó. Tôi muốn in tất cả mọi thứ nó thường in, và biết tối đa là gì cho điều đó. – Almo
Một phần của điều này đã được trả lời. Ít nhất là để tăng gấp đôi: http: //stackoverflow.com/questions/1701055/what-is-the-maximum-length-in-chars-needed-to-represent-any-double-value –