是snprintf(NULL,0,...); 行为标准化?

Let*_*_Be 10 c standards stdio

在Linux上,它返回将要打印的字符数.

这是标准化的行为吗?

P.P*_*.P. 10

是.

7.21.6.5 snprintf函数,N1570(C11草案):

snprintf函数等效于fprintf,除了输出被写入数组(由参数s指定)而不是流.如果n为零,则不写入任何内容,并且s可以是空指针.否则,丢弃n-1之外的输出字符而不是写入数组,并在实际写入数组的字符末尾写入空字符.如果在重叠的对象之间进行复制,则行为未定义.

这是一种有用的方法,可以找到未知数据的长度,您可以先找到所需长度,然后分配确切的内存量.典型的用例是:

char *p;

int len = snprintf(0, 0, "%s %s some_long_string_here_", str1, str2);

p = malloc(len + 1);

snprintf(p, len + 1, "%s %s some_long_string_here", str1, str2);
Run Code Online (Sandbox Code Playgroud)