Funktionen vsnprintf () i C ++ bruges til at skrive en formateret streng til en strengbuffer.
I modsætning til vsprintf () specificeres det maksimale antal tegn, der kan skrives til bufferen vsnprintf()
.
vsnprintf () prototype
int vsnprintf (char * buffer, size_t buf_size, const char * format, va_list vlist);
Den vsnprintf()
funktion skriver strengen peges på af format til en tegnstreng buffer. Det maksimale antal tegn, der kan skrives, er buf_size. Når tegnene er skrevet, tilføjes et afsluttende null-tegn. Hvis buf_size er lig med nul, skrives der intet, og buffer kan være en nul pointer.
Strengformatet kan indeholde formatspecifikatorer, der starter med%, der erstattes af værdierne for variabler, der sendes som en liste vlist.
Det er defineret i header-fil.
vsnprintf () Parametre
- buffer: Markør til en tegnstreng for at skrive resultatet.
- buf_size: Maksimalt antal tegn, der skal skrives.
- format: Markør til en null afsluttet streng, der skrives til filstrømmen. Den består af tegn sammen med valgfri formatspecifikationer, der starter med%.
Formatspecifikationerne erstattes af værdierne for de respektive variabler, der følger formatstrengen.
Formatspecifikatoren har følgende dele:
- Et førende% tegn
- Flag: Valgfrit et eller flere flag, der ændrer konverteringsadfærden.
- -: Venstre retfærdiggør resultatet inden for feltet. Som standard er det retfærdiggjort.
- +: Tegn på resultatet er knyttet til begyndelsen af værdien, selv for positive resultater.
- Mellemrum: Hvis der ikke er noget tegn, er der knyttet et mellemrum til begyndelsen af resultatet.
- #: En alternativ form for konvertering udføres.
- 0: Det bruges til heltal og flydende nummer. Førende nuller bruges til at padde numrene i stedet for mellemrum.
- Bredde: En valgfri * eller heltalsværdi, der bruges til at angive et minimumsbreddefelt.
- Præcision: Et valgfrit felt bestående af en. efterfulgt af * eller heltal eller intet for at specificere præcisionen.
- Længde: En valgfri længdemodifikator, der angiver størrelsen på argumentet.
- Specifier: En konverteringsformatspecifikator. De tilgængelige formatspecifikatorer er som følger:
Format Specifier Beskrivelse % Udskriver% c Skriver et enkelt tegn s Skriver en tegnstreng d eller i Konverterer et underskrevet heltal til decimalrepræsentation o Konverterer et usigneret heltal til oktal repræsentation X eller x Konverterer et usigneret heltal til hexadecimal repræsentation u Konverterer et usigneret heltal til decimalrepræsentation F eller f Konverterer flydende nummer til decimalrepræsentationen E eller e Konverterer flydende nummer til decimaleksponentnotationen A eller a Konverterer flydende nummer til den hexadecimale eksponent G eller g Konverterer flydende nummer til enten decimal- eller decimaleksponentnotation n Returnerer antallet af tegn, der hidtil er skrevet af dette opkald, til funktionen. Resultatet skrives til den værdi, som argumentet peger på s Skriver en implementeringsdefineret tegnsekvens, der definerer en markør. Så det generelle format for formatspecifikator er:
%(flags)(width)(.precision)(length)specifier
- vlist: En liste over argumenter, der indeholder de data, der skal skrives.
vsnprintf () Returværdi
- Hvis det lykkes,
vsnprintf()
returnerer funktionen antallet af tegn, der er skrevet. - Ved fejl returnerer den en negativ værdi.
- Når længden af den formaterede streng er større end buf_size, skal den afkortes. I sådanne tilfælde
vsnprintf()
returnerer funktionen det samlede antal tegn eksklusive det afsluttende nultegn, der ville være skrevet, hvis grænsen for buf_size ikke blev 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 kører programmet, vil output være:
C ++ blev oprettet af Bjarne