C ++ snprintf () - C ++ standardraamatukogu

Funktsiooni snprintf () kaustas C ++ kasutatakse vormindatud stringi kirjutamiseks märgistringi puhvrisse.

Erinevalt sprintf () -st on puhvrisse kirjutatavate tähemärkide maksimaalne arv määratud snprintf().

snprintf () prototüüp

 int snprintf (char * puhver, size_t buf_size, const char * formaat,…);

snprintf()Funktsioon kirjutab stringi osutas poolt formaat puhvri. Maksimaalselt saab kirjutada märke (buf_size-1).

Pärast märkide kirjutamist lisatakse lõpetav nullmärk. Kui buf_size on võrdne nulliga, pole midagi kirjutatud ja puhver võib olla nullkursor.

See on määratletud päisefailis.

snprintf () parameetrid

  • puhver: kursori stringi puhvrisse tulemuse kirjutamiseks.
  • buf_size: määrake puhvrisse kirjutatavate märkide maksimaalne arv, mis on buf_size-1.
  • formaat: kursor nulliga lõpetatud stringi jaoks, mis kirjutatakse failivoogu. See koosneb märkidest koos valikuliste vorminguspetsifikaatoritega, mis algavad% -ga.

    Vorminguspetsifikaatorid asendatakse vastavate muutujate väärtustega, mis järgivad vormindusstringi.

    Vorminguspetsiifil on järgmised osad:

    • Juhtiv% märk
    • Lipud: valikuliselt üks või mitu lippu, mis muudab konversioonikäitumist.
      • -: vasakpoolne põhjendab tulemust väljal. Vaikimisi on see õigustatud.
      • +: Tulemuse märk kinnitatakse väärtuse algusesse ka positiivsete tulemuste korral.
      • Tühik: kui märki pole, lisatakse tulemuse algusesse tühik.
      • #: Teostatakse teisenduse alternatiivne vorm.
      • 0: Seda kasutatakse täis- ja ujukomaarvuks. Numbrite sisestamiseks tühiku asemel kasutatakse juhtnulle.
    • Laius: valikuline * või täisarv, mida kasutatakse minimaalse laiuse välja määramiseks.
    • Täpsus: valikuline väli, mis koosneb a. millele järgneb * või täisarv või mitte midagi täpsuse täpsustamiseks.
    • Pikkus: valikuline pikkuse muutja, mis määrab argumendi suuruse.
    • Täpsustaja: teisendusvormingu täpsustaja. Saadaval olevad vorminguspetsifikaatorid on järgmised:
      Vorminguspetsifikaator Kirjeldus
      % Prindib%
      c Kirjutab ühe tähemärgi
      s Kirjutab märgistringi
      d või i Teisendab allkirjastatud täisarv kümnendarvudeks
      o Teisendab allkirjata täisarv kaheksakujuliseks
      X või x Teisendab allkirjastamata täisarv kuueteistkümnendsüsteemis
      u Teisendab allkirjata täisarv kümnendarvudeks
      F või f Teisendab ujukoma numbri kümnendarvuks
      E või e Teisendab ujukomaarv kümnendkoha astendikuks
      A või a Teisendab ujukomaarv kuueteistkümnendsüsteemi eksponendiks
      G või g Teisendab ujukomaarvu kümnend- või kümnendarvulise astendina
      n Tagastab selle kutsega seni kirjutatud märkide arvu funktsioonile. Tulemus kirjutatakse väärtusele, millele argument osutab
      lk Kirjutab kursori määratleva rakenduse määratletud märgijada.

      Seega on vorminguspetsifikaatori üldine vorming: %(flags)(width)(.precision)(length)specifier

  • …: Muud täiendavad argumendid, mis täpsustavad prinditavaid andmeid. Need esinevad järjestuses vastavalt vorminguspetsifikaatorile.

snprintf () Tagastusväärtus

Kui see õnnestub, snprintf()tagastab funktsioon märkide arvu, mis oleks kirjutatud piisavalt suure puhvri jaoks, välja arvatud lõpetav nullmärk. Ebaõnnestumisel tagastab negatiivse väärtuse.

Väljund loetakse täielikult kirjutatuks siis ja ainult siis, kui tagastatud väärtus ei ole negatiivne ja väiksem kui buf_size.

Näide: kuidas funktsioon snprintf () töötab

 #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; )

Programmi käivitamisel on väljund järgmine:

 Tere, olen Max ja olen 23-aastane kirjutatud märkide arv = 34

Huvitavad Artiklid...