クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
Visual Studio 2005
Visual Studio ドキュメント
Visual C++
リファレンス
ライブラリ リファレンス
ランタイム ライブラリ
 vsnprintf、_vsnprintf、_vsnprintf_l、_...
すべて縮小/すべて展開 すべて縮小
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2005/.NET Framework 2.0

その他のバージョンについては、以下の情報を参照してください。
ランタイム ライブラリ リファレンス
vsnprintf、_vsnprintf、_vsnprintf_l、_vsnwprintf、_vsnwprintf_l

引数リストへのポインタを使用して、書式付き出力を書き込みます。セキュリティが強化されたバージョンが使用可能になったので、これらの関数は使用されなくなりました。「vsnprintf_s、_vsnprintf_s、_vsnprintf_s_l、_vsnwprintf_s、_vsnwprintf_s_l」を参照してください。

int vsnprintf(
   char *buffer,
   size_t count,
   const char *format,
   va_list argptr 
);
int _vsnprintf(
   char *buffer,
   size_t count,
   const char *format,
   va_list argptr 
);
int _vsnprintf_l(
   char *buffer,
   size_t count,
   const char *format,
   locale_t locale,
   va_list argptr 
);
int _vsnwprintf(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   va_list argptr 
);
int _vsnwprintf_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   locale_t locale,
   va_list argptr 
);
template <size_t size>
int vsnprintf(
   char (&buffer)[size],
   size_t count,
   const char *format,
   va_list argptr 
); // C++ only
template <size_t size>
int _vsnprintf(
   char (&buffer)[size],
   size_t count,
   const char *format,
   va_list argptr 
); // C++ only
template <size_t size>
int _vsnprintf_l(
   char (&buffer)[size],
   size_t count,
   const char *format,
   locale_t locale,
   va_list argptr 
); // C++ only
template <size_t size>
int _vsnwprintf(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format,
   va_list argptr 
); // C++ only
template <size_t size>
int _vsnwprintf_l(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format,
   locale_t locale,
   va_list argptr 
); // C++ only

パラメータ

buffer

出力の格納位置。

count

書き込む最大文字数。

format

書式の指定。

argptr

引数リストへのポインタ。

locale

使用するロケール。

vsnprintf_vsnprintf_vsnwprintf の各関数は、書き込む文字数が count 値以下の場合、書き込まれた文字数を返します。書き込む文字数が count 値を超える場合、これらの関数は -1 を返し、出力が切り捨てられたことを示します。終端の null が書き込まれている場合、その null は戻り値には含まれません。

buffer または formatNULL の場合、または count が 0 以下の場合、これらの関数は、「パラメータの検証」に説明されているように、無効なパラメータ ハンドラを呼び出します。実行の継続が許可された場合、これらの関数は -1 を返し、errnoEINVAL に設定します。

これらの関数は、引数リストへのポインタを使用し、データを書式指定して count 文字数までの文字を buffer が指すメモリに書き込みます。終端に空きがある場合 (つまり、書き込む文字数が count 文字数未満の場合)、バッファは null で終わります。

Security noteセキュリティに関するメモ :

format にユーザー定義の文字列を指定しないでください。詳細については、「Avoiding Buffer Overruns」を参照してください。

Noteメモ :

終端の null 用の空きを確保するために、count を必ずバッファ長未満にし、この関数を呼び出す前にバッファを null に初期化します。

vsnprintf 関数は _vsnprintf 関数と同じです。vsnprintf 関数は ANSI 規格に準拠する目的で含まれており、vnsprintf 関数は下位互換性を保つ目的で保持されています。

_l サフィックスが付いているこれらの関数の各バージョンは、現在のスレッド ロケールの代わりに渡されたロケール パラメータを使用する点を除いて同じです。

C++ では、これらの関数にテンプレートのオーバーロードがあります。このオーバーロードは、これらの関数に対応するセキュリティで保護された新しい関数を呼び出します。詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。

汎用テキスト ルーチンのマップ
TCHAR.H のルーチン _UNICODE および _MBCS が未定義の場合 _MBCS が定義されている場合 _UNICODE が定義されている場合

_vsntprintf

_vsnprintf

_vsnprintf

_vsnwprintf

_vsntprintf_l

_vsnprintf_l

_vsnprintf_l

_vsnwprintf_l

ルーチン 必須ヘッダー 省略可能なヘッダー 互換性

vsnprintf

<stdio.h> および <stdarg.h>

<varargs.h>*

ANSI、Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition、Windows NT 4.0、Windows 2000、Windows XP Home Edition、Windows XP Professional、Windows Server 2003

_vsnprintf, vsnprintf_l

<stdio.h> および <stdarg.h>

<varargs.h>*

Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition、Windows NT 4.0、Windows 2000、Windows XP Home Edition、Windows XP Professional、Windows Server 2003

_vsnwprintf, _vsnwprintf_l

<stdio.h> または <wchar.h>、および <stdarg.h>

<varargs.h>*

Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition、Windows NT 4.0、Windows 2000、Windows XP Home Edition、Windows XP Professional、Windows Server 2003

* UNIX V との互換性用

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

// crt_vsnprintf.cpp
// compile with: /W3
#include <stdio.h>
#include <wtypes.h>

void FormatOutput(LPCSTR formatstring, ...) 
{
   int nSize = 0;
   char buff[10];
   memset(buff, 0, sizeof(buff));
   va_list args;
   va_start(args, formatstring);
   nSize = vsnprintf( buff, sizeof(buff) - 1, formatstring, args); // C4996
// Note: vsnprintf is deprecated; consider vsnprintf_s instead
   printf("nSize: %d, buff: %s\n", nSize, buff);
}

int main() {
   FormatOutput("%s %s", "Hi", "there");
   FormatOutput("%s %s", "Hi", "there!");
   FormatOutput("%s %s", "Hi", "there!!");
}

出力

nSize: 8, buff: Hi there
nSize: 9, buff: Hi there!
nSize: -1, buff: Hi there!

適用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2012 Microsoft. All rights reserved. 使用条件 | 商標 | プライバシー
Page view tracker