Funktiota vswprintf () C ++: ssa käytetään muotoilun leveän merkkijonon kirjoittamiseen laajaan merkkijonopuskuriin.
Funktio vswprintf () määritetään otsikkotiedostossa.
vswprintf () -prototyyppi
int vswprintf (wchar_t * puskuri, size_t buf_size, const wchar_t * muoto, va_list vlist);
Vswprintf () -funktio kirjoittaa leveän merkkijonon, johon muoto on osoittanut, leveään merkkijonopuskuriin. (buf_size-1)
Puskuriin kirjoitetaan enintään leveät merkit, joita seuraa tyhjä leveä merkki.
Laaja merkkijono -muoto voi sisältää% -alkuisia muotoilutunnisteita, jotka korvataan luetteloluettelona välitettävien muuttujien arvoilla.
vswprintf () -parametrit
- puskuri: Osoitin laajaan merkkijonopuskuriin tuloksen kirjoittamiseksi.
- buf_size: Kirjoitettavien leveiden merkkien enimmäismäärä, mukaan lukien lopetettava tyhjä leveä merkki.
- muoto: Osoitin tyhjäksi päätettyyn leveään merkkijonoon, joka kirjoitetaan puskuriin. Se koostuu merkeistä ja valinnaisista muotomäärittimistä, jotka alkavat%: lla. Formaatin määrittelijät korvataan vastaavien muuttujien arvoilla, jotka seuraavat muotoa.
Formaatin määrittelijässä on seuraavat osat:- Johtava% -merkki
- Liput: Valinnainen yksi tai useampi lippu, joka muuttaa konversiokäyttäytymistä.
- -: Vasen tasaa tuloksen kentässä. Oletuksena se on oikein perusteltu.
- +: Tuloksen merkki liitetään arvon alkuun, myös positiivisten tulosten saamiseksi.
- Välilyönti: Jos merkkiä ei ole, tuloksen alkuun kiinnitetään välilyönti.
- #: Vaihtoehtoinen muunnos suoritetaan.
- 0: Sitä käytetään kokonaislukuun ja liukulukuihin. Numeroita käytetään välilyöntien sijasta etunollia.
- Leveys: Valinnainen * tai kokonaislukuarvo, jota käytetään minimileveyskentän määrittämiseen.
- Tarkkuus: Valinnainen kenttä, joka koostuu a. jota seuraa * tai kokonaisluku tai ei mitään tarkkuuden määrittämiseksi.
- Pituus: Valinnainen pituuden muuttaja, joka määrittää argumentin koon.
- Määritin: Muunnosmuodon määrittelijä. Saatavilla olevat muotomäärittimet ovat seuraavat:
Formaatin määrittelijä Kuvaus % Tulosteet% c Kirjoittaa yhden merkin s Kirjoittaa merkkijonon d tai i Muuntaa allekirjoitetun kokonaisluvun desimaaliedustukseksi o Muuntaa allekirjoittamattoman kokonaisluvun oktaaliedustukseksi X tai x Muuntaa allekirjoittamattoman kokonaisluvun heksadesimaaliluvuksi u Muuntaa allekirjoittamattoman kokonaisluvun desimaaliedustukseksi F tai f Muuntaa liukuluvun desimaaliluvuksi E tai e Muuntaa liukuluvun desimaalilausekkeeksi A tai a Muuntaa liukuluvun luvun heksadesimaalilausekkeeksi G tai g Muuntaa liukuluvun desimaalin tai desimaalin eksponenttimerkinnäksi n Palauttaa tämän kutsun tähän mennessä kirjoittamien merkkien määrän funktioon. Tulos kirjoitetaan argumentin osoittamaan arvoon s Kirjoittaa toteutuksessa määritetyn merkkijonon, joka määrittelee osoittimen.
Joten muodon määrittelijän yleinen muoto on:% (liput) (leveys) (. tarkkuus) (pituus) määrittelijä
- vlist: Luettelo argumenteista, jotka sisältävät kirjoitettavat tiedot.
vswprintf () Palautusarvo
- Jos se onnistuu, vswprintf () -funktio palauttaa kirjoitettujen leveiden merkkien lukumäärän lukuun ottamatta lopetettavaa tyhjää leveää merkkiä.
- Negatiivinen arvo palautetaan, jos ilmenee koodausvirheitä tai jos luotavien merkkien määrä oli yhtä suuri tai suurempi kuin buf_size.
Esimerkki: Kuinka funktio vswprintf () toimii?
#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; )
Kun suoritat ohjelman, seuraava kirjoitetaan esimerkkiin.txt:
Arabiakirjaimet: ڄ ڱ ڪ ڣ ڄ