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. Swprintfswprintf_lのセキュリティで保護されたバージョンは、 countパラメーターを受け取りません。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. Bufferまたはformatが 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. 形式は通常の文字で構成され、 printfformat引数と同じ形式と機能を持ちます。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. Bufferに書き込む最大文字数を指定する、関連する関数_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では、 countパラメーターで最大数を指定する必要があります。書き込まれる文字の。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は ISO C 規格に準拠しています。これには、 size_t型の2番目のパラメーター countが必要です。swprintf conforms to the ISO C Standard, which requires the second parameter, count, of type size_t. 古い非標準の動作を強制するには、 _CRT_NON_CONFORMING_SWPRINTFSを定義します。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 (_d)_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>
swprintfswprintf_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