C ++ snprintf () - Libreria standard C ++

La funzione snprintf () in C ++ viene utilizzata per scrivere una stringa formattata nel buffer delle stringhe di caratteri.

A differenza di sprintf (), il numero massimo di caratteri che possono essere scritti nel buffer è specificato in snprintf().

prototipo snprintf ()

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

La snprintf()funzione scrive nel buffer la stringa a cui punta il formato. Il numero massimo di caratteri che è possibile scrivere è (buf_size-1).

Dopo che i caratteri sono stati scritti, viene aggiunto un carattere nullo di terminazione. Se buf_size è uguale a zero, non viene scritto nulla e buffer può essere un puntatore nullo.

È definito nel file di intestazione.

parametri snprintf ()

  • buffer: puntatore al buffer di stringa per scrivere il risultato.
  • buf_size: specifica il numero massimo di caratteri da scrivere nel buffer che è buf_size-1.
  • format: puntatore a una stringa terminata da null che viene scritta nel flusso di file. Consiste di caratteri insieme a identificatori di formato opzionali che iniziano con%.

    Gli identificatori di formato vengono sostituiti dai valori delle rispettive variabili che seguono la stringa di formato.

    L'identificatore di formato ha le seguenti parti:

    • Un segno di% iniziale
    • Flag: uno o più flag opzionali che modificano il comportamento di conversione.
      • -: Giustifica a sinistra il risultato all'interno del campo. Per impostazione predefinita è giustificato a destra.
      • +: Il segno del risultato viene aggiunto all'inizio del valore, anche in caso di risultati positivi.
      • Spazio: se non è presente alcun segno, viene aggiunto uno spazio all'inizio del risultato.
      • #: Viene eseguita una forma alternativa di conversione.
      • 0: viene utilizzato per numeri interi e in virgola mobile. Gli zeri iniziali vengono utilizzati per riempire i numeri anziché lo spazio.
    • Larghezza: un valore intero * o facoltativo utilizzato per specificare il campo di larghezza minima.
    • Precisione: un campo opzionale costituito da un file. seguito da * o intero o niente per specificare la precisione.
    • Lunghezza: un modificatore di lunghezza opzionale che specifica la dimensione dell'argomento.
    • Specifier: un identificatore del formato di conversione. Gli identificatori di formato disponibili sono i seguenti:
      Identificatore di formato Descrizione
      % Stampe%
      c Scrive un singolo carattere
      S Scrive una stringa di caratteri
      do i Converte un intero con segno in una rappresentazione decimale
      o Converte un intero senza segno in una rappresentazione ottale
      X o x Converte un intero senza segno in una rappresentazione esadecimale
      u Converte un intero senza segno in una rappresentazione decimale
      F o f Converte il numero a virgola mobile nella rappresentazione decimale
      E o e Converte il numero a virgola mobile nella notazione esponente decimale
      A o a Converte il numero a virgola mobile nell'esponente esadecimale
      G o g Converte il numero a virgola mobile in notazione esponente decimale o decimale
      n Restituisce il numero di caratteri scritti finora da questa chiamata alla funzione. Il risultato viene scritto nel valore puntato dall'argomento
      p Scrive una sequenza di caratteri definita dall'implementazione che definisce un puntatore.

      Quindi il formato generale dell'identificatore di formato è: %(flags)(width)(.precision)(length)specifier

  • …: Altri argomenti aggiuntivi che specificano i dati da stampare. Si verificano in una sequenza in base all'identificatore di formato.

snprintf () Restituisce il valore

In caso di esito positivo, la snprintf()funzione restituisce il numero di caratteri che sarebbero stati scritti per un buffer sufficientemente grande escluso il carattere null di terminazione. In caso di fallimento restituisce un valore negativo.

L'output si considera scritto completamente se e solo se il valore restituito è non negativo e minore di buf_size.

Esempio: come funziona la funzione 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; )

Quando esegui il programma, l'output sarà:

 Ciao, sono Max e ho 23 anni Numero di caratteri scritti = 34

Articoli interessanti...