WIN環境のMinGWとsnprintf

 とりあえず、snprintf()を使うとMinGWのライブラリから静的リンクされる(ファイルが太る)。
 んで、戻り値がC99に適ってない気がする( gcc 3.4.5-3(1のcc1)、rt 3.15.2、win32api 3.13 )。

 char dst[10];
 char src[] = 10byteの文字列;
 として、

 i = snprintf(dst, 10, "123%s", src); とした時 、
 i に-1が戻らず、無制限の場合に書き込まれるはずだったbyte数(今回は13)が返る。
 一応、オーバーラン自体はしていない模様。

 で、_snprintf()。 MSVCRTへの動的リンクになる(ファイルは太らない)。
 これで上記を行うとちゃんと-1が戻る。

 どちらにしろ、バッファの終端をNULLで埋める必要からバッファサイズを知っていないといけない訳だけれど、その必要の有無を戻り値と(例では10と)比較して決める必要があるのはよろしくない('з`)

 確か、snprintf()は%pや%x等でsprintf(MSVCRT?)と違う挙動をしてた気もする。
 そんな感じで、素直にMSVCRTの_snprintf()を使う方が良さげ、という話し('з`)

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック