C ++ funkcija vsnprintf () naudojama suformatuotai eilutei rašyti į eilučių buferį.
Skirtingai nuo vsprintf (), maksimalus simbolių, kuriuos galima įrašyti į buferį, skaičius nurodytas vsnprintf()
.
vsnprintf () prototipas
int vsnprintf (char * buferis, size_t buf_size, const char * formatas, va_list vlist);
vsnprintf()
Funkcija rašo eilutę pažymėjo, kad pagal formatą į simbolių eilutę buferio. Maksimalus rašomų simbolių skaičius yra buf_size. Parašius simbolius, pridedamas baigiamasis nulis simbolis. Jei buf_size yra lygus nuliui, nieko nerašoma ir buferis gali būti nulinis rodyklė.
Stygos formate gali būti formato specifikatoriai, prasidedantys%, kurie yra pakeisti kintamųjų, perduotų kaip sąrašo vlist, vertėmis.
Tai apibrėžta antraštės faile.
vsnprintf () parametrai
- buferis: žymeklis simbolių eilutėje, norint parašyti rezultatą.
- buf_size: maksimalus rašomų simbolių skaičius.
- 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
- vlist: argumentų, kuriuose yra duomenys, kuriuos reikia parašyti, sąrašas.
vsnprintf () Grąžinimo vertė
- Jei pavyks,
vsnprintf()
funkcija grąžins parašytų simbolių skaičių. - Sugedus ji grąžina neigiamą vertę.
- Kai suformatuotos eilutės ilgis yra didesnis nei buf_size, ją reikia sutrumpinti. Tokiais atvejais
vsnprintf()
funkcija pateikia bendrą simbolių skaičių, išskyrus baigiamąjį nulinį simbolį, kuris būtų parašytas, jei nebūtų nustatytas buf_size limitas.
Pavyzdys: Kaip veikia vsnprintf () funkcija
#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; )
Kai paleisite programą, išvestis bus:
C ++ sukūrė Bjarne