C ++ vsnprintf () - C ++ - vakiokirjasto

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 

Mielenkiintoisia artikkeleita...