【发布时间】:2014-10-22 14:19:18
【问题描述】:
我对以下代码有疑问:
void testing(int idNumber)
{
char name[20];
snprintf(name, sizeof(name), "number_%d", idNumber);
}
char数组name的大小是20,所以如果idNumber是111就可以了,但是实际idNumber是111111111111111111111111111111怎么样,怎么判断char数组应该有多大为了保留snprintf的结果?
【问题讨论】:
-
计算任何数字类型所需的大小很容易:
2^(sizeof(type) * 8)是该类型的最大(无符号)值。单字节类型(char或short)允许 3 位数字、2 字节 5(int的最小大小)、8、10、13 等(因此间隔为 2 或3 个字符)。为终止\0字符添加符号字符和空间,sizeof(type) * 3 + 2应该可以解决问题。如果您正在处理doubles 和floats,请添加小数点空间 -
@Elias Van Ootegem 注意:处理
double和"%f"可能需要一个大小为1 + DBL_MAX_10_EXP + 1 + 1 + 6 +1的缓冲区用于符号、DBL_MAX 数字、.、分数和 @ 987654339@。在我的平台上至少有 47 个,也许是 318 个char。您建议的公式适用于整数。 -
@chux: 确实...我想看看
long double实现为四精度类型(128 位)的系统所需的长度 -
@Elias Van Ootegem
long double使用一个 B.A.Buffer。 ;-)(可能是 4942char)