snprintf 输出为 NULL 且大小为 0 安全吗?

snprintf 输出为 NULL 且大小为 0 安全吗?

打电话安全吗snprintf(NULL, 0, "…", …)?我还可以用其他方式问:snprintf如果大小为0,是否写入NUL字符?

中的例子Linux 手册页手册页 printf(3) 提供了一个执行此操作的示例,但在文本的其余部分或在POSIX 程序员手册,我找不到任何相关信息。

答案1

POSIX 程序员手册明确指出:

snprintf() 函数应与 sprintf() 等效,但添加了 n 参数,该参数表示 s 引用的缓冲区的大小。 如果 n 为零,则不写入任何内容,并且 s 可以是空指针。否则,超出第 n-1 个的输出字节将被丢弃,而不是写入数组,并在实际写入数组的字节末尾写入一个空字节。

(强调我的)

执行此调用应该是完全安全的。

相关内容