当像这样转换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就可以了.对于这样一个简单的案件来说,这太过分了.

C++相关问答推荐

GCC不警告隐式指针到整数转换'

如何在Visual Studio代码中关闭此函数名称显示功能?

如何在C中从函数返回指向数组的指针?

可以将C变量限制为特定的读/写速度吗?

为什么sscanf不能正确地从这个字符串格式中提取所有数字?

Rust FFI--如何用给出返回引用的迭代器包装C风格的迭代器?

预先分配虚拟地址空间的区域

如何识别Linux中USB集线器(根)和连接到集线器(根设备)的设备(子设备)?

SSH会话出现意外状态

如何在STM8项目中导入STM8S/A标准外设库(ST VisualDeveloper)?

用C++实现余弦函数

为什么数组的最后一个元素丢失了?

在txt文件中找到指定的字符串,并从数字中减go 相同的值

如何在C++中安全地进行浮点运算

当内存来自Malloc时,将char*转换为另一个指针类型是否违反了严格的别名规则?

如何在c中使用具有不同变量类型的内存分配?

对于STM32微控制器,全局偏移表.get和.Got.plt必须为零初始化

try 判断长整数是否为素数

Malloc和对齐

未使用sem_open正确初始化信号量