Funkcija vsnprintf () u C ++u koristi se za pisanje formatiranog niza u međuspremnik niza.
Za razliku od vsprintf (), maksimalan broj znakova koji se mogu upisati u međuspremnik naveden je u vsnprintf()
.
prototip vsnprintf ()
int vsnprintf (char * međuspremnik, size_t buf_size, const char * format, va_list vlist);
vsnprintf()
Funkcija piše string na koji pokazuje formatu niz znakova tampon. Maksimalan broj znakova koji se mogu napisati je buf_size. Nakon pisanja znakova dodaje se završni null znak. Ako je buf_size jednak nuli, ništa se ne zapisuje, a međuspremnik može biti null pokazivač.
Format niza može sadržavati specifikatore formata koji počinju s% koji se zamjenjuju vrijednostima varijabli koje se prosljeđuju kao popis vlist.
Definirano je u datoteci zaglavlja.
vsnprintf () parametri
- međuspremnik: pokazivač na niz znakova za pisanje rezultata.
- buf_size: Maksimalan broj znakova za pisanje.
- format: pokazivač na nulu završeni niz koji je zapisan u tok datoteke. Sastoji se od znakova, zajedno s neobaveznim specifikatorima formata koji počinju s%.
Specifikatori formata zamjenjuju se vrijednostima odgovarajućih varijabli koje slijede niz formata.
Specifikator formata ima sljedeće dijelove:
- Vodeći znak%
- Zastave: Izborna jedna ili više zastavica koje mijenjaju ponašanje pretvorbe.
- -: Lijevo opravdajte rezultat unutar polja. Po defaultu je ispravno opravdano.
- +: Znak rezultata pridružen je početku vrijednosti, čak i za pozitivne rezultate.
- Razmak: Ako nema znaka, razmak se dodaje na početak rezultata.
- #: Izvodi se alternativni oblik pretvorbe.
- 0: Koristi se za cijeli broj i broj s pomičnim zarezom. Vodeće se nule koriste za umetanje brojeva umjesto razmaka.
- Širina: Izborna * ili cijela vrijednost koja se koristi za specificiranje polja minimalne širine.
- Preciznost: Izborno polje koje se sastoji od a. nakon čega slijedi * ili cijeli broj ili ništa za specificiranje preciznosti.
- Duljina: neobavezni modifikator duljine koji određuje veličinu argumenta.
- Specifikator: Specifikator formata pretvorbe. Dostupni specifikatori formata su sljedeći:
Specifikator formata Opis % Ispisi% c Napisuje jedan lik s Zapisuje niz znakova d ili ja Pretvara potpisani cijeli broj u decimalni prikaz o Pretvara nepotpisani cijeli broj u osminski prikaz X ili x Pretvara nepotpisani cijeli broj u heksadecimalni prikaz u Pretvara cijeli broj bez potpisa u decimalni prikaz Ž ili ž Pretvara broj s pomičnom zarezom u decimalni prikaz E ili e Pretvara broj s pomičnom zarezom u zapis decimalnog eksponenta A ili a Pretvara broj s pomičnom zarezom u heksadecimalni eksponent G ili g Pretvara broj s pomičnom zarezom u decimalni ili decimalni zapis eksponenta n Vraća broj znakova do sada napisanih ovim pozivom funkcije. Rezultat se zapisuje u vrijednost na koju ukazuje argument str Napisuje implementacijski definirani slijed znakova koji definira pokazivač. Dakle, općeniti format specifikatora formata je:
%(flags)(width)(.precision)(length)specifier
- vlist: Popis argumenata koji sadrže podatke za upis.
vsnprintf () Povratna vrijednost
- Ako je uspješna,
vsnprintf()
funkcija vraća broj napisanih znakova. - U slučaju neuspjeha vraća negativnu vrijednost.
- Kada je duljina formatiranog niza veća od buf_size, treba ga skratiti. U takvim slučajevima
vsnprintf()
funkcija vraća ukupan broj znakova, isključujući završavajući null znak koji bi bio napisan da nije nametnuto ograničenje buf_size.
Primjer: Kako funkcionira funkcija 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; )
Kada pokrenete program, izlaz će biti:
C ++ je stvorio Bjarne