vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l
Zapis sformatowane dane wyjściowe przy użyciu wskaźnika do listy argumentów.Bezpieczniejsze wersje te funkcje są dostępne; see vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l.
int vsprintf(
char *buffer,
const char *format,
va_list argptr
);
int _vsprintf_l(
char *buffer,
const char *format,
locale_t locale,
va_list argptr
);
int vswprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format,
va_list argptr
);
int _vswprintf_l(
wchar_t *buffer,
size_t count,
const wchar_t *format,
locale_t locale,
va_list argptr
);
int __vswprintf_l(
wchar_t *buffer,
const wchar_t *format,
locale_t locale,
va_list argptr
);
template <size_t size>
int vsprintf(
char (&buffer)[size],
const char *format,
va_list argptr
); // C++ only
template <size_t size>
int _vsprintf_l(
char (&buffer)[size],
const char *format,
locale_t locale,
va_list argptr
); // C++ only
template <size_t size>
int vswprintf(
wchar_t (&buffer)[size],
size_t count,
const wchar_t *format,
va_list argptr
); // C++ only
template <size_t size>
int _vswprintf_l(
wchar_t (&buffer)[size],
size_t count,
const wchar_t *format,
locale_t locale,
va_list argptr
); // C++ only
Parametry
buffer
Miejsca przechowywania danych wyjściowych.count
Maksymalna liczba znaków do przechowywania w UNICODE wersja tej funkcji.format
Specyfikacja formatu.argptr
Wskaźnik do listy argumentów.locale
Ustawienia regionalne, aby użyć.
Wartość zwracana
vsprintfi vswprintf zwraca liczbę znaków, napisane, nie włączając kończącego znaku null lub wartości ujemne, jeśli wystąpi błąd danych wyjściowych.Jeśli buffer lub format jest wskaźnik zerowy, te funkcje wywołania obsługi nieprawidłowy parametr, jak opisano w Sprawdzanie poprawności parametru.Jeśli wykonanie może kontynuować, funkcje te zwracają wartość -1 i errno do EINVAL.
Informacji na temat tych i innych kodów błędów, zobacz _doserrno, errno, _sys_errlist i _sys_nerr.
Uwagi
Każda z tych funkcji ma wskaźnik do listy argumentów i następnie formatuje i zapisuje danego danych do pamięci wskazywanej przez buffer.
Wersje te funkcje, z _l sufiks są identyczne, z wyjątkiem, że używają oni przekazany zamiast bieżące ustawienia regionalne wątku parametr ustawień regionalnych.
![]() |
---|
Za pomocą vsprintf, w tym miejscu nie sposób, aby ograniczyć liczbę znaków napisano, co oznacza, że kodu za pomocą tej funkcji jest podatny na przekroczenie buforu.Wykorzystanie _vsnprintf zamiast tego zgłoszenia lub _vscprintf do ustalenia, jak duży jest potrzebne buforu.Również zapewnić, że format nie jest ciągiem zdefiniowane przez użytkownika.Aby uzyskać więcej informacji, zobacz Overruns buforu unikanie. |
vswprintfjest zgodny z c normy ISO, który wymaga drugiego parametru, count, typu size_t.Aby wymusić stare zachowanie niestandardowych, należy zdefiniować _CRT_NON_CONFORMING_SWPRINTFS. starego zachowania mogą nie być w przyszłej wersji, więc kod powinny zostać zmienione, aby użyć nowego zachowania zgodność.
W języku C++ funkcje te mają overloads szablonu, które wywołują nowsze, bezpieczne odpowiednikami tych funkcji.Aby uzyskać więcej informacji, zobacz Secure, szablon Overloads.
Tekst rodzajowy rutynowych mapowania
TCHAR.Rutynowe H |
_UNICODE & Nie zdefiniowano _MBCS |
_MBCS, definicja |
_UNICODE, definicja |
---|---|---|---|
_vstprintf |
vsprintf |
vsprintf |
vswprintf |
_vstprintf_l |
_vsprintf_l |
_vsprintf_l |
_vswprintf_l |
Wymagania
Rozpoczęto wykonywanie procedury |
Wymaganego nagłówka |
Opcjonalna nagłówki |
---|---|---|
vsprintf, _vsprintf_l |
<stdio.h> i <stdarg.h> |
<varargs.h> * |
vswprintf, _vswprintf_l |
<stdio.h> lub <wchar.h> i <stdarg.h> |
<varargs.h> * |
* Wymagane dla zgodności v systemu UNIX.
Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności we wprowadzeniu.
Przykład
// crt_vsprintf.c
// compile with: /W3
// This program uses vsprintf to write to a buffer.
// The size of the buffer is determined by _vscprintf.
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
void test( char * format, ... )
{
va_list args;
int len;
char *buffer;
// retrieve the variable arguments
va_start( args, format );
len = _vscprintf( format, args ) // _vscprintf doesn't count
+ 1; // terminating '\0'
buffer = (char*)malloc( len * sizeof(char) );
vsprintf( buffer, format, args ); // C4996
// Note: vsprintf is deprecated; consider using vsprintf_s instead
puts( buffer );
free( buffer );
}
int main( void )
{
test( "%d %c %d", 123, '<', 456 );
test( "%s", "This is a string" );
}
Odpowiednik w programie .NET Framework
Zobacz też
Informacje
Składnia specyfikacji formatu: funkcje printf i wprintf
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l