vsnprintf、_vsnprintf、vsnwprintf、_vsnwprintf

提供: RAD Studio
移動先: 案内検索

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;
}

関連項目