c - ANSI-C : maximum number of characters printing a decimal int

标签 c string int type-conversion

我想知道这是否是一种确定打印小数的最大字符数的简单方法 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/

相关文章:

c - getcontext 和 setcontext 在函数中不起作用

C指针和物理地址

Python:使用 "..%(var)s.."% locals() 是一个好习惯吗?

c - 将 int 和 char 解析为两个单独的值

python - 如何在 Python 中将 big negative long 打包成二进制字符串

c - TCC 和winsock.h

c - 迷宫般的回溯

java - 将 byte 提升为 int 或 long

C++ 现代字符串指针

C++ 在 switch 中使用 int 时非常奇怪的行为