Udostępnij za pośrednictwem


sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l

Zapisywać danych sformatowany ciąg.Są to wersje sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l z rozszerzeń zabezpieczeń opisane w Funkcje zabezpieczeń w CRT.

int sprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format [,
   argument] ... 
);
int _sprintf_s_l(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format,
   locale_t locale [,
   argument] ... 
);
int swprintf_s(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format [,
   argument]...
);
int _swprintf_s_l(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format,
   locale_t locale [,
   argument]…
);
template <size_t size>
int sprintf_s(
   char (&buffer)[size],
   const char *format [,
   argument] ... 
); // C++ only
template <size_t size>
int swprintf_s(
   wchar_t (&buffer)[size],
   const wchar_t *format [,
   argument]...
); // C++ only

Parametry

  • buffer
    Miejsce przechowywania danych wyjściowych

  • sizeOfBuffer
    Maksymalna liczba znaków do przechowywania.

  • 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.If buffer or format is a null pointer, sprintf_s and swprintf_s return -1 and set errno to EINVAL.

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

Uwagi

sprintf_s 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.

Jedną z głównych różnic między sprintf_s i sprintf jest to, że sprintf_s kontroli ciąg formatu dla prawidłowe znaki formatowania, sprintf sprawdza tylko, jeśli format ciągu lub buforu są NULL wskaźniki.Wyboru albo kończy się niepowodzeniem, jeżeli nieprawidłowy parametr wywoływana jest funkcja obsługi, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie jest dozwolone, aby kontynuować, funkcja zwraca wartość -1 i zestawy errno do EINVAL.

Główną różnicą między sprintf_s i sprintf jest to, że sprintf_s przyjmuje parametr długości, określając rozmiar buforu wyjściowego w znakach.Jeśli bufor jest za mały dla tekstu drukowanego buforu jest ustawiony na pusty ciąg i wywoływana jest funkcja obsługi nieprawidłowy parametr.W odróżnieniu od snprintf, sprintf_s gwarantuje, że bufor będzie być zakończony zerem (chyba, że rozmiar buforu jest równy zero).

swprintf_sjest to wersja szerokich znaków sprintf_s; argumenty wskaźnik do swprintf_s są ciągami szerokich znaków.Wykrywanie błędów kodowania swprintf_s może się różnić od w sprintf_s.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.

W języku C++ korzystając z tych funkcji jest uproszczona poprzez overloads szablonu; overloads można automatycznie rozpoznać długość buforu (eliminując konieczność należy określić argument rozmiar) i automatycznie można zastąpić starszych, które nie są bezpieczne funkcje z ich odpowiednikami nowsze, bezpieczne.Aby uzyskać więcej informacji, zobacz Secure, szablon Overloads.

Dostępne są wersje sprintf_s , oferują dodatkową kontrolę nad co się dzieje, jeśli bufor jest zbyt mały.Aby uzyskać więcej informacji, zobacz _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l.

Tekst rodzajowy rutynowych mapowania

TCHAR.Rutynowe H

_UNICODE & Nie zdefiniowano _MBCS

_MBCS, definicja

_UNICODE, definicja

_stprintf_s

sprintf_s

sprintf_s

swprintf_s

_stprintf_s_l

_sprintf_s_l

_sprintf_s_l

_swprintf_s_l

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

sprintf_s, _sprintf_s_l

<stdio.h>

swprintf_s, _swprintf_s_l

<stdio.h> lub <wchar.h>

Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności we wprowadzeniu.

Przykład

// crt_sprintf_s.c
// This program uses sprintf_s 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_s( buffer, 200,     "   String:    %s\n", s );
   j += sprintf_s( buffer + j, 200 - j, "   Character: %c\n", c );
   j += sprintf_s( buffer + j, 200 - j, "   Integer:   %d\n", i );
   j += sprintf_s( buffer + j, 200 - j, "   Real:      %f\n", fp );

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

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

Odpowiednik w programie .NET Framework

[M: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