Udostępnij za pośrednictwem


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ń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

System::String::Format

Zobacz też

Informacje

We/Wy strumienia

vprintf — Funkcje

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_copy, va_end, va_start