vsnprintf、 _vsnprintf、 _vsnprintf_l、 _vsnwprintf、 _vsnwprintf_l
撰寫使用指標引數清單的格式化的輸出。 這些函式更安全版本都可使用; see 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,如果其中一個撰寫。
如果buffer或format是NULL,或如果 count 小於或等於零,這些函式叫用無效的參數處理常式中,如所述參數驗證。 如果執行,則允許繼續執行,這些函數會傳回-1,並設定errno到EINVAL。
備註
每個函式會使用指標引數] 清單中,然後格式化資料,並將最多count所指到記憶體的字元buffer。 如果有足夠的空間結尾 (也就是是否要寫入的字元數小於count),緩衝區會是 null 值結束。
安全性提示 |
---|
請確定format不是使用者定義的字串。如需詳細資訊,請參閱避免緩衝區滿溢,。 |
注意事項 |
---|
若要確定預留結尾的 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> * |
_vsnprintf, _vsnprintf_l |
<stdio.h> 和 <stdarg.h> |
<varargs.h> * |
_vsnwprintf, _vsnwprintf_l |
<stdio.h> 或 <wchar.h>,和 <stdarg.h> |
<varargs.h> * |
* UNIX V 相容性的必要項。
其他的相容性資訊,請參閱相容性在簡介中。
範例
// 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!!");
}
.NET Framework 對等用法
不適用。 若要呼叫標準的 c 函式,使用PInvoke。 如需詳細資訊,請參閱平台叫用範例。
請參閱
參考
fprintf、 _fprintf_l、 fwprintf、 _fwprintf_l
printf、 _printf_l、 wprintf、 _wprintf_l