_sprintf_p、_sprintf_p_l、_swprintf_p、_swprintf_p_l
文字列に書式付きデータを書き込みます。その際、書式指定文字列で使用するパラメーターの順序を指定できます。
int _sprintf_p(
char *buffer,
size_t sizeOfBuffer,
const char *format [,
argument] ...
);
int _sprintf_p_l(
char *buffer,
size_t sizeOfBuffer,
const char *format,
locale_t locale [,
argument] ...
);
int _swprintf_p(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format [,
argument]...
);
int _swprintf_p_l(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format,
locale_t locale [,
argument] …
);
パラメーター
buffer
出力の格納場所。sizeOfBuffer
格納する最大文字数。format
書式指定文字列。argument
省略可能な引数。locale
使用するロケール。
詳細については、「scanf 関数と wscanf 関数の書式指定フィールド」を参照してください。
戻り値
書き込まれた文字数を返します。エラーが発生した場合は -1 を返します。
解説
_sprintf_p 関数は、一連の文字と値の書式を指定して、buffer に格納します。各 argument (指定されている場合) は、format 中の対応する書式指定に応じて変換され、格納されます。format は通常の文字で構成し、その形式と機能は printf_p 関数の format と同じです。最後に書き込まれる文字の後に NULL 文字が追加されます。重なり合う文字列間でコピーした場合の動作は未定義です。_sprintf_p と sprintf_s の違いは、_sprintf_p では位置指定パラメーターをサポートし、これによって、書式指定文字列で引数を使用する順序を指定できることです。詳細については、「printf_p の位置指定パラメーター」を参照してください。
_swprintf_p は _sprintf_p のワイド文字バージョンであり、_swprintf_p のポインター引数はワイド文字列です。_swprintf_p と _sprintf_p では、エンコーディング エラーの検出動作が異なる場合があります。_swprintf_p と fwprintf_p の動作は同じですが、_swprintf_p は FILE 型の出力先ではなく文字列に出力を書き込む点と、_swprintf_p には書き込む最大文字数を指定する count パラメーターが必要である点が異なります。これらの関数のうち _l サフィックスが付けられたバージョンは、現在のスレッド ロケールの代わりに渡されたロケール パラメーターを使用する点を除いて同じです。
_sprintf_p 関数は、buffer に格納されているバイト数を返します。終端の NULL 文字は含まれません。_swprintf_p 関数は、buffer に格納されているワイド文字数を返します。終端の NULL ワイド文字は含まれません。buffer または format が null ポインターの場合、あるいは書式指定文字列に無効な書式指定文字が含まれている場合は、「パラメーターの検証」に説明されているように、無効なパラメーター ハンドラーが呼び出されます。実行の継続が許可された場合、これらの関数は -1 を返し、errno を EINVAL に設定します。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_stprintf_p |
_sprintf_p |
_sprintf_p |
_swprintf_p |
_stprintf_p_l |
_sprintf_p_l |
_sprintf_p_l |
_swprintf_p_l |
必要条件
ルーチン |
必須ヘッダー |
---|---|
_sprintf_p, _sprintf_p_l |
<stdio.h> |
_swprintf_p, _swprintf_p_l |
<stdio.h> または <wchar.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_sprintf_p.c
// This program uses _sprintf_p 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_p( buffer, 200,
" String: %s\n", s );
j += _sprintf_p( buffer + j, 200 - j,
" Character: %c\n", c );
j += _sprintf_p( buffer + j, 200 - j,
" Integer: %d\n", i );
j += _sprintf_p( buffer + j, 200 - j,
" Real: %f\n", fp );
printf( "Output:\n%s\ncharacter count = %d\n",
buffer, j );
}
// crt_swprintf_p.c
// This is the wide character example which
// also demonstrates _swprintf_p returning
// error code.
#include <stdio.h>
#define BUFFER_SIZE 100
int main( void )
{
wchar_t buffer[BUFFER_SIZE];
int len;
len = _swprintf_p(buffer, BUFFER_SIZE, L"%2$s %1$d",
0, L" marbles in your head.");
_printf_p( "Wrote %d characters\n", len );
// _swprintf_p fails because string contains WEOF (\xffff)
len = _swprintf_p(buffer, BUFFER_SIZE, L"%s",
L"Hello\xffff world" );
_printf_p( "Wrote %d characters\n", len );
}
同等の .NET Framework 関数
参照
関連項目
_fprintf_p、_fprintf_p_l、_fwprintf_p、_fwprintf_p_l
fprintf、_fprintf_l、fwprintf、_fwprintf_l
_printf_p、_printf_p_l、_wprintf_p、_wprintf_p_l
printf、_printf_l、wprintf、_wprintf_l
scanf、_scanf_l、wscanf、_wscanf_l
sscanf、_sscanf_l、swscanf、_swscanf_l