_snprintf、_snwprintf
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;
}