sprintf_s、swprintf_s
stdio.h:インデックス への移動
ヘッダー ファイル
stdio.h
カテゴリ
書式付き入出力関数
プロトタイプ
int sprintf_s(char * restrict s, rsize_t n, const char * restrict format, ...);
int swprintf_s(wchar_t * restrict s, rsize_t n, const wchar_t * restrict format, ...);
説明
sprintf の代わりとなる、セキュリティを強化した関数です。
sprintf_s は、sprintf と同等のものですが、s および format が NULL ポインタにならないよう実行時制約が追加されています。 それ以外に、format に含まれる %s 形式指定子それぞれに対して NULL ではない引数が存在すること、format 内で %n 指定子が使われないこと、という制約もあります。
実行時制約の違反が起き、s が NULL ポインタでなく、かつ、n がゼロより大きく RSIZE_MAX より小さい場合、この関数は s[0] に '\0' を出力します。
snprintf_s、snwprintf_s と異なり、s が指す先の配列よりも n の方が大きい場合には、実行時制約例外が発生します。
戻り値
成功すると、sprintf_s は、文字列の終わりを示す '\0' を除いた出力文字数を返します。 エンコード エラーが発生すると、sprintf_s は負の値を返します。 それ以外のエラーが発生した場合にはゼロを返します。
例
#include <stdio.h> #include <math.h> int main(void) { char buffer[80]; sprintf_s(buffer, 40, "An approximation of Pi is %f\n", M_PI); puts(buffer); return 0; }
移植性
POSIX | Win32 | ANSI C | ANSI C++ | |
---|---|---|---|---|
sprintf_s |
+ |
+ |
+ |
+ |
swprintf_s |
+ |
+ |
+ |