当像这样转换int时:
char a[256];
sprintf(a, "%d", 132);
确定a应该是多大的最好的方法是什么?我认为手动设置它是可以的(我已经看到它到处都在使用),但是它应该有多大呢?在32位系统上可能的最大整数值是多少,在飞翔上有没有一些微妙的方法来确定这个值?
当像这样转换int时:
char a[256];
sprintf(a, "%d", 132);
确定a应该是多大的最好的方法是什么?我认为手动设置它是可以的(我已经看到它到处都在使用),但是它应该有多大呢?在32位系统上可能的最大整数值是多少,在飞翔上有没有一些微妙的方法来确定这个值?
int中可能的最大位数是CHAR_BIT * sizeof(int)
,十进制数字至少"等于"3位,因此任意int
所需空间的松散上限是(CHAR_BIT * sizeof(int) / 3) + 3
.那+3是因为我们在除法时向下舍入的事实,一个是符号,一个是NUL终止符.
如果"在32位系统上",你的意思是你知道int
是32位,那么你需要12个字节.10代表数字,一个代表符号,一个代表nul终止符.
在特定情况下,要转换的int为132
,需要4个字节.巴顿,蒂什.
如果固定大小的缓冲区可以在合理的范围内使用,那么它们是更简单的 Select .我并不谦虚地认为上面的限制是合理的(32位int
的限制是13字节而不是12字节,64位int
的限制是23字节而不是21字节).但对于困难的情况,在C99中,你只需拨打snprintf
就可以得到尺寸,然后拨打malloc
就可以了.对于这样一个简单的案件来说,这太过分了.