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ściowychcount
Maksymalna liczba znaków do przechowywania w wersji Unicode tej funkcji.format
Ciąg formantu formatuargument
Argumenty opcjonalnelocale
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ń |
---|
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
Zobacz też
Informacje
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l