vsnprintf、_vsnprintf、vsnwprintf、_vsnwprintf
stdio.h:インデックス への移動
ヘッダー ファイル
stdio.h
カテゴリ
メモリおよび文字列操作ルーチン
プロトタイプ
int _vsnprintf(char* buffer, size_t nsize, const char* format, va_list param);
int _vsnwprintf(wchar_t* buffer, size_t nsize, const wchar_t* format, va_list param);
説明
最大長 nsize のバッファに書式付き出力を格納します。
出力するバイト数によって、以下のように処理が異なります。
- nsize より小さい場合、文字列の終端を表す '\0' 文字を含め、すべての文字が書き込まれます。
- nsize に等しい場合、nsize 個の文字が書き込まれ、文字列の終端を表す '\0' 文字は書き込まれません。
- nsize より大きい場合、nsize 個の文字だけが書き込まれ、文字列の終端を表す '\0' 文字は書き込まれません。
nsize が 0 の場合、文字列には書き込まれません(文字列は通常 NULL になります)。
戻り値
出力されたバイト数。nsize が 0 の場合は必要なバイト数(文字列の終端を表す '\0' 文字は含まれません)。
移植性
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |
+ |
+ |
例
# include <stdio.h>
# include <wtypes.h>
void Vprint_test(char *format, ...)
{
int n_byte = 0;
char buff[30];
buff[0]=0;
va_list param; //the list of parameters
va_start(param, format);
n_byte = vsnprintf( buff, sizeof(buff) - 1, format, param);
//Compare the buffer's length with the byte written to see whether the buffer was big enough
if (n_byte<sizeof(buff)) {
printf("all characters were written:(%d bytes)\n buff: %s\n", n_byte, buff);
} else
{
if (n_byte==sizeof(buff)) {
printf("%d characters were written(with no terminating character):(%d bytes)\n buff: %s\n", sizeof(buff),n_byte, buff);
} else
printf("only %d characters were written(with no terminating character):(%d bytes)\n buff: %s\n", sizeof(buff),n_byte, buff);
}
}
int main() {
Vprint_test("%s %d %f", "Hello", 123, 23.45);
return 0;
}