Funksjonen vsnprintf () i C ++ brukes til å skrive en formatert streng til en strengbuffer.
I motsetning til vsprintf () er det maksimale antall tegn som kan skrives til bufferen spesifisert i vsnprintf()
.
vsnprintf () prototype
int vsnprintf (char * buffer, size_t buf_size, const char * format, va_list vlist);
Den vsnprintf()
funksjonen skriver strengen peker til formatet til en tegnstreng buffer. Maksimalt antall tegn som kan skrives er buf_size. Etter at tegnene er skrevet, legges det til et avsluttende nulltegn. Hvis buf_size er lik null, skrives ingenting, og buffer kan være en nullpeker.
Strengformatet kan inneholde formatspesifikatorer som begynner med% som erstattes av verdiene til variablene som sendes som en liste-liste.
Det er definert i topptekstfilen.
vsnprintf () Parametere
- buffer: peker til en tegnstreng for å skrive resultatet.
- buf_size: Maksimalt antall tegn å skrive.
- format: peker til en null avsluttet streng som skrives til filstrømmen. Den består av tegn sammen med valgfrie formatspesifikatorer som begynner med%.
Formatspesifikatorene erstattes av verdiene til respektive variabler som følger formatstrengen.
Formatspesifikatoren har følgende deler:
- Et ledende% tegn
- Flagg: Valgfritt ett eller flere flagg som endrer konverteringsadferden.
- -: Venstre rettferdiggjør resultatet innenfor feltet. Som standard er det rettferdiggjort.
- +: Tegn på resultatet er festet til begynnelsen av verdien, selv for positive resultater.
- Mellomrom: Hvis det ikke er noe tegn, er et mellomrom festet til begynnelsen av resultatet.
- #: En alternativ form for konvertering utføres.
- 0: Den brukes til heltall og flytende nummer. Ledende nuller brukes til å putte tallene i stedet for mellomrom.
- Bredde: En valgfri * eller heltallverdi som brukes til å spesifisere minimumsbreddefelt.
- Presisjon: Et valgfritt felt som består av en. etterfulgt av * eller heltall eller ingenting for å spesifisere presisjonen.
- Lengde: En valgfri lengdemodifikator som spesifiserer størrelsen på argumentet.
- Spesifikator: En konverteringsformatspesifikator. De tilgjengelige formatspesifikasjonene er som følger:
Format Spesifikator Beskrivelse % Skriver ut% c Skriver et enkelt tegn s Skriver en karakterstreng d eller i Konverterer et signert heltall til desimalrepresentasjon o Konverterer et usignert heltall til oktal representasjon X eller x Konverterer et usignert heltall til heksadesimal representasjon u Konverterer et usignert heltall til desimalrepresentasjon F eller f Konverterer flytende nummer til desimalrepresentasjonen E eller e Konverterer flytende nummer til desimaleksponentnotasjonen A eller a Konverterer flytende nummer til den heksadesimale eksponenten G eller g Konverterer flytende nummer til enten desimal- eller desimaleksponentnotasjon n Returnerer antall tegn som hittil er skrevet av denne samtalen til funksjonen. Resultatet skrives til den verdien argumentet peker på s Skriver en implementeringsdefinert tegnsekvens som definerer en peker. Så det generelle formatet til formatspesifikatoren er:
%(flags)(width)(.precision)(length)specifier
- vlist: En liste med argumenter som inneholder dataene du skal skrive.
vsnprintf () Returverdi
- Hvis det lykkes,
vsnprintf()
returnerer funksjonen antall tegn som er skrevet. - Ved feil returnerer den en negativ verdi.
- Når lengden på den formaterte strengen er større enn buf_size, må den avkortes. I slike tilfeller
vsnprintf()
returnerer funksjonen det totale antallet tegn unntatt det avsluttende nulltegnet som ville blitt skrevet, hvis buf_size-grensen ikke ble pålagt.
Eksempel: Hvordan vsnprintf () fungerer
#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; )
Når du kjører programmet, vil utdataene være:
C ++ ble opprettet av Bjarne