C ++ snprintf () - C ++ standartinė biblioteka

Funkcija snprintf () C ++ naudojama rašant suformatuotą eilutę į simbolių eilutės buferį.

Skirtingai nuo sprintf (), didžiausias simbolių, kuriuos galima įrašyti į buferį, skaičius nurodytas snprintf().

snprintf () prototipas

 int snprintf (char * buferis, size_t buf_size, const char * formatas,…);

snprintf()Funkcija rašo eilutę, į kuriuos nurodo formatas buferio. Maksimalus rašomų simbolių skaičius yra (buf_size-1).

Parašius simbolius, pridedamas baigiamasis nulis. Jei buf_size yra lygus nuliui, nieko nerašoma ir buferis gali būti nulinis rodyklė.

Tai apibrėžta antraštės faile.

snprintf () parametrai

  • buferis: žymeklis į styginių buferį, kad būtų galima parašyti rezultatą.
  • buf_size: Nurodykite maksimalų simbolių skaičių, kuris bus parašytas buferyje, kuris yra buf_size-1.
  • formatas: Neleistos eilutės, kuri įrašoma į failų srautą, žymeklis. Ją sudaro simboliai ir pasirenkami formato specifikatoriai, prasidedantys%.

    Formato specifikatoriai pakeičiami atitinkamų kintamųjų reikšmėmis, kurios seka formato eilutę.

    Formato specifikatoriuje yra šios dalys:

    • Pirmaujantis% ženklas
    • Žymos: pasirinktinai viena ar kelios žymos, modifikuojančios konversijos elgseną.
      • -: kairė pateisina rezultatą lauke. Pagal nutylėjimą tai yra teisinga.
      • +: Rezultato ženklas pridedamas prie vertės pradžios, net jei teigiami rezultatai.
      • Erdvė: jei nėra ženklo, rezultato pradžioje pridedama tarpas.
      • #: Atliekama alternatyvi konversijos forma.
      • 0: Jis naudojamas sveikam skaičiui ir slankiojo kablelio skaičiui. Skaičių užpildymui vietoj tarpo naudojami priekiniai nuliai.
    • Plotis: neprivaloma * arba sveiko skaičiaus vertė, naudojama nurodyti minimalaus pločio lauką.
    • Tikslumas: neprivalomas laukas, kurį sudaro a. po kurio * arba sveikas skaičius arba nieko, kad būtų galima nurodyti tikslumą.
    • Ilgis: pasirinktinis ilgio modifikatorius, nurodantis argumento dydį.
    • Specifikatorius: konversijos formato specifikatorius. Galimi formatų parametrai yra šie:
      Formato specifikatorius apibūdinimas
      % Spausdina%
      c Rašo vieną veikėją
      s Rašo simbolių eilutę
      d arba aš Konvertuoja pasirašytą sveikąjį skaičių į dešimtainį vaizdą
      o Konvertuoja nepasirašytą sveikąjį skaičių į aštuonetinį vaizdą
      X arba x Konvertuoja nepasirašytą sveikąjį skaičių į šešioliktainį vaizdą
      u Konvertuoja nepasirašytą sveikąjį skaičių į dešimtainį vaizdą
      F arba f Konvertuoja slankiojo kablelio skaičių dešimtainiu skaičiumi
      E arba e Konvertuoja slankiojo kablelio skaičių dešimtainio laipsnio rodikliu
      A arba a Konvertuoja slankiojo kablelio skaičių į šešioliktainį rodiklį
      G arba g Konvertuoja slankiojo kablelio skaičių dešimtainiu arba dešimtainiu laipsnių rodikliu
      n Grąžina iki šiol šiuo skambučiu parašytų simbolių skaičių funkcijai. Rezultatas įrašomas į argumento nurodytą vertę
      p Rašo įgyvendinimo apibrėžtą simbolių seką, apibrėžiančią žymeklį.

      Taigi bendras formato specifikatoriaus formatas yra: %(flags)(width)(.precision)(length)specifier

  • …: Kiti papildomi argumentai, nurodantys spausdintinus duomenis. Jie vyksta seka pagal formato specifikatorių.

snprintf () Grąžinimo vertė

Jei pavyks, snprintf()funkcija pateikia simbolių, kurie būtų parašyti pakankamai dideliam buferiui, išskyrus baigiamąjį nulinį simbolį, skaičių. Sugedus ji grąžina neigiamą vertę.

Laikoma, kad išvestis parašyta visiškai tada ir tik tuo atveju, jei grąžinama vertė nėra neigiama ir mažesnė nei buf_size.

Pavyzdys: Kaip veikia 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; )

Kai paleisite programą, išvestis bus:

 Sveiki, aš esu Maksas ir man 23 metai. Parašytų simbolių skaičius = 34

Įdomios straipsniai...