Udostępnij za pośrednictwem


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.

Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

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

System::String::format

Zobacz też

Informacje

Strumień we/wy

Funkcje vprintf

Składnia specyfikacji formatu: funkcje printf i wprintf

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

va_arg, va_end, va_start