sprintf_s 関数は、一連の文字と値の書式を指定して、buffer に格納します。各 argument (指定されている場合) は、format 中の対応する書式指定に応じて変換され、格納されます。format は通常の文字で構成し、その形式と機能は printf 関数の format と同じです。最後に書き込まれる文字の後に NULL 文字が追加されます。重なり合う文字列間でコピーした場合の動作は未定義です。
sprintf_s と sprintf 間の主な違いとしては、sprintf_s は書式指定文字列の有効な書式指定文字をチェックしますが、sprintf は書式指定文字列またはバッファが NULL ポインタかどうかのみをチェックします。いずれかのチェックが失敗した場合、「パラメータの検証」に説明されているように、無効なパラメータ ハンドラが呼び出されます。実行の継続が許可された場合、関数は -1 を返し、errno を EINVAL に設定します。
sprintf_s と sprintf 間のもう 1 つの違いとして、sprintf_s は、出力バッファのサイズを文字数で指定する長さパラメータを受け取ります。バッファが小さすぎて出力テキストを格納できない場合、バッファは、空の文字列に設定され、無効なパラメータ ハンドラが呼び出されます。snprintf とは異なり、sprintf_s では、必ずバッファは null で終わります (バッファ サイズがゼロでない限り)。
swprintf_s は sprintf_s のワイド文字バージョンであり、swprintf_s のポインタ引数はワイド文字列です。swprintf_s と sprintf_s では、エンコーディング エラーの検出動作が異なる場合があります。これらの関数のうち _l サフィックスが付けられたバージョンは、現在のスレッド ロケールの代わりに渡されたロケール パラメータを使用する点を除いて同じです。
C++ では、これらの関数の使用はテンプレートのオーバーロードによって簡素化されます。オーバーロードでは、バッファ長を自動的に推論できる (サイズの引数を指定する必要がなくなる) だけでなく、古くてセキュリティが万全ではない関数を新しく安全な関数に自動的に置き換えることができます。詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。
sprintf_s には、バッファが小さすぎる場合に発生する状況を制御できるバージョンもあります。詳細については、「_snprintf_s、_snprintf_s_l、_snwprintf_s、_snwprintf_s_l」を参照してください。
汎用テキスト ルーチンのマップ
|
TCHAR.H のルーチン
|
_UNICODE および _MBCS が未定義の場合
|
_MBCS が定義されている場合
|
_UNICODE が定義されている場合
|
| _stprintf_s | sprintf_s | sprintf_s | swprintf_s |
| _stprintf_s_l | _sprintf_s_l | _sprintf_s_l | _swprintf_s_l |