De functie vswprintf () in C ++ wordt gebruikt om een geformatteerde brede string naar een brede stringbuffer te schrijven.
De functie vswprintf () is gedefinieerd in het header-bestand.
vswprintf () prototype
int vswprintf (wchar_t * buffer, size_t buf_size, const wchar_t * formaat, va_list vlist);
De functie vswprintf () schrijft de brede tekenreeks waarnaar wordt verwezen door het formaat naar de brede tekenreeksbuffer. Er worden maximaal (buf_size-1)
brede tekens naar de buffer geschreven, gevolgd door een nul breed teken.
Het brede tekenreeksformaat kan opmaakspecificaties bevatten die beginnen met% die worden vervangen door de waarden van variabelen die worden doorgegeven als een lijst vlist.
vswprintf () Parameters
- buffer: Pointer naar een brede stringbuffer om het resultaat te schrijven.
- buf_size: Maximaal aantal brede karakters om te schrijven inclusief het afsluitende null brede karakter.
- format: een pointer naar een met null beëindigde brede string die naar de buffer wordt geschreven. Het bestaat uit tekens en optionele indelingsspecificaties die beginnen met%. De formaatspecificaties worden vervangen door de waarden van de respectievelijke variabelen die het formaat volgen.
De formaatspecificatie heeft de volgende onderdelen:- Een toonaangevend% -teken
- Vlaggen: Optioneel een of meer vlaggen die het conversiegedrag wijzigen.
- -: Links uitvullen van het resultaat binnen het veld. Standaard is het goed gerechtvaardigd.
- +: Het teken van het resultaat wordt aan het begin van de waarde gehecht, zelfs voor positieve resultaten.
- Spatie: als er geen teken is, wordt er een spatie aan het begin van het resultaat toegevoegd.
- #: Er wordt een alternatieve vorm van conversie uitgevoerd.
- 0: Het wordt gebruikt voor integer en drijvende-kommagetallen. Voorloopnullen worden gebruikt om de cijfers in plaats van de spatie te vullen.
- Breedte: een optionele * of geheel getal die wordt gebruikt om een veld met een minimale breedte op te geven.
- Precisie: een optioneel veld bestaande uit een. gevolgd door * of geheel getal of niets om de precisie te specificeren.
- Lengte: een optionele lengtemodificator die de grootte van het argument aangeeft.
- Specifier: een specificatie van het conversieformaat. De beschikbare formaatspecificaties zijn als volgt:
Formaatspecificatie Omschrijving % Afdrukken% c Schrijft een enkel teken s Schrijft een tekenreeks d of i Converteert een geheel getal met teken naar een decimale weergave O Converteert een geheel getal zonder teken naar een octale weergave X of x Converteert een geheel getal zonder teken naar een hexadecimale weergave u Converteert een geheel getal zonder teken naar een decimale weergave F of f Converteert een getal met een drijvende komma naar de decimale weergave E of e Converteert een getal met een drijvende komma naar de decimale exponentnotatie A of een Converteert drijvende-kommagetal naar de hexadecimale exponent G of g Converteert drijvende-kommagetal naar decimale of decimale exponentnotatie n Retourneert het aantal tekens dat tot dusver door deze aanroep naar de functie is geschreven. Het resultaat wordt geschreven naar de waarde waarnaar het argument verwijst p Schrijft een door de implementatie gedefinieerde tekenreeks die een pointer definieert.
Dus het algemene formaat van de formaatspecificatie is:% (vlaggen) (breedte) (. precisie) (lengte) specificatie
- vlist: een lijst met argumenten die de gegevens bevatten die moeten worden geschreven.
vswprintf () Retourwaarde
- Als dit lukt, retourneert de functie vswprintf () het aantal geschreven brede tekens, exclusief het afsluitende nul-brede teken.
- Een negatieve waarde wordt geretourneerd als er een coderingsfout optreedt of als het aantal te genereren tekens gelijk of groter is dan buf_size.
Voorbeeld: hoe vswprintf () functie werkt?
#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; )
Wanneer u het programma uitvoert, wordt het volgende naar example.txt geschreven:
Arabische letters: ڄ ڱ ڪ ڣ ڄ