C ++ snprintf () - C ++ standardna knjižnica

Funkcija snprintf () u jeziku C ++ koristi se za pisanje formatiranog niza u međuspremnik znakovnih nizova.

Za razliku od sprintf (), maksimalan broj znakova koji se mogu upisati u međuspremnik naveden je u snprintf().

prototip snprintf ()

 int snprintf (char * međuspremnik, size_t buf_size, const char * format, …);

snprintf()Funkcija piše string na koji pokazuje formatu učitavati. Maksimalan broj znakova koji se mogu napisati je (buf_size-1).

Nakon pisanja znakova dodaje se završni null znak. Ako je buf_size jednak nuli, ništa se ne zapisuje, a međuspremnik može biti null pokazivač.

Definirano je u datoteci zaglavlja.

snprintf () parametri

  • međuspremnik: pokazivač na međuspremnik niza za pisanje rezultata.
  • buf_size: Navedite maksimalni broj znakova koji će se upisati u međuspremnik, a to je buf_size-1.
  • format: pokazivač na nulu završeni niz koji je zapisan u tok datoteke. Sastoji se od znakova, zajedno s neobaveznim specifikatorima formata koji počinju s%.

    Specifikatori formata zamjenjuju se vrijednostima odgovarajućih varijabli koje slijede niz formata.

    Specifikator formata ima sljedeće dijelove:

    • Vodeći znak%
    • Zastave: Izborna jedna ili više zastavica koje mijenjaju ponašanje pretvorbe.
      • -: Lijevo opravdajte rezultat unutar polja. Po defaultu je ispravno opravdano.
      • +: Znak rezultata pridružen je početku vrijednosti, čak i za pozitivne rezultate.
      • Razmak: Ako nema znaka, razmak se dodaje na početak rezultata.
      • #: Izvodi se alternativni oblik pretvorbe.
      • 0: Koristi se za cijeli broj i broj s pomičnim zarezom. Vodeće se nule koriste za umetanje brojeva umjesto razmaka.
    • Širina: Izborna * ili cijela vrijednost koja se koristi za specificiranje polja minimalne širine.
    • Preciznost: Izborno polje koje se sastoji od a. nakon čega slijedi * ili cijeli broj ili ništa za specificiranje preciznosti.
    • Duljina: neobavezni modifikator duljine koji određuje veličinu argumenta.
    • Specifikator: Specifikator formata pretvorbe. Dostupni specifikatori formata su sljedeći:
      Specifikator formata Opis
      % Ispisi%
      c Napisuje jedan lik
      s Zapisuje niz znakova
      d ili ja Pretvara potpisani cijeli broj u decimalni prikaz
      o Pretvara nepotpisani cijeli broj u osminski prikaz
      X ili x Pretvara nepotpisani cijeli broj u heksadecimalni prikaz
      u Pretvara cijeli broj bez potpisa u decimalni prikaz
      Ž ili ž Pretvara broj s pomičnom zarezom u decimalni prikaz
      E ili e Pretvara broj s pomičnom zarezom u zapis decimalnog eksponenta
      A ili a Pretvara broj s pomičnom zarezom u heksadecimalni eksponent
      G ili g Pretvara broj s pomičnom zarezom u decimalni ili decimalni zapis eksponenta
      n Vraća broj znakova do sada napisanih ovim pozivom funkcije. Rezultat se zapisuje u vrijednost na koju ukazuje argument
      str Napisuje implementacijski definirani slijed znakova koji definira pokazivač.

      Dakle, općeniti format specifikatora formata je: %(flags)(width)(.precision)(length)specifier

  • …: Ostali dodatni argumenti koji specificiraju podatke za ispis. Javljaju se u slijedu prema specifikatoru formata.

snprintf () Povratna vrijednost

Ako je uspješna, snprintf()funkcija vraća broj znakova koji bi bili napisani za dovoljno velik međuspremnik isključujući završni null znak. U slučaju neuspjeha vraća negativnu vrijednost.

Izlaz se smatra napisanim u potpunosti onda i samo ako je vraćena vrijednost nenegativna i manja od buf_size.

Primjer: Kako funkcionira 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; )

Kada pokrenete program, izlaz će biti:

 Bok, ja sam Max i imam 23 godine Broj napisanih znakova = 34

Zanimljivi članci...