>>8
ありがとうございます。WG14/N843というのを拾ってきたので読んでみました。

snprintf() についてはサイズ0を指定してもよくて、その場合書き込み先バッファはNULLでもいいみたいです。
strncpy()とmemcpy()ではサイズ0の場合については何も書かれてないので、サイズ0もOKみたいですね。
サイズ0のときにバッファをNULLにしてもいいのかどうかまではちょっとわかりませんでしたが…。

あと、サイズはだいたいsize_tで指定するので負になるという心配はあまりなさそうです。