sprintf、swprintf

文字列に書式付きデータを書き込みます。

int sprintf(
   char *buffer,
   const char *format [,
 argument] ... 
);
int swprintf(
   wchar_t *buffer,
   const wchar_t *format [,
 argument] ... 
);
swprintf(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format [,
 argument]...
);

パラメータ

  • buffer
    出力の格納場所。
  • count
    格納する最大文字数。
  • format
    書式指定文字列。
  • argument
    省略可能な引数。

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

戻り値

書き込まれた文字数を返します。エラーが発生した場合は -1 を返します。

sprintf は、buffer に格納されているバイト数を返します。終端の NULL 文字は含まれません。swprintf は、buffer に格納されているワイド文字数を返します。終端の NULL ワイド文字は含まれません。

解説

sprintf 関数は、一連の文字と値の書式を指定して、buffer に格納します。各 argument (指定されている場合) は、format 中の対応する書式指定に応じて変換され、格納されます。format は通常の文字で構成します。この形式と機能は、printf 関数の format と同じです。最後に書き込まれる文字の後に NULL 文字が追加されます。重なり合う文字列間でコピーした場合の動作は未定義です。

セキュリティに関するメモ   書き込まれる文字数は制限できないため、sprintf を使用しているコードでは、バッファ オーバーランが発生しやすくなります。関連する関数の使用を検討してください。_snprintf を使用すると、buffer に書き込まれる最大文字数を指定できます。_scprintf を使用すると、必要なバッファのサイズを調べることができます。また、format がユーザー定義の文字列でないことを確認してください。

swprintfsprintf のワイド文字バージョンであり、swprintf のポインタ引数はワイド文字列です。swprintf ではエンコーディング エラーの検出方法が、sprintf とは異なる場合があります。swprintffwprintf の動作は同じですが、swprintf は出力を FILE 型の出力先ではなく文字列に書き込みます。

ISO C 規格では、次の swprintf のプロトタイプが必要です。

int swprintf (wchar_t *, size_t, const wchar_t *, ...);

_snwprintf のプロトタイプは、この規格に準拠します。次のように指定することもできます。

#define   swprintf   _snwprintf

C++ の場合、swprintf のオーバーロード形式の 1 つが持つシグネチャは、ISO C 規格の swprintf のシグネチャと同じです。

ジェネリック テキスト ルーチンの割り当て

TCHAR.H のルーチン _UNICODE および _MBCS が未定義の場合 _MBCS が定義されている場合 _UNICODE が定義されている場合
_stprintf sprintf sprintf swprintf

必要条件

ルーチン 必須ヘッダー 互換性
sprintf <stdio.h> ANSI、Win 98、Win Me、Win NT、Win 2000、Win XP
swprintf <stdio.h> または <wchar.h> ANSI、Win 98、Win Me、Win NT、Win 2000、Win XP

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

ライブラリ

C ランタイム ライブラリのすべてのバージョン。

// crt_sprintf.c
/* 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 );
   j += sprintf( buffer + j, "   Character: %c\n", c );
   j += sprintf( buffer + j, "   Integer:   %d\n", i );
   j += sprintf( buffer + j, "   Real:      %f\n", fp );

   printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}

出力

Output:
   String:    computer
   Character: l
   Integer:   35
   Real:      1.732053

character count = 79

// 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, L"%s", L"Hello world" );
   printf( "wrote %d characters\n", len );
   len = swprintf( buf, 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

参照

ストリーム入出力 | fprintf | printf | scanf | sscanf | vprintf 系関数 | ランタイム ルーチンおよび同等の .NET Framework 関数