A C ++ - ban található vsnprintf () függvény segítségével egy formázott karakterláncot írhatunk egy string pufferbe.
A vsprintf () -tõl eltérõen a pufferbe írható karakterek maximális számát a vsnprintf()
.
vsnprintf () prototípus
int vsnprintf (char * puffer, size_t buf_size, const char * formátum, va_list vlist);
A vsnprintf()
függvény egy karakterlánc-pufferbe írja a formátum szerint mutatott karakterláncot. Az írható karakterek maximális száma buf_size. A karakterek írása után egy végződő null karakter kerül hozzáadásra. Ha a buf_size értéke nulla, akkor semmit nem írunk, és a puffer null mutató lehet.
A karakterlánc formátum tartalmazhat% -al kezdődő formátummeghatározókat, amelyek helyébe a listavllistként átadott változók értékei lépnek.
A fejlécfájlban van meghatározva.
vsnprintf () paraméterek
- puffer: Mutasson egy karakterláncra az eredmény megírásához.
- buf_size: Az írható karakterek maximális száma.
- formátum: Mutató egy nullával végződő karakterláncra, amelyet a fájlfolyamba írnak. Karakterekből áll, és opcionális formátum-specifikátorokkal kezdődik, amelyek% -kal kezdődnek.
A formátum-specifikátorokat a megfelelő változók értékei helyettesítik, amelyek a formátum-karakterláncot követik.
A formátummeghatározó a következő részekkel rendelkezik:
- Vezető% jel
- Jelölések: Opcionálisan egy vagy több jelölés, amely módosítja a konverzió viselkedését.
- -: Bal igazolja az eredményt a mezőn belül. Alapértelmezés szerint helyesen indokolt.
- +: Az eredmény jele az érték elejéhez van kötve, még pozitív eredmények esetén is.
- Szóköz: Ha nincs előjel, akkor az eredmény elejéhez szóköz tartozik.
- #: A konverzió alternatív formáját hajtják végre.
- 0: Egész számra és lebegőpontos számra használják. A nullák a szóköz helyett a számok kitöltésére szolgálnak.
- Szélesség: Opcionális * vagy egész érték, amelyet a minimális szélesség mező megadásához használnak.
- Pontosság: Választható mező, amely a. * vagy egész szám, vagy semmi a pontosság megadásához.
- Hossz: Opcionális hosszmódosító, amely megadja az argumentum méretét.
- Specifier: Konverziós formátum-specifikáló. A rendelkezésre álló formátum-meghatározók a következők:
Formátummeghatározó Leírás % Nyomat% c Egyetlen karaktert ír s Karakterláncot ír d vagy i Az aláírt egész számot decimális ábrázolássá alakítja o Az előjel nélküli egész számot oktális ábrázolássá alakítja X vagy x Aláíratlan egész számot hexadecimális ábrázolássá alakítja u Az aláíratlan egész számot decimális ábrázolássá alakítja F vagy f A lebegőpontos számot tizedesre konvertálja E vagy e A lebegőpontos számot decimális exponens jelöléssé alakítja A vagy a A lebegőpontos számot hexadecimális kitevővé konvertálja G vagy g A lebegőpontos számot decimális vagy decimális exponens jelöléssé alakítja n Visszaadja a függvénynek a hívás által eddig írt karakterek számát. Az eredményt arra az értékre írják, amelyre az argumentum rámutat o Ír egy megvalósítás által definiált karaktersorozatot, amely meghatároz egy mutatót. Tehát a formátummeghatározó általános formátuma:
%(flags)(width)(.precision)(length)specifier
- vlist: Az írandó adatokat tartalmazó argumentumok listája.
vsnprintf () Visszatérési érték
- Sikeres eredmény esetén a
vsnprintf()
függvény visszaadja az írt karakterek számát. - Meghibásodás esetén negatív értéket ad vissza.
- Ha a formázott karakterlánc hossza nagyobb, mint a buf_size, akkor meg kell csonkítani. Ilyen esetekben a
vsnprintf()
függvény a karakterek teljes számát adja vissza, kivéve a befejező null karaktert, amelyet akkor írtak volna, ha a buf_size korlátot nem írják elő.
Példa: Hogyan működik a vsnprintf () függvény
#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; )
A program futtatásakor a kimenet a következő lesz:
A C ++ -t Bjarne készítette