C ++ snprintf () - C ++ standaardbibliotheek

De functie snprintf () in C ++ wordt gebruikt om een ​​opgemaakte tekenreeks naar tekenreeksbuffer te schrijven.

In tegenstelling tot sprintf (), wordt het maximum aantal tekens dat naar de buffer kan worden geschreven gespecificeerd in snprintf().

snprintf () prototype

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

De snprintf()functie schrijft de string waarnaar het formaat verwijst naar de buffer. Het maximale aantal tekens dat kan worden geschreven is (buf_size-1).

Nadat de tekens zijn geschreven, wordt een afsluitend nul-teken toegevoegd. Als buf_size gelijk is aan nul, wordt er niets geschreven en kan de buffer een null-pointer zijn.

Het wordt gedefinieerd in het header-bestand.

snprintf () Parameters

  • buffer: Pointer naar de stringbuffer om het resultaat te schrijven.
  • buf_size: Specificeer het maximale aantal tekens dat naar de buffer moet worden geschreven, dit is buf_size-1.
  • format: Pointer naar een met null beëindigde string die naar de bestandsstroom wordt geschreven. Het bestaat uit tekens samen met optionele indelingsspecificaties die beginnen met%.

    De formaatspecificaties worden vervangen door de waarden van de respectievelijke variabelen die volgen op de formaatreeks.

    De formaatspecificatie heeft de volgende onderdelen:

    • Een toonaangevend% -teken
    • Vlaggen: Optioneel een of meer vlaggen die het conversiegedrag wijzigen.
      • -: Links uitvullen van het resultaat binnen het veld. Standaard is het goed gerechtvaardigd.
      • +: Het teken van het resultaat wordt aan het begin van de waarde gehecht, zelfs voor positieve resultaten.
      • Spatie: als er geen teken is, wordt er een spatie aan het begin van het resultaat toegevoegd.
      • #: Er wordt een alternatieve vorm van conversie uitgevoerd.
      • 0: Het wordt gebruikt voor integer en drijvende-kommagetallen. Voorloopnullen worden gebruikt om de cijfers in plaats van de spatie te vullen.
    • Breedte: een optionele * of geheel getal die wordt gebruikt om een ​​veld met een minimale breedte op te geven.
    • Precisie: een optioneel veld bestaande uit een. gevolgd door * of geheel getal of niets om de precisie te specificeren.
    • Lengte: een optionele lengtemodificator die de grootte van het argument aangeeft.
    • Specifier: een specificatie van het conversieformaat. De beschikbare formaatspecificaties zijn als volgt:
      Formaatspecificatie Omschrijving
      % Afdrukken%
      c Schrijft een enkel teken
      s Schrijft een tekenreeks
      d of i Converteert een geheel getal met teken naar een decimale weergave
      O Converteert een geheel getal zonder teken naar een octale weergave
      X of x Converteert een geheel getal zonder teken naar een hexadecimale weergave
      u Converteert een geheel getal zonder teken naar een decimale weergave
      F of f Converteert een getal met een drijvende komma naar de decimale weergave
      E of e Converteert een getal met een drijvende komma naar de decimale exponentnotatie
      A of een Converteert drijvende-kommagetal naar de hexadecimale exponent
      G of g Converteert drijvende-kommagetal naar decimale of decimale exponentnotatie
      n Retourneert het aantal tekens dat tot dusver door deze aanroep naar de functie is geschreven. Het resultaat wordt geschreven naar de waarde waarnaar het argument verwijst
      p Schrijft een door de implementatie gedefinieerde tekenreeks die een pointer definieert.

      Dus het algemene formaat van de formaatspecificatie is: %(flags)(width)(.precision)(length)specifier

  • …: Andere aanvullende argumenten die de gegevens specificeren die moeten worden afgedrukt. Ze komen voor in een reeks volgens de formaatspecificatie.

snprintf () Retourwaarde

Als dit lukt, snprintf()retourneert de functie het aantal tekens dat zou zijn geschreven voor een voldoende grote buffer, exclusief het afsluitende null-teken. Bij een storing wordt een negatieve waarde geretourneerd.

De uitvoer wordt als volledig geschreven beschouwd als en alleen als de geretourneerde waarde niet-negatief is en kleiner is dan buf_size.

Voorbeeld: hoe snprintf () -functie werkt

 #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; )

Wanneer u het programma uitvoert, is de uitvoer:

 Hallo, ik ben Max en ik ben 23 jaar. Aantal geschreven karakters = 34

Interessante artikelen...