snprintf出力がサイズ0からNULLになるのは安全ですか?

snprintf出力がサイズ0からNULLになるのは安全ですか?

電話をかけても安全ですかsnprintf(NULL, 0, "…", …)?私が尋ねる他の方法はありますか?snprintfサイズが0の場合、NUL文字は記録されますか?

の例Linuxのマニュアルページマニュアルページprintf(3)はこれを行う例を提供しますが、残りのテキストPOSIX プログラママニュアル、関連情報が見つかりません。

ベストアンサー1

POSIX プログラママニュアル具体的に定義:

snprintf() 関数は sprintf() と同じでなければなりませんが、s が参照するバッファのサイズを示す n パラメータが追加されます。 n が 0 の場合は何も記録されず、s はヌルポインタになります。それ以外の場合、n-1番目以降の出力バイトは配列に書き込まれるのではなく削除され、実際に配列に書き込まれたバイトの末尾にnullバイトが書き込まれます。

(強調は私のもの)

この呼び出しを行うことは完全に安全でなければなりません。

おすすめ記事