C ++ snprintf () - štandardná knižnica C ++

Funkcia snprintf () v C ++ sa používa na zápis formátovaného reťazca do vyrovnávacej pamäte reťazca znakov.

Na rozdiel od sprintf () je maximálny počet znakov, ktoré je možné zapísať do medzipamäte, špecifikovaný v snprintf().

prototyp snprintf ()

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

snprintf()Funkcia zapíše reťazec, na ktorý ukazuje formát do buffera. Maximálny počet znakov, ktoré je možné zapísať, je (buf_size-1).

Po napísaní znakov sa pridá zakončovací nulový znak. Ak sa buf_size rovná nule, nič sa nezapíše a vyrovnávacia pamäť môže byť nulový ukazovateľ.

Je definované v hlavičkovom súbore.

parametre snprintf ()

  • medzipamäť: Ukazovateľ na medzipamäť reťazca na zapísanie výsledku.
  • buf_size: Zadajte maximálny počet znakov, ktoré sa majú zapísať do vyrovnávacej pamäte, ktorá je buf_size-1.
  • formát: Ukazovateľ na reťazec s nulovým zakončením, ktorý sa zapíše do toku súborov. Skladá sa zo znakov spolu s voliteľnými špecifikátormi formátu začínajúcich na%.

    Špecifikátory formátu sú nahradené hodnotami príslušných premenných, ktoré nasledujú za formátovacím reťazcom.

    Špecifikátor formátu má tieto časti:

    • Vedúci znak%
    • Príznaky: Voliteľný jeden alebo viac príznakov, ktoré upravujú správanie pri konverzii.
      • -: Zarovnanie doľava k výsledku v rámci poľa. Štandardne je to zarovnané doprava.
      • +: Znamienko výsledku sa pripája na začiatok hodnoty, a to aj v prípade pozitívnych výsledkov.
      • Medzera: Ak nie je žiadny znak, na začiatok výsledku sa pripojí medzera.
      • #: Vykoná sa alternatívna forma konverzie.
      • 0: Používa sa na celé číslo a číslo s pohyblivou rádovou čiarkou. Na vyplnenie čísel namiesto medzery sa používajú úvodné nuly.
    • Šírka: Voliteľná * alebo celočíselná hodnota používaná na zadanie poľa minimálnej šírky.
    • Presnosť: Nepovinné pole pozostávajúce z a. za ktorými nasleduje * alebo celé číslo alebo nič, aby sa určila presnosť.
    • Dĺžka: Voliteľný modifikátor dĺžky, ktorý určuje veľkosť argumentu.
    • Špecifikátor: Špecifikátor formátu prevodu. Dostupné špecifikátory formátu sú:
      Špecifikátor formátu Popis
      % Vytlačí%
      c Píše jeden znak
      s Zapíše reťazec znakov
      d alebo i Skonvertuje celé číslo so znamienkom na desatinné miesto
      o Skonvertuje celé číslo bez znamienka na osmičkovú reprezentáciu
      X alebo x Skonvertuje celé číslo bez znamienka na hexadecimálne vyjadrenie
      u Skonvertuje celé číslo bez znamienka na desatinné miesto
      F alebo f Prevedie číslo s pohyblivou rádovou čiarkou na desatinné miesto
      E alebo e Skonvertuje číslo s pohyblivou desatinnou čiarkou na desatinný zápis exponentu
      A alebo a Prevedie číslo s pohyblivou rádovou čiarkou na hexadecimálny exponent
      G alebo g Prevedie číslo s pohyblivou rádovou čiarkou na desatinný alebo desatinný zápis exponentu
      n Vráti počet znakov doteraz napísaných týmto volaním funkcie. Výsledok sa zapíše na hodnotu, na ktorú poukazuje argument
      p Zapíše postupnosť znakov definujúcich implementáciu, ktorá definuje ukazovateľ.

      Všeobecný formát špecifikátora formátu je teda: %(flags)(width)(.precision)(length)specifier

  • …: Ďalšie ďalšie argumenty určujúce údaje, ktoré sa majú vytlačiť. Vyskytujú sa v poradí podľa špecifikátora formátu.

snprintf () Vrátiť hodnotu

Ak je úspešná, snprintf()funkcia vráti počet znakov, ktoré by boli zapísané pre dostatočne veľkú vyrovnávaciu pamäť okrem ukončovacieho nulového znaku. Pri zlyhaní vráti zápornú hodnotu.

Výstup sa považuje za zapísaný úplne, len ak je vrátená hodnota nezáporná a menšia ako buf_size.

Príklad: Ako funguje funkcia 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; )

Po spustení programu bude výstup:

 Ahoj, som Max a mám 23 rokov. Počet napísaných znakov = 34

Zaujímavé články...