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ściowychcount
Maksymalna liczba znaków do przechowywania w wersję Unicode tej funkcji.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.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.
![]() |
---|
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
Zobacz też
Informacje
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l