C ++ snprintf () - C ++ Standardbibliotek

Funktionen snprintf () i C ++ bruges til at skrive en formateret streng til tegnstrengebuffer.

I modsætning til sprintf () angives det maksimale antal tegn, der kan skrives til bufferen snprintf().

snprintf () prototype

 int snprintf (char * buffer, size_t buf_size, const char * format,…);

Den snprintf()funktion skriver strengen peget på af formatet til buffer. Det maksimale antal tegn, der kan skrives, er (buf_size-1).

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-markør.

Det er defineret i header-fil.

snprintf () Parametre

  • buffer: Markør til strengbufferen for at skrive resultatet.
  • buf_size: Angiv det maksimale antal tegn, der skal skrives til bufferen, som er buf_size-1.
  • 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

  • …: Andre yderligere argumenter, der specificerer de data, der skal udskrives. De forekommer i en sekvens i henhold til formatspecifikatoren.

snprintf () Returværdi

Hvis det lykkes, snprintf()returnerer funktionen antallet af tegn, der ville være skrevet til tilstrækkelig stor buffer eksklusive det afsluttende nultegn. Ved fejl returnerer den en negativ værdi.

Outputtet anses for at være skrevet fuldstændigt, hvis og kun hvis den returnerede værdi ikke er negativ og mindre end buf_size.

Eksempel: Sådan fungerer funktionen snprintf ()

 #include #include using namespace std; int main() ( char buffer(100); int retVal, buf_size = 100; char name() = "Max"; int age = 23; retVal = snprintf(buffer, buf_size, "Hi, I am %s and I am %d years old", name, age); if (retVal> 0 && retVal < buf_size) ( cout << buffer << endl; cout << "Number of characters written = " << retVal << endl; ) else cout << "Error writing to buffer" << endl; return 0; )

Når du kører programmet, vil output være:

 Hej, jeg er Max og jeg er 23 år. Antal tegn skrevet = 34

Interessante artikler...