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 で指定されたサイズよりも常に大きければ、バッファオーバーランが発生することはありません。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0472EJ
Non-ConfidentialID081711