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ściowychsizeOfBuffer
Maksymalna liczba znaków do przechowywania.format
Ciąg formatu formantuargument
Opcjonalne argumentylocale
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
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l