C ++ snprintf () - Standardna knjižnica C ++

Funkcija snprintf () v jeziku C ++ se uporablja za zapis formatiranega niza v medpomnilnik nizov znakov.

Za razliko od sprintf () je največje število znakov, ki jih je mogoče zapisati v vmesnik, določeno v snprintf().

prototip snprintf ()

 int snprintf (medpomnilnik char *, size_t buf_size, format const char *,…);

snprintf()Funkcija piše niz opozoril, da ga format za omilitev. Največje dovoljeno število znakov je (buf_size-1).

Ko so znaki napisani, se doda končni ničelni znak. Če je buf_size enak nič, ni zapisano nič, vmesni pomnilnik pa je lahko ničelni kazalec.

Določen je v datoteki glave.

snprintf () parametri

  • medpomnilnik: Kazalec na vmesni pomnilnik niza za zapis rezultata.
  • buf_size: Podajte največje število znakov, ki jih želite zapisati v medpomnilnik, ki je buf_size-1.
  • format: Kazalec na ničelno zaključen niz, ki je zapisan v tok datotek. Sestavljen je iz znakov in izbirnih specifikatorjev formata, ki se začnejo z%.

    Specifikatorji oblike se nadomestijo z vrednostmi ustreznih spremenljivk, ki sledijo nizu oblike.

    Specifikator oblike ima naslednje dele:

    • Vodilni znak%
    • Zastave: neobvezna ena ali več zastavic, ki spreminjajo vedenje pretvorbe.
      • -: Levo utemeljite rezultat znotraj polja. Privzeto je upravičeno.
      • +: Znak rezultata je pritrjen na začetek vrednosti, tudi za pozitivne rezultate.
      • Presledek: Če ni nobenega znaka, je presledek pritrjen na začetek rezultata.
      • #: Izvede se druga oblika pretvorbe.
      • 0: Uporablja se za celo število in število s plavajočo vejico. Za zapolnitev številk namesto presledka se uporabljajo vodilne ničle.
    • Širina: neobvezna vrednost * ali celo število, ki se uporablja za določanje polja najmanjše širine.
    • Natančnost: neobvezno polje, sestavljeno iz a. čemur sledi * ali celo število ali nič, kar določa natančnost.
    • Dolžina: neobvezni modifikator dolžine, ki določa velikost argumenta.
    • Specifikator: Specifikator pretvorbenega formata. Razpoložljivi opisniki oblike so naslednji:
      Format Specifier Opis
      % Odtisov%
      c Napiše en sam znak
      s Zapiše niz znakov
      d ali i Pretvori podpisano celo število v decimalno predstavitev
      o Pretvori nepodpisano celo število v osmiško predstavitev
      X ali x Pretvori nešteto celo število v šestnajstiško predstavitev
      u Pretvori nešteto celo število v decimalno predstavitev
      F ali f Pretvori število s plavajočo vejico v decimalno predstavitev
      E ali e Pretvori število s plavajočo vejico v zapis decimalnega eksponenta
      A ali a Pretvori število s plavajočo vejico v šestnajstiški eksponent
      G ali g Pretvori število s plavajočo vejico v decimalni ali decimalni eksponentni zapis
      n Vrne število doslej napisanih znakov s tem klicem funkcije. Rezultat se zapiše v vrednost, na katero opozarja argument
      str Zapiše zaporedje znakov, opredeljeno z izvedbo, ki definira kazalec.

      Tako je splošna oblika specifikatorja oblike: %(flags)(width)(.precision)(length)specifier

  • …: Drugi dodatni argumenti, ki določajo podatke za tiskanje. Pojavljajo se v zaporedju glede na specifikator formata.

snprintf () Vrnjena vrednost

Če je snprintf()funkcija uspešna, vrne število znakov, ki bi bili napisani za dovolj velik vmesni pomnilnik, razen zaključnega ničelnega znaka. Ob okvari vrne negativno vrednost.

Šteje se, da je izpis popolnoma napisan, če in samo, če je vrnjena vrednost nenegativna in manjša od buf_size.

Primer: Kako deluje funkcija snprintf ()

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

Ko zaženete program, bo rezultat:

 Živjo, jaz sem Max in star sem 23 let. Število napisanih znakov = 34

Zanimive Članki...