_snprintf、_snwprintf

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

stdio.h:インデックス への移動


ヘッダー ファイル

stdio.h

カテゴリ

メモリおよび文字列操作ルーチン

構文

int _snprintf(char* buffer, size_t nsize, const char* format, ...);

int _snwprintf(wchar_t* buffer, size_t nsize, const wchar_t* format, ...);

説明

最大長 nsize の文字列に書式付き出力を格納します。 _snprintf および _snwprintf はそれぞれ、Microsoft の _snprintf 関数および _snprintfw 関数と互換性があります。

出力するバイト数によって、以下のように処理が異なります。

  • nsize より小さい場合、文字列の終端を表す '\0' 文字を含め、すべての文字が書き込まれます。
  • nsize に等しい場合、nsize 個の文字が書き込まれ、文字列の終端を表す '\0' 文字は書き込まれません。

nsize が 0 の場合、文字列には書き込まれません(文字列は通常 NULL になります)。

nsize の方が小さい場合、戻り値は -1 になり、nsize 個の文字だけが書き込まれ、文字列の終端を表す '\0' 文字は書き込まれません。

戻り値

出力されたバイト数。nsize の方が小さい場合は -1。


# include <stdio.h>
# include <stdlib.h>

int main()
{
	// さまざまな書式の出力を格納するバッファを作成
	char buff[100];
	char str[]="hello world!";
	char c='!';
	int i=123;
	double d=23.3432;
	int bf_len=sizeof(buff)/sizeof(buff[0])-1;
	int buff_left, buff_used;
	buff_used=0;
	buff_left=bf_len-buff_used;
	int buff_written;
 buff_written = _snprintf(&buff[buff_used], buff_left, "%s\n", str );
  //update the buffer
   if (buff_written >= 0)
   {
	buff_used += buff_written;
	buff_left -= buff_written;
	}
  if (buff_left>0) {
   buff_written = _snprintf(&buff[buff_used], buff_left, "%c\n", c );
  //update the buffer
   if (buff_written >= 0)
   {
	buff_used += buff_written;
	buff_left -= buff_written;
	}
  }
   if (buff_left>0) {
   buff_written = _snprintf(&buff[buff_used], buff_left, "%d\n", i );
  //update the buffer
   if (buff_written >= 0)
   {
	buff_used += buff_written;
	buff_left -= buff_written;
	}
  }
	if (buff_left>0) {
   buff_written = _snprintf(&buff[buff_used], buff_left, "%f\n", d );
  //update the buffer
   if (buff_written >= 0)
   {
	buff_used += buff_written;
	buff_left -= buff_written;
	}
  }
  printf("The buffer:\n%s\n", buff );
  printf("The buffer has %d bytes", buff_used);
	return 0;
}

関連項目