sprintf、_sprintf_l、swprintf、_swprintf_l、__swprintf_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

文字列に書式付きデータを書き込みます。Write formatted data to a string. これらの関数のセキュリティを強化したバージョンについては、「sprintf_s、_sprintf_s_l、swprintf_s、_swprintf_s_l」をご覧ください。More secure versions of some of these functions are available; see sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l. セキュリティで保護されたバージョンのswprintf_swprintf_l受け取らない、カウントパラメーター。The secure versions of swprintf and _swprintf_l do not take a count parameter.

構文Syntax

int sprintf(
   char *buffer,
   const char *format [,
   argument] ...
);
int _sprintf_l(
   char *buffer,
   const char *format,
   locale_t locale [,
   argument] ...
);
int swprintf(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format [,
   argument]...
);
int _swprintf_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   locale_t locale [,
   argument] ...
);
int __swprintf_l(
   wchar_t *buffer,
   const wchar_t *format,
   locale_t locale [,
   argument] ...
);
template <size_t size>
int sprintf(
   char (&buffer)[size],
   const char *format [,
   argument] ...
); // C++ only
template <size_t size>
int _sprintf_l(
   char (&buffer)[size],
   const char *format,
   locale_t locale [,
   argument] ...
); // C++ only

パラメーターParameters

バッファーbuffer
出力の格納場所。Storage location for output

countcount
この関数の Unicode バージョンで格納する最大文字数。Maximum number of characters to store in the Unicode version of this function.

formatformat
書式指定文字列。Format-control string

argumentargument
省略可能な引数。Optional arguments

localelocale
使用するロケール。The locale to use.

詳細については、「 printf 関数と wprintf 関数の書式指定フィールド」を参照してください。For more information, see Format Specifications.

戻り値Return Value

エラーが発生した場合は-1 または書き込まれた文字数。The number of characters written, or -1 if an error occurred. 場合バッファーまたは形式null ポインターの場合で説明されているとおり、無効なパラメーター ハンドラーが呼び出されますパラメーターの検証です。If buffer or format is a null pointer, the invalid parameter handler is invoked, as described in Parameter Validation. 実行の継続が許可された場合、これらの関数は-1 を返し設定とerrnoEINVALします。If execution is allowed to continue, these functions return -1 and set errno to EINVAL.

sprintfに格納されるバイト数を返しますバッファー、終端の null 文字を含みません。sprintf returns the number of bytes stored in buffer, not counting the terminating null character. swprintfで格納されるワイド文字の数を返しますバッファー、終端の null ワイド文字を含みません。swprintf returns the number of wide characters stored in buffer, not counting the terminating null wide character.

RemarksRemarks

Sprintf関数は、書式化して、一連の文字と値を格納バッファーします。The sprintf function formats and stores a series of characters and values in buffer. 引数(ある場合) は変換されに対応する書式指定に応じて形式します。Each argument (if any) is converted and output according to the corresponding format specification in format. 形式は、通常の文字と同じ形式し、機能、形式引数printfします。The format consists of ordinary characters and has the same form and function as the format argument for printf. 最後に書き込まれる文字の後に NULL 文字が追加されます。A null character is appended after the last character written. 重なり合う文字列間でコピーした場合の動作は未定義です。If copying occurs between strings that overlap, the behavior is undefined.

重要

使用してsprintf、書き込まれた文字を使用してコードの数を制限する方法はありませんsprintfバッファー オーバーランを受けやすくなります。Using sprintf, there is no way to limit the number of characters written, which means that code using sprintf is susceptible to buffer overruns. 関連の関数の使用を検討_snprintfに書き込まれる文字の最大数を指定するバッファー、使用または_scprintfを決定する大きさをバッファーが必要です。Consider using the related function _snprintf, which specifies a maximum number of characters to be written to buffer, or use _scprintf to determine how large a buffer is required. また、いることを確認形式ユーザー定義文字列ではありません。Also, ensure that format is not a user-defined string.

