5.79 C99 の <stdio.h> の snprintf 関数ファミリ

C90 標準ヘッダ <stdio.h> にある sprintf 関数ファミリの使用は 危険な場合があります。

以下のステートメント
sprintf(buffer, size, "Error %d:Cannot open file '%s'", errno, filename);
では、変数 sizebuffer に挿入する文字の最小値を指定します。その結果、文字列に割り当てられたメモリに収まる文字数よりも多くの文字数が出力される場合があります。
<stdio.h> の C99 バージョンにある snprintf 関数は、 sprintf 関数の安全なバージョンであり、バッファのオーバーランを防ぎます。以下のステートメント
snprintf(buffer, size, "Error %d:Cannot open file '%s'", errno, filename);
では、変数 sizebuffer に挿入できる文字の最大値を指定します。バッファのサイズが size で指定されたサイズよりも常に大きければ、バッファオーバーランが発生することはありません。
関連する概念
5.60 C99 の新しいライブラリ機能
5.74 C99 の &lt;math.h&gt; の追加の数学ライブラリ関数
5.75 C99 の複素数
5.76 C99 のブール型と &lt;stdbool.h&gt;
5.77 C99 の &lt;inttypes.h&gt; および &lt;stdint.h&gt; の拡張整数型と関数
5.78 C99 の &lt;fenv.h&gt; 浮動小数点環境アクセス
5.80 C99 の <tgmath.h> の型汎用数学マクロ
5.81 C99 の <wchar.h> のワイドキャラクタ I/O 関数
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.