Funkcja vswprintf () w C ++ służy do zapisywania sformatowanego szerokiego ciągu w buforze szerokiego ciągu.
Funkcja vswprintf () jest zdefiniowana w pliku nagłówkowym.
Prototyp vswprintf ()
int vswprintf (bufor wchar_t *, rozmiar_t buf_rozmiar, format const wchar_t *, lista va_list vlist);
Funkcja vswprintf () zapisuje szeroki ciąg wskazywany przez format w buforze szerokich ciągów. Maksymalnie (buf_size-1)
szerokie znaki są zapisywane w buforze, po którym następuje pusty znak szeroki.
Format szerokiego ciągu może zawierać specyfikatory formatu zaczynające się od%, które są zastępowane wartościami zmiennych, które są przekazywane jako lista vlist.
Parametry vswprintf ()
- bufor: wskaźnik do szerokiego bufora ciągów, aby zapisać wynik.
- buf_size: Maksymalna liczba szerokich znaków do zapisania, w tym kończący znak szerokości zerowej.
- format: wskaźnik do szerokiego ciągu zakończonego wartością null, który jest zapisywany w buforze. Składa się ze znaków wraz z opcjonalnymi specyfikatorami formatu zaczynającymi się od%. Specyfikatory formatu są zastępowane wartościami odpowiednich zmiennych następujących po formacie.
Specyfikator formatu składa się z następujących części:- Wiodący znak%
- Flagi: opcjonalnie jedna lub więcej flag, które modyfikują zachowanie konwersji.
- -: Wyrównaj wynik do lewej w polu. Domyślnie jest wyjustowany do prawej.
- +: Znak wyniku jest dołączany na początku wartości, nawet w przypadku wyników dodatnich.
- Spacja: jeśli nie ma znaku, na początku wyniku jest umieszczana spacja.
- #: Wykonywana jest alternatywna forma konwersji.
- 0: jest używany do liczb całkowitych i zmiennoprzecinkowych. Zera wiodące służą do wypełniania liczb zamiast spacji.
- Szerokość: opcjonalna * lub wartość całkowita używana do określenia pola o minimalnej szerokości.
- Precyzja: opcjonalne pole składające się z. po którym następuje * lub liczba całkowita lub nic, aby określić dokładność.
- Długość: opcjonalny modyfikator długości, który określa rozmiar argumentu.
- Specifier: specyfikator formatu konwersji. Dostępne specyfikatory formatu są następujące:
Specyfikator formatu Opis % Drukuje% do Zapisuje pojedynczy znak s Zapisuje ciąg znaków d lub i Konwertuje liczbę całkowitą ze znakiem na reprezentację dziesiętną o Konwertuje liczbę całkowitą bez znaku na reprezentację ósemkową X lub x Konwertuje liczbę całkowitą bez znaku na reprezentację szesnastkową u Konwertuje liczbę całkowitą bez znaku na reprezentację dziesiętną F lub f Konwertuje liczbę zmiennoprzecinkową na reprezentację dziesiętną E lub e Konwertuje liczbę zmiennoprzecinkową na dziesiętną notację wykładniczą A lub a Konwertuje liczbę zmiennoprzecinkową na wykładnik szesnastkowy G lub g Konwertuje liczbę zmiennoprzecinkową na dziesiętną lub dziesiętną notację wykładniczą n Zwraca liczbę znaków zapisanych do tej pory przez to wywołanie funkcji. Wynik jest zapisywany do wartości wskazywanej przez argument p Zapisuje sekwencję znaków zdefiniowaną w implementacji definiującą wskaźnik.
Zatem ogólny format specyfikatora formatu to:% (flagi) (szerokość) (. precyzja) (długość)
- vlist: lista argumentów zawierających dane do zapisania.
vswprintf () Wartość zwracana
- Jeśli się powiedzie, funkcja vswprintf () zwraca liczbę zapisanych szerokich znaków z wyłączeniem kończącego znaku szerokiego o wartości null.
- Wartość ujemna jest zwracana, jeśli wystąpi jakikolwiek błąd kodowania lub jeśli liczba znaków do wygenerowania była równa lub większa od buf_size.
Przykład: Jak działa funkcja vswprintf ()?
#include #include #include void write(wchar_t* buffer, size_t buf_size, const wchar_t *fmt,… ) ( va_list args; va_start(args, fmt); vswprintf(buffer, buf_size, fmt, args); va_end(args); ) int main () ( wchar_t str() = L"u0684 u06b1 u06aa u06a3 u0684"; wchar_t buffer(50); setlocale(LC_ALL, "en_US.UTF-8"); write(buffer, 50, L"Arabic Letters: %ls", str); wprintf(L"%ls", buffer); return 0; )
Po uruchomieniu programu w pliku example.txt zostanie zapisany:
Litery arabskie: ڄ ڱ ڪ ڣ ڄ