swprintfのワイド文字バージョンは、 sprintf; へのポインター引数swprintfはワイド文字列です。swprintf is a wide-character version of sprintf; the pointer arguments to swprintf are wide-character strings. エンコーディング エラーの検出swprintf内で異なる場合がありますsprintfします。Detection of encoding errors in swprintf may differ from that in sprintf. swprintffwprintf動作は同じことを除いてswprintf型の出力先ではなく文字列に出力を書き込むファイル、およびswprintfが必要です、カウント書き込まれる文字の最大数を指定するパラメーター。swprintf and fwprintf behave identically except that swprintf writes output to a string rather than to a destination of type FILE, and swprintf requires the count parameter to specify the maximum number of characters to be written. これらの関数のバージョン、 _l現在のスレッド ロケールの代わりに渡されたロケール パラメーターを使用する点を除いて、サフィックスは同じです。The versions of these functions with the _l suffix are identical except that they use the locale parameter passed in instead of the current thread locale.

swprintf 、2 番目のパラメーターを必要とする ISO C 標準に準拠しているカウント、型のsize_tします。swprintf conforms to the ISO C Standard, which requires the second parameter, count, of type size_t. 古い非標準動作を強制的には、次のように定義します。実行させるにはします。To force the old nonstandard behavior, define _CRT_NON_CONFORMING_SWPRINTFS. この古い動作は、将来的には削除される可能性があるので、規格に準拠した新しい動作を使用するようにコードを変更する必要があります。In a future version, the old behavior may be removed, so code should be changed to use the new conformant behavior.

C++ では、これらの関数にテンプレートのオーバーロードがあります。このオーバーロードは、これらの関数に対応するセキュリティで保護された新しい関数を呼び出します。In C++, these functions have template overloads that invoke the newer, secure counterparts of these functions. 詳細については、「 Secure Template Overloads」を参照してください。For more information, see Secure Template Overloads.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

TCHAR.H のルーチンTCHAR.H routine _UNICODE および _MBCS が未定義の場合_UNICODE & _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_stprintf_stprintf sprintfsprintf sprintfsprintf _swprintf_swprintf
_stprintf_l_stprintf_l _sprintf_l_sprintf_l _sprintf_l_sprintf_l __swprintf_l__swprintf_l

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
sprintf_sprintf_lsprintf, _sprintf_l <stdio.h><stdio.h>
swprintf_swprintf_lswprintf, _swprintf_l <stdio.h> または <wchar.h><stdio.h> or <wchar.h>

互換性の詳細については、「 互換性」を参照してください。For additional compatibility information, see Compatibility.

Example

// crt_sprintf.c
// compile with: /W3
// This program uses sprintf to format various
// data and place them in the string named buffer.

#include <stdio.h>

int main( void )
{
   char  buffer[200], s[] = "computer", c = 'l';
   int   i = 35, j;
   float fp = 1.7320534f;

   // Format and print various data:
   j  = sprintf( buffer,     "   String:    %s\n", s ); // C4996
   j += sprintf( buffer + j, "   Character: %c\n", c ); // C4996
   j += sprintf( buffer + j, "   Integer:   %d\n", i ); // C4996
   j += sprintf( buffer + j, "   Real:      %f\n", fp );// C4996
   // Note: sprintf is deprecated; consider using sprintf_s instead

   printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
Output:
   String:    computer
   Character: l
   Integer:   35
   Real:      1.732053

character count = 79

Example

// crt_swprintf.c
// wide character example
// also demonstrates swprintf returning error code
#include <stdio.h>

int main( void )
{
   wchar_t buf[100];
   int len = swprintf( buf, 100, L"%s", L"Hello world" );
   printf( "wrote %d characters\n", len );
   len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );
   // swprintf fails because string contains WEOF (\xffff)
   printf( "wrote %d characters\n", len );
}
wrote 11 characters
wrote -1 characters

関連項目See also

ストリーム入出力Stream I/O
fprintf、_fprintf_l、fwprintf、_fwprintf_lfprintf, _fprintf_l, fwprintf, _fwprintf_l
printf、_printf_l、wprintf、_wprintf_lprintf, _printf_l, wprintf, _wprintf_l
scanf、_scanf_l、wscanf、_wscanf_lscanf, _scanf_l, wscanf, _wscanf_l
sscanf、_sscanf_l、swscanf、_swscanf_lsscanf, _sscanf_l, swscanf, _swscanf_l
vprintf 系関数vprintf Functions