vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l
Napisz sformatowane dane wyjściowe za pomocą wskaźnika do listy argumentów.Bardziej bezpieczne wersje tych funkcji są dostępne w 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],
const wchar_t *format,
va_list argptr
); // C++ only
template <size_t size>
int _vswprintf_l(
wchar_t (&buffer)[size],
const wchar_t *format,
locale_t locale,
va_list argptr
); // C++ only
Parametry
buffer
Lokalizacja przechowywania dla danych wyjściowych.count
Maksymalna liczba znaków do przechowywania w UNICODE wersja tej funkcji.format
Format specyfikacji.argptr
Wskaźnik na listę argumentów.locale
Ustawienia regionalne do użycia.
Wartość zwracana
vsprintf i vswprintf zwraca liczbę znaków napisanych, nie wliczając kończącego znaku null lub wartości ujemnej, jeśli wystąpi błąd danych wyjściowych.Jeśli buffer lub format jest pusty wskaźnik tych funkcji Wywołaj obsługę nieprawidłowy parametr, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie może być kontynuowane, te funkcje zwracają wartość -1 i ustawiają errno na EINVAL.
Aby uzyskać informacje na temat tych i innych kodów błędu, zobacz _doserrno, errno, _sys_errlist, and _sys_nerr.
Uwagi
Każda z tych funkcji ma wskaźnik do listy argumentów, a następnie formatuje i zapisuje dane podawane do pamięci wskazywanej przez buffer.
Wersje tych funkcji z przyrostkiem _l są identyczne z wyjątkiem stosowania regionalnych parametrów zamiast bieżącego ciągu.
Uwaga dotycząca zabezpieczeń |
---|
Za pomocą vsprintf, w tym miejscu można ograniczyć liczbę znaków napisano, co oznacza, że kod przy użyciu tej funkcji jest podatny na przekroczenia buforu.Użycie _vsnprintf zamiast, lub zadzwoń _vscprintf do określenia, jak duży jest potrzebny jest nieprawidłowe działanie buforu.Ponadto, zapewnienia, że format nie jest ciągiem zdefiniowanym przez użytkownika.Aby uzyskać więcej informacji, zobacz unikanie przekroczenia buforu. |
vswprintf jest zgodny ze standardem C 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łych wersjach, więc kod należy zmienić, aby używać nowego zachowania zgodność.
W języku programowania C++ funkcje te mają przeciążenia szablonu, które wywołują nowsze, bezpieczne odpowiedniki tych funkcji.Aby uzyskać więcej informacji, zobacz Przeciążenia bezpiecznych szablonów.
Rutynowe mapowania zwykłego tekstu
Procedura Tchar.h |
_UNICODE & _MBCS nie zdefiniowano |
_MBCS zdefiniowano |
_UNICODE zdefiniowany |
---|---|---|---|
_vstprintf |
vsprintf |
vsprintf |
vswprintf |
_vstprintf_l |
_vsprintf_l |
_vsprintf_l |
_vswprintf_l |
Wymagania
Procedura |
Wymagany nagłówek |
Opcjonalne 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 systemu UNIX V.
Dodatkowe informacje o zgodności – zobacz: Zgodność 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