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

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

Funkce vswprintf () je definována v hlavičkovém souboru.

prototyp vswprintf ()

 int vswprintf (wchar_t * buffer, size_t buf_size, const wchar_t * formát, va_list vlist);

Funkce vswprintf () zapíše široký řetězec, na který ukazuje formát, do vyrovnávací paměti širokého řetězce. Do (buf_size-1)vyrovnávací paměti se zapisuje maximum širokých znaků, za kterými následuje prázdný široký znak.

Formát širokého řetězce může obsahovat specifikátory formátu začínající na%, které jsou nahrazeny hodnotami proměnných, které jsou předávány jako seznam vlist.

Parametry vswprintf ()

  • buffer: Ukazatel na široký řetězec bufferu pro zápis výsledku.
  • buf_size: Maximální počet širokých znaků k zápisu, včetně ukončovacího prázdného širokého znaku.
  • format: Ukazatel na null ukončený široký řetězec, který je zapsán do vyrovnávací paměti. 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í po formátu.
    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átory formátu
    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:
     Specifikátor% (příznaky) (šířka) (. přesnost) (délka)
  • vlist: Seznam argumentů obsahujících data k zápisu.

vswprintf () Vrátit hodnotu

  • Pokud je úspěšná, funkce vswprintf () vrací počet zapsaných širokých znaků bez ukončovacího prázdného širokého znaku.
  • Záporná hodnota je vrácena, pokud dojde k chybě kódování nebo pokud je počet generovaných znaků stejný nebo větší než buf_size.

Příklad: Jak funguje funkce vswprintf ()?

 #include #include #include void write(wchar_t* buffer, size_t buf_size, const wchar_t *fmt,… ) ( va_list args; va_start(args, fmt); vswprintf(buffer, buf_size, fmt, args); va_end(args); ) int main () ( wchar_t str() = L"u0684 u06b1 u06aa u06a3 u0684"; wchar_t buffer(50); setlocale(LC_ALL, "en_US.UTF-8"); write(buffer, 50, L"Arabic Letters: %ls", str); wprintf(L"%ls", buffer); return 0; )

Když spustíte program, do example.txt se zapíše následující:

 Arabská písmena: ڄ ڱ ڪ ڣ ڄ

Zajímavé články...