Udostępnij za pośrednictwem


sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

Wpisz sformatowane dane do ciągu.Bardziej bezpieczne wersje niektórych z tych funkcji są dostępne w sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l.Zabezpieczone wersje swprintf i _swprintf_l nie przyjmują parametru count.

int sprintf(
   char *buffer,
   const char *format [,
   argument] ... 
);
int _sprintf_l(
   char *buffer,
   const char *format,
   locale_t locale [,
   argument] ... 
);
int swprintf(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format [,
   argument]...
);
int _swprintf_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
);
int __swprintf_l(
   wchar_t *buffer,
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
);
template <size_t size>
int sprintf(
   char (&buffer)[size],
   const char *format [,
   argument] ... 
); // C++ only
template <size_t size>
int _sprintf_l(
   char (&buffer)[size],
   const char *format,
   locale_t locale [,
   argument] ... 
); // C++ only
template <size_t size>
int swprintf(
   wchar_t (&buffer)[size],
   const wchar_t *format [,
   argument]...
); // C++ only
template <size_t size>
int _swprintf_l(
   wchar_t (&buffer)[size],
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
); // C++ only

Parametry

  • buffer
    Lokalizacja magazynowa danych wyjściowych

  • count
    Maksymalna liczba znaków do przechowywania w wersji Unicode tej funkcji.

  • format
    Ciąg formantu formatu

  • argument
    Argumenty opcjonalne

  • locale
    Ustawienia regionalne do użycia.

Aby uzyskać więcej informacji na temat ciągów formatujących, zobacz Specyfikacje formatu.

Wartość zwracana

Liczba napisanych znaków lub –1, jeżeli wystąpił błąd.Jeśli wskaźnik buffer lub format ma wartość null, zostanie wywołany nieprawidłowy parametr uchwytu, 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.

sprintf zwraca liczbę bajtów przechowywanych w buffer, nie licząc zamykającego znaku pustego.swprintfzwraca liczbę znaków szerokich przechowywanych w buffer, nie licząc zamykającego znaku pustego.

Uwagi

Funkcja sprintf formatuje i przechowuje serie znaków i wartości w buffer.Każdy argument (jeśli istnieje) jest konwertowaya i wychodzi według specyfikacji formatu w format.Format składa się ze znaków zwykłych i ma ten sam formularz i funkcję jak format argument dla printf.Znak null jest dołączany po ostatnim napisanym znaku.Jeśli kopiowanie odbywa się między nakładającymi się ciągami, zachowanie jest niezdefiniowane.

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

Korzystając z sprintf, nie ma możliwości ograniczenia liczby znaków zapisanych, co oznacza że kod korzystający z sprintf jest podatny na przepełnienia buforu.Należy rozważyć użycie funkcji pokrewnych _snprintf, który określa maksymalną liczbę znaków, są zapisywane w buffer, lub użyj _scprintf można określić wielkość bufora jest wymagana.Ponadto, zapewnienia, że format nie jest ciągiem zdefiniowanym przez użytkownika.

swprintf jest to wersja szerokich znaków sprintf; argumenty wskaźnika do swprintf są ciągami szerokich znaków.Wykrywanie kodowania błędów w swprintf może się różnić w sprintf.swprintf i fwprintf zachowują się identycznie, chyba że swprintf zapisuje dane wyjściowe do ciągu, a nie do miejsca docelowego typu FILEi swprintf wymaga countparametru, aby określić maksymalną liczbę znaków, które mają być zapisane.Wersje tych funkcji z przyrostkiem _l są identyczne z wyjątkiem stosowania regionalnych parametrów zamiast bieżącego ciągu.

swprintf jest zgodny ze standardem C ISO, który wymaga drugiego parametru, count, typu size_t.Aby wymusić stare niestandardowe zachowanie, zdefiniuj _CRT_NON_CONFORMING_SWPRINTFS.W przyszłej wersji, stare zachowanie może być usunięte, więc kod powinien zostać zmieniony, aby wykorzystać nowe zachowanie zgodne z normą.

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

_stprintf

sprintf

sprintf

swprintf

_stprintf_l

_sprintf_l

_sprintf_l

__swprintf_l

Wymagania

Procedura

Wymagany nagłówek

sprintf, _sprintf_l

<stdio.h>

swprintf, _swprintf_l

<stdio.h> lub <wchar.h>

Dodatkowe informacje o zgodności – zobacz: Zgodność we Wprowadzeniu.

Przykład

// crt_sprintf.c
// compile with: /W3
// This program uses sprintf to format various
// data and place them in the string named buffer.

#include <stdio.h>

int main( void )
{
   char  buffer[200], s[] = "computer", c = 'l';
   int   i = 35, j;
   float fp = 1.7320534f;

   // Format and print various data: 
   j  = sprintf( buffer,     "   String:    %s\n", s ); // C4996
   j += sprintf( buffer + j, "   Character: %c\n", c ); // C4996
   j += sprintf( buffer + j, "   Integer:   %d\n", i ); // C4996
   j += sprintf( buffer + j, "   Real:      %f\n", fp );// C4996
   // Note: sprintf is deprecated; consider using sprintf_s instead

   printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
  
// crt_swprintf.c
// wide character example
// also demonstrates swprintf returning error code
#include <stdio.h>

int main( void )
{
   wchar_t buf[100];
   int len = swprintf( buf, 100, L"%s", L"Hello world" );
   printf( "wrote %d characters\n", len );
   len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );
   // swprintf fails because string contains WEOF (\xffff)
   printf( "wrote %d characters\n", len );
}
  

Odpowiednik w programie .NET Framework

System::String::Format

Zobacz też

Informacje

We/Wy strumienia

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

scanf, _scanf_l, wscanf, _wscanf_l

sscanf, _sscanf_l, swscanf, _swscanf_l

vprintf — Funkcje