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 がユーザー定義の文字列でないことを確認してください。
swprintf は sprintf のワイド文字バージョンであり、swprintf のポインタ引数はワイド文字列です。swprintf ではエンコーディング エラーの検出方法が、sprintf とは異なる場合があります。swprintf と fwprintf の動作は同じですが、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 関数