Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 wprintf i . 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_pwieloznakową ; 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 bufferobiekcie , która nie zlicza znaku null zakończenia.
_swprintf_p Zwraca liczbę znaków szerokich przechowywanych w bufferobiekcie , 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ść errnoEINVAL.
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