C ++ vsnprintf () - C ++ standardraamatukogu

Funktsiooni vsnprintf () kaustas C ++ kasutatakse vormindatud stringi kirjutamiseks stringipuhvrisse.

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

vsnprintf () prototüüp

 int vsnprintf (char * puhver, size_t buf_size, const char * formaat, va_list vlist);

vsnprintf()Funktsioon kirjutab stringi osutas poolt formaat märgijärjes- puhvri. Maksimaalne kirjutatavate märkide arv on buf_size. 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.

Stringi formaat võib sisaldada vorminguspetsifikaate, mis algavad% -st, mis asendatakse loendi vlistina edastatud muutujate väärtustega.

See on määratletud päisefailis.

vsnprintf () parameetrid

  • puhver: märk märkmereale tulemuse kirjutamiseks.
  • buf_size: maksimaalne kirjutatavate märkide arv.
  • 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

  • vlist: argumentide loend, mis sisaldab kirjutatavaid andmeid.

vsnprintf () Tagastusväärtus

  • Kui see õnnestub, vsnprintf()tagastab funktsioon kirjutatud märkide arvu.
  • Rikke korral tagastab negatiivse väärtuse.
  • Kui vormindatud stringi pikkus on suurem kui buf_size, tuleb seda kärpida. Sellistel juhtudel vsnprintf()tagastab funktsioon märkide koguarvu, välja arvatud lõpetav nullmärk, mis oleks kirjutatud, kui buf_size-limiiti ei oleks määratud.

Näide: Kuidas funktsioon vsnprintf () töötab

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

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

 C ++ lõi Bjarne 

Huvitavad Artiklid...