Funkcia vsnprintf () v C ++ sa používa na zápis formátovaného reťazca do vyrovnávacej pamäte reťazca.
Na rozdiel od vsprintf () je maximálny počet znakov, ktoré je možné zapísať do medzipamäte, špecifikovaný v vsnprintf()
.
vsnprintf () prototyp
int vsnprintf (char * buffer, size_t buf_size, const char * format, va_list vlist);
vsnprintf()
Funkcia zapíše reťazec odkazuje formátu do znakového reťazca vyrovnávacej pamäte. Maximálny počet znakov, ktoré je možné zapísať, je buf_size. Po napísaní znakov sa pridá zakončovací nulový znak. Ak sa buf_size rovná nule, nič sa nezapíše a vyrovnávacia pamäť môže byť nulový ukazovateľ.
Formát reťazca môže obsahovať špecifikátory formátu začínajúce na%, ktoré sú nahradené hodnotami premenných, ktoré sa odovzdávajú ako zoznam vlist.
Je definované v hlavičkovom súbore.
Parametre vsnprintf ()
- buffer: Ukazovateľ na znakový reťazec, ktorým sa zapíše výsledok.
- buf_size: Maximálny počet znakov na zápis.
- formát: Ukazovateľ na reťazec s nulovým zakončením, ktorý sa zapíše do toku súborov. Skladá sa zo znakov spolu s voliteľnými špecifikátormi formátu začínajúcich na%.
Špecifikátory formátu sú nahradené hodnotami príslušných premenných, ktoré nasledujú za formátovacím reťazcom.
Špecifikátor formátu má tieto časti:
- Vedúci znak%
- Príznaky: Voliteľný jeden alebo viac príznakov, ktoré upravujú správanie pri konverzii.
- -: Zarovnanie doľava k výsledku v rámci poľa. Štandardne je to zarovnané doprava.
- +: Znamienko výsledku sa pripája na začiatok hodnoty, a to aj v prípade pozitívnych výsledkov.
- Medzera: Ak nie je žiadny znak, na začiatok výsledku sa pripojí medzera.
- #: Vykoná sa alternatívna forma konverzie.
- 0: Používa sa na celé číslo a číslo s pohyblivou rádovou čiarkou. Na vyplnenie čísel namiesto medzery sa používajú úvodné nuly.
- Šírka: Voliteľná * alebo celočíselná hodnota používaná na zadanie poľa minimálnej šírky.
- Presnosť: Nepovinné pole pozostávajúce z a. za ktorými nasleduje * alebo celé číslo alebo nič, aby sa určila presnosť.
- Dĺžka: Voliteľný modifikátor dĺžky, ktorý určuje veľkosť argumentu.
- Špecifikátor: Špecifikátor formátu prevodu. Dostupné špecifikátory formátu sú:
Špecifikátor formátu Popis % Vytlačí% c Píše jeden znak s Zapíše reťazec znakov d alebo i Skonvertuje celé číslo so znamienkom na desatinné miesto o Skonvertuje celé číslo bez znamienka na osmičkovú reprezentáciu X alebo x Skonvertuje celé číslo bez znamienka na hexadecimálne vyjadrenie u Skonvertuje celé číslo bez znamienka na desatinné miesto F alebo f Prevedie číslo s pohyblivou rádovou čiarkou na desatinné miesto E alebo e Skonvertuje číslo s pohyblivou desatinnou čiarkou na desatinný zápis exponentu A alebo a Prevedie číslo s pohyblivou rádovou čiarkou na hexadecimálny exponent G alebo g Prevedie číslo s pohyblivou rádovou čiarkou na desatinný alebo desatinný zápis exponentu n Vráti počet znakov doteraz napísaných týmto volaním funkcie. Výsledok sa zapíše na hodnotu, na ktorú poukazuje argument p Zapíše postupnosť znakov definujúcich implementáciu, ktorá definuje ukazovateľ. Všeobecný formát špecifikátora formátu je teda:
%(flags)(width)(.precision)(length)specifier
- vlist: Zoznam argumentov obsahujúcich údaje na zápis.
vsnprintf () Vrátená hodnota
- Ak je úspešná,
vsnprintf()
funkcia vráti počet napísaných znakov. - Pri zlyhaní vráti zápornú hodnotu.
- Ak je dĺžka naformátovaného reťazca väčšia ako buf_size, treba ho skrátiť. V takýchto prípadoch
vsnprintf()
funkcia vráti celkový počet znakov s výnimkou ukončovacieho nulového znaku, ktorý by bol napísaný, ak by nebol stanovený limit buf_size.
Príklad: Ako funguje funkcia vsnprintf ()
#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; )
Po spustení programu bude výstup:
C ++ vytvoril Bjarne