snprintf と snwprintf

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

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


ヘッダー ファイル

stdio.h

カテゴリ

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

プロトタイプ

int snprintf(char* buffer, size_t nsize, const char* fmt, ...);

int snwprintf(wchar_t* buffer, size_t nsize, const wchar_t* fmt, ...);

説明

最大長 nsize のバッファに書式付き出力を格納します。

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

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

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

戻り値

出力されたバイト数。nsize が 0 の場合は必要なバイト数(文字列の終端を表す '\0' 文字は含まれません)。

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

関連項目