C ++ snprintf () - Biblioteca standard C ++

Funcția snprintf () în C ++ este utilizată pentru a scrie un șir formatat în bufferul șirului de caractere.

Spre deosebire de sprintf (), numărul maxim de caractere care pot fi scrise în buffer este specificat în snprintf().

snprintf () prototip

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

snprintf()Funcția scrie șirul indicat de format pentru a tampon. Numărul maxim de caractere care poate fi scris este (buf_size-1).

După ce caracterele sunt scrise, se adaugă un caracter nul care se termină. Dacă buf_size este egal cu zero, nu se scrie nimic și tamponul poate fi un indicator nul.

Este definit în fișierul antet.

snprintf () Parametri

  • buffer: Pointer către bufferul șir pentru a scrie rezultatul.
  • buf_size: Specificați numărul maxim de caractere care trebuie scrise în buffer, care este buf_size-1.
  • format: Pointer către un șir terminat nul care este scris în fluxul de fișiere. Se compune din caractere împreună cu specificatori de format opționali începând cu%.

    Specificatorii de format sunt înlocuiți cu valorile variabilelor respective care urmează șirului de format.

    Specificatorul de format are următoarele părți:

    • Un semn de conducere%
    • Semnalizări: opțional unul sau mai multe semnalizatoare care modifică comportamentul de conversie.
      • -: Stânga justifică rezultatul în câmp. În mod implicit, este justificat.
      • +: Semnul rezultatului este atașat la începutul valorii, chiar și pentru rezultate pozitive.
      • Spațiu: dacă nu există niciun semn, un spațiu este atașat la începutul rezultatului.
      • #: Se efectuează o formă alternativă de conversie.
      • 0: Se folosește pentru numărul întreg și numărul cu virgulă mobilă. Zero-urile principale sunt utilizate pentru a tampona numerele în loc de spațiu.
    • Lățime: o valoare opțională * sau întreagă utilizată pentru a specifica câmpul de lățime minimă.
    • Precizie: un câmp opțional format dintr-un. urmat de * sau întreg sau nimic pentru a specifica precizia.
    • Lungime: un modificator opțional de lungime care specifică dimensiunea argumentului.
    • Specificator: un specificator de format de conversie. Specificatorii de format disponibili sunt după cum urmează:
      Specificator de format Descriere
      % % Tipăriri
      c Scrie un singur personaj
      s Scrie un șir de caractere
      d sau i Convertește un număr întreg semnat în reprezentare zecimală
      o Convertește un număr întreg nesemnat în reprezentare octală
      X sau x Convertește un număr întreg nesemnat în reprezentare hexazecimală
      tu Convertește un număr întreg nesemnat în reprezentare zecimală
      F sau f Convertește numărul în virgulă mobilă în reprezentarea zecimală
      E sau e Convertește numărul în virgulă mobilă în notația exponentului zecimal
      A sau a Convertește numărul în virgulă mobilă în exponentul hexazecimal
      G sau g Convertește numărul în virgulă mobilă fie în notație zecimală, fie în exponentă zecimală
      n Returnează numărul de caractere scrise până acum de acest apel către funcție. Rezultatul este scris la valoarea indicată de argument
      p Scrie o secvență de caractere definită de implementare care definește un pointer.

      Deci, formatul general al specificatorului de format este: %(flags)(width)(.precision)(length)specifier

  • …: Alte argumente suplimentare care specifică datele de tipărit. Acestea apar într-o secvență conform specificatorului de format.

snprintf () Valoare returnată

Dacă are succes, snprintf()funcția returnează numărul de caractere care ar fi fost scrise pentru un buffer suficient de mare, cu excepția caracterului nul care se termină. La eșec, returnează o valoare negativă.

Se consideră că rezultatul este scris complet dacă și numai dacă valoarea returnată este non-negativă și mai mică decât buf_size.

Exemplu: Cum funcționează funcția 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; )

Când rulați programul, ieșirea va fi:

 Bună, eu sunt Max și am 23 de ani Număr de caractere scrise = 34

Articole interesante...