Udostępnij za pośrednictwem


sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

Zapisywać danych sformatowany ciąg.Niektóre z tych funkcji bezpieczniejsze wersje są dostępne; see sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l.Bezpieczne wersje swprintf i _swprintf_l nie count parametru.

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],
   size_t count,
   const wchar_t *format [,
   argument]...
); // C++ only
template <size_t size>
int _swprintf_l(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
); // C++ only

Parametry

  • buffer
    Miejsce przechowywania danych wyjściowych

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

  • format
    Ciąg formatu formantu

  • argument
    Opcjonalne argumenty

  • locale
    Ustawienia regionalne, aby użyć.

Aby uzyskać więcej informacji, zobacz Specyfikacji formatu.

Wartość zwracana

Liczba znaków napisane lub –1, jeżeli wystąpił błąd.Jeśli buffer lub format jest wskaźnik zerowy, wywoływana jest funkcja 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.

sprintfZwraca liczbę bajtów, przechowywane w buffer, nie licząc kończącego znaku null.swprintfZwraca liczbę znaków szerokości przechowywane w buffer, nie licząc zakończeń szerokiego znaku null.

Uwagi

sprintf Funkcji formaty i przechowuje szereg znaków wartości w buffer.Każdy argument (jeśli ma zastosowanie) jest konwertowane i wyjściowe zgodnie ze specyfikacją odpowiedni format w format.Format składa się ze znaków zwykłych i ma ten sam formularz i działać jako format argument dla printf.Znak null jest dołączany po ostatniego napisanego znaku.Jeśli kopiowanie występuje między ciągami, które się pokrywają, zachowanie jest niezdefiniowane.

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

Za pomocą sprintf, nie ma możliwości ograniczania liczby znaki pisane, co oznacza, że kod, za pomocą sprintf jest podatna na przepełnienia bufora.Należy wziąć pod uwagę przy użyciu funkcji powiązanych _snprintf, która określa maksymalną liczbę znaków, które są zapisywane w buffer, lub użyj _scprintf można określić wielkość bufora jest wymagana.Również zapewnić, że format nie jest ciągiem zdefiniowane przez użytkownika.

swprintfjest to wersja szerokich znaków sprintf; argumenty wskaźnik do swprintf są ciągami szerokich znaków.Wykrywanie błędów kodowania swprintf może się różnić od w sprintf.swprintfi fwprintf zachowują się identycznie, z wyjątkiem swprintf zapisuje dane wyjściowe na ciąg znaków, a nie do miejsca docelowego typu FILE, i swprintf wymaga countparametr, aby określić maksymalną liczbę znaków, które mają być zapisane.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.

swprintfjest 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.W przyszłej wersji starego zachowania może być usunięta, 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

_stprintf

sprintf

sprintf

swprintf

_stprintf_l

_sprintf_l

_sprintf_l

__swprintf_l

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

sprintf, _sprintf_l

<stdio.h>

swprintf, _swprintf_l

<stdio.h> lub <wchar.h>

Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności 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

Strumień we/wy

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

scanf, _scanf_l, wscanf, _wscanf_l

sscanf, _sscanf_l, swscanf, _swscanf_l

Funkcje vprintf