C ++: n funktiota vsnprintf () käytetään muotoilun merkkijonon kirjoittamiseen merkkijonopuskuriin.
Toisin kuin vsprintf (), puskuriin kirjoitettavien merkkien enimmäismäärä määritetään kohdassa vsnprintf()
.
vsnprintf () -prototyyppi
int vsnprintf (char * puskuri, size_t buf_size, const char * muoto, va_list vlist);
vsnprintf()
Toiminto kirjoittaa merkkijonoa osoitteen sivulle muodossa merkkijonon puskurissa. Kirjoitettavien merkkien enimmäismäärä on buf_size. Kun merkit on kirjoitettu, lisätään lopullinen tyhjä merkki. Jos buf_size on yhtä suuri kuin nolla, mitään ei kirjoiteta ja puskuri voi olla nollaosoitin.
Merkkijonomuoto voi sisältää muotomäärittimet, jotka alkavat%: lla, jotka korvataan luettelomuodona välitettävien muuttujien arvoilla.
Se määritetään otsikkotiedostossa.
vsnprintf () -parametrit
- puskuri: Osoitin merkkijonoon tuloksen kirjoittamiseksi.
- buf_size: Kirjoitettavien merkkien enimmäismäärä.
- muoto: Osoitin nollan päättyneelle merkkijonolle, joka kirjoitetaan tiedostovirtaan. Se koostuu merkeistä ja valinnaisista muotoilun määrittelijöistä, jotka alkavat%: lla.
Formaatin määrittelijät korvataan vastaavien muuttujien arvoilla, jotka seuraavat muotomerkkijonoa.
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:
%(flags)(width)(.precision)(length)specifier
- vlist: Luettelo argumenteista, jotka sisältävät kirjoitettavat tiedot.
vsnprintf () Palautusarvo
- Jos se onnistuu,
vsnprintf()
funktio palauttaa kirjoitettujen merkkien määrän. - Epäonnistumisen yhteydessä se palauttaa negatiivisen arvon.
- Kun alustetun merkkijonon pituus on suurempi kuin buf_size, se on katkaistava. Tällaisissa tapauksissa
vsnprintf()
funktio palauttaa merkkien kokonaismäärän lukuun ottamatta lopetettavaa nollamerkkiä, joka olisi kirjoitettu, ellei buf_size-rajaa olisi asetettu.
Esimerkki: Kuinka vsnprintf () -toiminto toimii
#include #include void write(char* buf, int buf_size, const char *fmt,… ) ( va_list args; va_start(args, fmt); vsnprintf(buf, buf_size, fmt, args); va_end(args); ) int main () ( char buffer(100); char fname(20) = "Bjarne"; char lname(20) = "Stroustrup"; char lang(5) = "C++"; write(buffer, 27, "%s was created by %s %s", lang, fname, lname); printf("%s", buffer); return 0; )
Kun suoritat ohjelmaa, tulos on:
C ++ on luonut Bjarne