我想知道这是否是一种确定打印小数的最大字符数的简单方法 int
.
我知道<limits.h>
包含类似 INT_MAX
的定义表示 int 可以假设的最大值,但这不是我想要的。
我希望能够做类似的事情:
int get_int( void )
{
char draft[ MAX_CHAR_OF_A_DECIMAL_INT ];
fgets( draft, sizeof( draft ), stdin );
return strtol( draft, NULL, 10 );
}
但是如何找到MAX_CHAR_OF_A_DECIMAL_INT
的值呢?以便携和低开销的方式?
谢谢!
最佳答案
如果您假设 CHAR_BIT
为 8(POSIX 要求,因此对于任何针对 POSIX 系统以及任何其他主流系统(如 Windows)的代码,这是一个安全的假设),一个便宜的安全公式是 3*sizeof(int)+2
。如果没有,你可以让它成为 3*sizeof(int)*CHAR_BIT/8+2
,或者有一个稍微简单的版本。
如果您对它起作用的原因感兴趣,sizeof(int)
本质上是 INT_MAX
的对数(大致以 2^CHAR_BIT 为底)和转换不同底数的对数之间(例如以 10 为底数)只是乘法。特别地,3 是 256 的以 10 为底的对数的整数近似值/上限。
+2 是为了说明可能的符号和空终止。
关于c - ANSI-C : maximum number of characters printing a decimal int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10536207/