_sprintf_p
, , _sprintf_p_l
, , _swprintf_p
_swprintf_p_l
Zapisuj sformatowane dane w ciągu z możliwością określenia kolejności, w jaką parametry są używane w ciągu formatu.
Składnia
int _sprintf_p(
char *buffer,
size_t sizeOfBuffer,
const char *format [,
argument_list]
);
int _sprintf_p_l(
char *buffer,
size_t sizeOfBuffer,
const char *format,
_locale_t locale [,
argument_list]
);
int _swprintf_p(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format [,
argument_list]
);
int _swprintf_p_l(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format,
_locale_t locale [,
argument_list]
);
Parametry
buffer
Lokalizacja magazynu dla danych wyjściowych
sizeOfBuffer
Maksymalna liczba znaków do zapisania.
format
Ciąg kontroli formatu.
argument_list
Opcjonalne argumenty dla ciągu formatu.
locale
Ustawienia regionalne do użycia.
Aby uzyskać więcej informacji, zobacz Składnia specyfikacji formatu.
Wartość zwracana
Liczba zapisanych znaków lub -1, jeśli wystąpił błąd.
Uwagi
Funkcja _sprintf_p
formatuje i przechowuje serię znaków i wartości w pliku buffer
. Każdy argument w argument_list
obiekcie (jeśli istnieje) jest konwertowany i wyjściowy zgodnie z odpowiednią specyfikacją formatu w pliku format
. Argument format
używa składni specyfikacji formatu dla printf
funkcji i wprintf
. Znak null jest dołączany po zapisaniu ostatniego znaku. Jeśli kopiowanie odbywa się między nakładającymi się ciągami, zachowanie jest niezdefiniowane. Różnica między elementami _sprintf_p
i sprintf_s
polega na tym, że _sprintf_p
obsługuje parametry pozycyjne, co umożliwia określenie kolejności, w jakiej argumenty są używane w ciągu formatu. Aby uzyskać więcej informacji, zobacz printf_p
Parametry pozycyjne.
_swprintf_p
jest wersją _sprintf_p
wieloznakową ; argumenty wskaźnika do _swprintf_p
są ciągami o szerokim znaku. Wykrywanie błędów kodowania w _swprintf_p
programie może różnić się od wykrywania w programie _sprintf_p
. _swprintf_p
i fwprintf_p
zachowują się identycznie, z tą różnicą, że _swprintf_p
zapisuje dane wyjściowe w ciągu, a nie do miejsca docelowego typu FILE
, i _swprintf_p
wymaga count
, aby parametr określał maksymalną liczbę znaków do zapisania. Wersje tych funkcji z sufiksem _l
są identyczne, z tą różnicą, że używają parametru ustawień regionalnych przekazanych zamiast bieżących ustawień regionalnych wątku.
_sprintf_p
Zwraca liczbę bajtów przechowywanych w buffer
obiekcie , która nie zlicza znaku null zakończenia. _swprintf_p
Zwraca liczbę znaków szerokich przechowywanych w buffer
obiekcie , która nie zlicza znaku szerokiego o wartości null zakończenia. Jeśli buffer
lub format
jest wskaźnikiem o wartości null lub jeśli ciąg formatu zawiera nieprawidłowe znaki formatowania, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Walidacja parametru. Jeśli wykonanie może kontynuować, te funkcje zwracają wartość -1 i ustawiają wartość errno
EINVAL
.
Ważne
Począwszy od systemu Windows 10 w wersji 2004 (kompilacja 19041), printf
rodzina funkcji drukuje dokładnie możliwe liczby zmiennoprzecinkowe zgodnie z regułami IEEE 754 dotyczącymi zaokrąglania. W poprzednich wersjach systemu Windows dokładnie reprezentowane liczby zmiennoprzecinkowe kończące się na "5" zawsze zaokrągla się w górę. IEEE 754 stwierdza, że muszą zaokrąglić do najbliższej parzysta cyfra (znana również jako "Zaokrąglanie Bankiera"). Na przykład oba printf("%1.0f", 1.5)
printf("%1.0f", 2.5)
elementy i powinny być zaokrąglone do 2. Wcześniej 1,5 zaokrągliłoby się do 2 i 2,5 do 3. Ta zmiana dotyczy tylko dokładnie możliwych do reprezentowania liczb. Na przykład 2,35 (który, gdy jest reprezentowany w pamięci, jest bliżej 2,350000000000000008) nadal zaokrągla się do 2,4. Zaokrąglanie wykonywane przez te funkcje jest teraz również zgodne z trybem zaokrąglania zmiennoprzecinkowego ustawionym przez fesetround
. Wcześniej zaokrąglanie zawsze wybierało FE_TONEAREST
zachowanie. Ta zmiana dotyczy tylko programów utworzonych przy użyciu programu Visual Studio 2019 w wersji 16.2 lub nowszej. Aby użyć starszego zachowania zaokrąglania zmiennoprzecinkowego, połącz się z elementem "legacy_stdio_float_rounding.obj".
Mapowania procedur tekstu ogólnego
TCHAR.H rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_stprintf_p |
_sprintf_p |
_sprintf_p |
_swprintf_p |
_stprintf_p_l |
_sprintf_p_l |
_sprintf_p_l |
_swprintf_p_l |
Wymagania
Procedura | Wymagany nagłówek |
---|---|
_sprintf_p , _sprintf_p_l |
<stdio.h> |
_swprintf_p , _swprintf_p_l |
<stdio.h> lub <wchar.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład: służy _sprintf_p
do formatowania danych
// crt_sprintf_p.c
// This program uses _sprintf_p 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_p( buffer, 200,
" String: %s\n", s );
j += _sprintf_p( buffer + j, 200 - j,
" Character: %c\n", c );
j += _sprintf_p( buffer + j, 200 - j,
" Integer: %d\n", i );
j += _sprintf_p( buffer + j, 200 - j,
" Real: %f\n", fp );
printf( "Output:\n%s\ncharacter count = %d\n",
buffer, j );
}
Output:
String: computer
Character: l
Integer: 35
Real: 1.732053
character count = 79
Przykład: obsługa kodu błędu
// crt_swprintf_p.c
// This is the wide character example which
// also demonstrates _swprintf_p returning
// error code.
#include <stdio.h>
#define BUFFER_SIZE 100
int main( void )
{
wchar_t buffer[BUFFER_SIZE];
int len;
len = _swprintf_p(buffer, BUFFER_SIZE, L"%2$s %1$d",
0, L" marbles in your head.");
_printf_p( "Wrote %d characters\n", len );
// _swprintf_p fails because string contains WEOF (\xffff)
len = _swprintf_p(buffer, BUFFER_SIZE, L"%s",
L"Hello\xffff world" );
_printf_p( "Wrote %d characters\n", len );
}
Wrote 24 characters
Wrote -1 characters
Zobacz też
We/Wy strumienia
_fprintf_p
, , _fprintf_p_l
, , _fwprintf_p
_fwprintf_p_l
fprintf
, , _fprintf_l
, , fwprintf
_fwprintf_l
_printf_p
, , _printf_p_l
, , _wprintf_p
_wprintf_p_l
printf
, , _printf_l
, , wprintf
_wprintf_l
sprintf
, , _sprintf_l
, swprintf
, , _swprintf_l
__swprintf_l
scanf
, , _scanf_l
, , wscanf
_wscanf_l
sscanf
, , _sscanf_l
, , swscanf
_swscanf_l
sscanf_s
, , _sscanf_s_l
, , swscanf_s
_swscanf_s_l
vprintf
, funkcje
printf_p
Parametry pozycyjne