C ++ snprintf () - standardní knihovna C ++

Funkce snprintf () v C ++ se používá k zápisu formátovaného řetězce do vyrovnávací paměti řetězce znaků.

Na rozdíl od sprintf () je zadán maximální počet znaků, které lze zapsat do vyrovnávací paměti snprintf().

prototyp snprintf ()

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

snprintf()Funkce zapíše řetězec, na který ukazuje formát do bufferu. Maximální počet znaků, které lze napsat, je (buf_size-1).

Po napsání znaků se přidá ukončovací prázdný znak. Pokud se buf_size rovná nule, nic se nezapíše a buffer může být nulovým ukazatelem.

Je definován v hlavičkovém souboru.

parametry snprintf ()

  • buffer: Ukazatel na řetězec, který zapíše výsledek.
  • buf_size: Zadejte maximální počet znaků, které mají být zapsány do vyrovnávací paměti, což je buf_size-1.
  • formát: Ukazatel na řetězec s nulovým zakončením, který je zapsán do proudu souboru. Skládá se ze znaků a volitelných specifikátorů formátu začínajících na%.

    Specifikátory formátu jsou nahrazeny hodnotami příslušných proměnných, které následují za formátovacím řetězcem.

    Specifikátor formátu má následující části:

    • Přední znak%
    • Příznaky: Volitelný jeden nebo více příznaků, které upravují chování převodu.
      • -: Vlevo zarovná výsledek v poli. Ve výchozím nastavení je to správně zarovnané.
      • +: Znaménko výsledku je připojeno na začátek hodnoty, a to i pro pozitivní výsledky.
      • Mezera: Pokud není žádná značka, na začátek výsledku se připojí mezera.
      • #: Je provedena alternativní forma převodu.
      • 0: Používá se pro celé číslo a číslo s plovoucí desetinnou čárkou. K vyplnění čísel místo mezery se používají úvodní nuly.
    • Šířka: Volitelná * nebo celočíselná hodnota použitá k určení pole minimální šířky.
    • Přesnost: Volitelné pole skládající se z a. následuje * nebo celé číslo nebo nic k určení přesnosti.
    • Délka: Volitelný modifikátor délky, který určuje velikost argumentu.
    • Specifikátor: Specifikátor formátu převodu. Dostupné specifikátory formátu jsou následující:
      Specifikátor formátu Popis
      % Tisky%
      C Zapíše jeden znak
      s Zapíše řetězec znaků
      d nebo i Převede celé číslo se znaménkem na desítkové vyjádření
      Ó Převede celé číslo bez znaménka na osmičkovou reprezentaci
      X nebo x Převede celé číslo bez znaménka na šestnáctkové vyjádření
      u Převede celé číslo bez znaménka na desítkové vyjádření
      F nebo f Převede číslo s plovoucí desetinnou čárkou na desítkové vyjádření
      E nebo e Převede číslo s plovoucí desetinnou čárkou na desítkovou notaci exponentu
      A nebo a Převede číslo s plovoucí desetinnou čárkou na hexadecimální exponent
      G nebo g Převede číslo s plovoucí desetinnou čárkou na desítkovou nebo desítkovou notaci
      n Vrátí počet znaků doposud zapsaných tímto voláním funkce. Výsledek se zapíše na hodnotu, na kterou odkazuje argument
      p Zapíše posloupnost znaků definovanou implementací definující ukazatel.

      Obecný formát specifikátoru formátu je tedy: %(flags)(width)(.precision)(length)specifier

  • …: Další další argumenty specifikující data, která mají být vytištěna. Vyskytují se v pořadí podle specifikátoru formátu.

snprintf () Vrátit hodnotu

Pokud je úspěšná, snprintf()funkce vrací počet znaků, které by byly zapsány pro dostatečně velkou vyrovnávací paměť s výjimkou ukončujícího nulového znaku. Při selhání vrátí zápornou hodnotu.

Výstup se považuje za zapsaný úplně, právě když je vrácená hodnota nezáporná a menší než buf_size.

Příklad: Jak funguje funkce 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; )

Když spustíte program, výstup bude:

 Ahoj, jsem Max a je mi 23 let. Počet napsaných znaků = 34

Zajímavé články...