C ++ snprintf () - C ++ standarta bibliotēka

Funkcija snprintf () C ++ tiek izmantota, lai rakstītu formatētu virkni rakstzīmju virknes buferī.

Atšķirībā no sprintf (), maksimālais rakstzīmju skaits, ko var ierakstīt buferī, ir norādīts snprintf().

snprintf () prototips

 int snprintf (char * buferis, size_t buf_size, const char * formāts,…);

snprintf()Funkcija raksta virkni norādīja, ko formātu bufera. Maksimālais rakstāmo rakstzīmju skaits ir (buf_size-1).

Pēc rakstzīmju uzrakstīšanas tiek pievienota beigu nulle rakstzīme. Ja buf_size ir vienāds ar nulli, nekas netiek rakstīts un buferis var būt nulles rādītājs.

Tas ir definēts galvenes failā.

snprintf () parametri

  • buferis: rādītājs virknes buferim, lai uzrakstītu rezultātu.
  • buf_size: norādiet maksimālo rakstzīmju skaitu, kas jāraksta buferī, kas ir buf_size-1.
  • formāts: rādītājs nulles izbeigtai virknei, kas tiek ierakstīta failu straumē. Tas sastāv no rakstzīmēm un izvēles formātu specifikatoriem, kas sākas ar%.

    Formātu specifikatori tiek aizstāti ar attiecīgo mainīgo vērtībām, kas seko formāta virknei.

    Formāta norādītājam ir šādas daļas:

    • Vadošā% zīme
    • Karodziņi: pēc izvēles viens vai vairāki karodziņi, kas maina reklāmguvuma darbību.
      • -: kreisais pamato rezultātu laukā. Pēc noklusējuma tas ir pareizi pamatots.
      • +: Rezultāta zīme ir pievienota vērtības sākumam pat pozitīvu rezultātu iegūšanai.
      • Telpa: ja nav zīmes, rezultāta sākumam tiek pievienota atstarpe.
      • #: Tiek veikta alternatīva konversijas forma.
      • 0: to lieto vesels skaitlis un peldošā komata skaitlis. Ciparu ierakstīšanai, nevis atstarpei, tiek izmantotas nulles.
    • Platums: izvēles * vai vesela skaitļa vērtība, ko izmanto, lai norādītu minimālā platuma lauku.
    • Precizitāte: izvēles lauks, kas sastāv no: seko * vai vesels skaitlis vai nekas, lai precizētu precizitāti.
    • Garums: izvēles garuma modifikators, kas norāda argumenta lielumu.
    • Specifikators: reklāmguvumu formāta specifikators. Pieejamie formātu specifikatori ir šādi:
      Formāta specifikators Apraksts
      % Izdrukas%
      c Raksta vienu rakstzīmi
      s Raksta rakstzīmju virkni
      d vai i Pārvērš parakstītu veselu skaitli decimāldaļā
      o Pārvērš neparakstītu veselu skaitli oktālā attēlojumā
      X vai x Pārvērš neparakstītu veselu skaitli heksadecimālā attēlojumā
      u Pārvērš neparakstītu veselu skaitli decimāldaļā
      F vai f Pārvērš peldošā komata skaitli decimāldaļā
      E vai e Pārvērš peldošā komata skaitli decimāldaļskaitļa eksponenta apzīmējumā
      A vai a Pārvērš peldošā komata skaitli par heksadecimālo eksponentu
      G vai g Pārvērš peldošā komata skaitli decimāldaļās vai decimāldaļās eksponentu apzīmējumos
      n Atgriež funkcijai līdz šim šim izsaukumam rakstīto rakstzīmju skaitu. Rezultāts tiek ierakstīts vērtībā, uz kuru norāda arguments
      lpp Raksta ieviešanā definētu rakstzīmju secību, kas nosaka rādītāju.

      Tātad formāta specifikatora vispārējais formāts ir: %(flags)(width)(.precision)(length)specifier

  • …: Citi papildu argumenti, kas norāda drukājamos datus. Tie notiek secībā pēc formāta norādītāja.

snprintf () Atgriežamā vērtība

Ja tas ir veiksmīgs, snprintf()funkcija atgriež tādu rakstzīmju skaitu, kas būtu rakstīts pietiekami lielam buferim, izņemot beigu nulles rakstzīmi. Neveiksmes gadījumā tā atgriež negatīvu vērtību.

Izvade tiek uzskatīta par pilnībā uzrakstītu tikai tad, ja atgrieztā vērtība nav negatīva un mazāka par buf_size.

Piemērs: Kā darbojas funkcija 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; )

Palaidot programmu, izeja būs:

 Sveiki, es esmu Makss un man ir 23 gadi Rakstīto rakstzīmju skaits = 34

Interesanti raksti...