我有一个关于以下代码的问题:
void testing(int idNumber)
{
char name[20];
snprintf(name, sizeof(name), "number_%d", idNumber);
}
char数组
name
的大小是20,所以如果idNumber
是111
它可以工作,但是实际的idNumber是111111111111111111111111111111
如何确定char数组应该有多大才能保持snprintf
的结果? 最佳答案
只有一个好答案:
询问snprintf
本身(传递长度为0)。
它返回缓冲区足够大时它应该写入的输出大小,不包括终止的0。
man-page for snprintf
标准报价(C99+修正案):
7.21.6.5 snprintf函数
简介
#include <stdio.h>
int snprintf(char * restrict s, size_t n,
const char * restrict format, ...);
说明
2除了输出被写入
数组(由参数
snprintf
指定)而不是流。如果fprintf
为零,则不写入任何内容,s
可能是空指针否则,n
st以外的输出字符是丢弃而不是写入数组,并在末尾写入空字符
实际写入数组的字符数。如果在对象之间进行复制
这种重叠,行为是未定义的。
退货
函数返回本应写入的字符数
如果
s
足够大,不包括终止的空字符或负数值(如果发生编码错误)。因此,以空结尾的输出
当且仅当返回值为非负且小于
n-1
时完全写入。关于c - 如何确定char数组真正需要的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26509681/