I\'d like to know if it is an easy way of determining the maximum number of characters to print a decimal int
.
I know
contains
After accept answer (2+ yr)
The following fraction 10/33 exactly meets the needs for unpadded int8_t
, int16_t
, int32_t
and int128_t
. Only 1 char
extra for int64_t
. Exact or 1 over for all integer sizes up to int362_t
. Beyond that may be more that 1 over.
#include
#define MAX_CHAR_LEN_DECIMAL_INTEGER(type) (10*sizeof(type)*CHAR_BIT/33 + 2)
#define MAX_CHAR_SIZE_DECIMAL_INTEGER(type) (10*sizeof(type)*CHAR_BIT/33 + 3)
int get_int( void ) {
// + 1 for the \n of fgets()
char draft[MAX_CHAR_SIZE_DECIMAL_INTEGER(long) + 1]; //**
fgets(draft, sizeof draft, stdin);
return strtol(draft, NULL, 10);
}
** fgets()
typically works best with an additional char
for the terminating '\n'
.
Similar to @R.. but with a better fraction.
Recommend using generous, 2x, buffers when reading user input. Sometimes a user adds spaces, leading zeros, etc.
char draft[2*(MAX_CHAR_SIZE_DECIMAL_INTEGER(long) + 1)];
fgets(draft, sizeof draft, stdin);