C ++ snprintf () - C ++ - vakiokirjasto

C ++: n snprintf () -funktiota käytetään muotoilun merkkijonon kirjoittamiseen merkkijonopuskuriin.

Toisin kuin sprintf (), puskuriin kirjoitettavien merkkien enimmäismäärä määritetään kohdassa snprintf().

snprintf () -prototyyppi

 int snprintf (char * puskuri, size_t buf_size, const char * muoto,…);

snprintf()Toiminto kirjoittaa merkkijonoa osoitteen sivulle muotoon puskuri. Kirjoitettavien merkkien enimmäismäärä on (buf_size-1).

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.

Se määritetään otsikkotiedostossa.

snprintf () -parametrit

  • puskuri: Osoitin merkkijonopuskuriin kirjoittamaan tuloksen.
  • buf_size: Määritä puskuriin kirjoitettavien merkkien enimmäismäärä, joka on buf_size-1.
  • 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

  • …: Muut lisäväitteet, jotka määrittelevät tulostettavat tiedot. Ne esiintyvät järjestyksessä muodon määrittelijän mukaan.

snprintf () Palautusarvo

Jos se onnistuu, snprintf()funktio palauttaa merkkien määrän, joka olisi kirjoitettu riittävän suurelle puskurille lukuun ottamatta lopetettavaa nollamerkkiä. Epäonnistumisen yhteydessä se palauttaa negatiivisen arvon.

Lähdön katsotaan kirjoitetun kokonaan, jos ja vain, jos palautettu arvo ei ole negatiivinen ja pienempi kuin buf_size.

Esimerkki: Kuinka snprintf () -toiminto toimii

 #include #include using namespace std; int main() ( char buffer(100); int retVal, buf_size = 100; char name() = "Max"; int age = 23; retVal = snprintf(buffer, buf_size, "Hi, I am %s and I am %d years old", name, age); if (retVal> 0 && retVal < buf_size) ( cout << buffer << endl; cout << "Number of characters written = " << retVal << endl; ) else cout << "Error writing to buffer" << endl; return 0; )

Kun suoritat ohjelmaa, tulos on:

 Hei, olen Max ja olen 23-vuotias kirjoitettujen merkkien lukumäärä = 34

Mielenkiintoisia artikkeleita...