Funzione di libreria C - vsprintf ()

Descrizione

La funzione di libreria C. int vsprintf(char *str, const char *format, va_list arg) invia l'output formattato a una stringa utilizzando un elenco di argomenti passato ad essa.

Dichiarazione

Di seguito è riportata la dichiarazione per la funzione vsprintf ().

int vsprintf(char *str, const char *format, va_list arg)

Parametri

  • str - Questo è l'array di elementi char in cui deve essere memorizzata la stringa risultante.

  • format- Questa è la stringa C che contiene il testo da scrivere in str. Opzionalmente può contenere tag di formato incorporati che vengono sostituiti dai valori specificati negli argomenti aggiuntivi successivi e vengono formattati come richiesto. Prototipo di tag di formato -%[flags][width][.precision][length]specifier, come spiegato di seguito -

Sr.No. Specifier e output
1

c

Carattere

2

d or i

Numero intero decimale con segno

3

e

Notazione scientifica (mantissa / esponente) utilizzando il carattere e

4

E

Notazione scientifica (mantissa / esponente) utilizzando il carattere E

5

f

Virgola mobile decimale

6

g

Utilizza il più breve tra% e o% f.

7

G

Utilizza il più breve tra% E o% f

8

o

Firmato ottale

9

s

Stringa di caratteri

10

u

Numero intero decimale senza segno

11

x

Intero esadecimale senza segno

12

X

Intero esadecimale senza segno (lettere maiuscole)

13

p

Indirizzo del puntatore

14

n

Niente stampato

15

%

Carattere

Sr.No. Bandiere e descrizione
1

-

Giustifica a sinistra entro la larghezza del campo data; La giustificazione a destra è l'impostazione predefinita (vedere il specificatore secondario della larghezza).

2

+

Forza a far precedere il risultato con un segno più o meno (+ o -) anche per i numeri positivi. Per impostazione predefinita, solo i numeri negativi sono preceduti dal segno -ve.

3

(space)

Se non verrà scritto alcun segno, viene inserito uno spazio vuoto prima del valore.

4

#

Utilizzato con gli specificatori o, x o X, il valore è preceduto rispettivamente da 0, 0x o 0X per valori diversi da zero. Utilizzato con e, E ed f, forza l'output scritto a contenere un punto decimale anche se non segue alcuna cifra. Per impostazione predefinita, se non seguono cifre, non viene scritto alcun punto decimale. Usato con g o G, il risultato è lo stesso di e o E ma gli zeri finali non vengono rimossi.

5

0

Inserisce a sinistra il numero con zero (0) invece di spazi, dove è specificato il riempimento (vedere il sotto-specificatore di larghezza).

Sr.No. Larghezza e descrizione
1

(number)

Numero minimo di caratteri da stampare. Se il valore da stampare è inferiore a questo numero, il risultato viene riempito con spazi vuoti. Il valore non viene troncato anche se il risultato è maggiore.

2

*

La larghezza non è specificata nella stringa di formato, ma come argomento di un valore intero aggiuntivo che precede l'argomento che deve essere formattato.

Sr.No. .precisione e descrizione
1

.number

Per gli specificatori di numeri interi (d, i, o, u, x, X) - la precisione specifica il numero minimo di cifre da scrivere. Se il valore da scrivere è inferiore a questo numero, il risultato viene riempito con zeri iniziali. Il valore non viene troncato anche se il risultato è più lungo. Una precisione pari a 0 significa che non viene scritto alcun carattere per il valore 0. Per gli specificatori e, E ed f - questo è il numero di cifre da stampare dopo il punto decimale. Per gli specificatori ge G: questo è il numero massimo di cifre significative da stampare. Per s - questo è il numero massimo di caratteri da stampare. Per impostazione predefinita, tutti i caratteri vengono stampati finché non viene incontrato il carattere nullo finale. Per il tipo c - non ha effetto. Quando non viene specificata alcuna precisione, il valore predefinito è 1. Se il periodo viene specificato senza un valore esplicito per la precisione, viene utilizzato 0.

2

.*

La precisione non è specificata nella stringa di formato, ma come un argomento di valore intero aggiuntivo che precede l'argomento che deve essere formattato.

Sr.No. Lunghezza e descrizione
1

h

L'argomento viene interpretato come int breve o int breve senza segno (si applica solo a specificatori interi: i, d, o, u, x e X).

2

l

L'argomento viene interpretato come un int lungo o un int lungo senza segno per gli specificatori interi (i, d, o, u, x e X) e come un carattere o una stringa di caratteri ampi per gli specificatori c e s.

3

L

L'argomento viene interpretato come un doppio lungo (si applica solo agli specificatori in virgola mobile - e, E, f, ge G).

  • arg- Un oggetto che rappresenta l'elenco degli argomenti delle variabili. Questo dovrebbe essere inizializzato dalla macro va_start definita in <stdarg>.

Valore di ritorno

In caso di successo, viene restituito il numero totale di caratteri scritti, altrimenti viene restituito un numero negativo.

Esempio

L'esempio seguente mostra l'utilizzo della funzione vsprintf ().

#include <stdio.h>
#include <stdarg.h>

char buffer[80];
int vspfunc(char *format, ...) {
   va_list aptr;
   int ret;

   va_start(aptr, format);
   ret = vsprintf(buffer, format, aptr);
   va_end(aptr);

   return(ret);
}

int main () {
   int i = 5;
   float f = 27.0;
   char str[50] = "tutoriaspoint.com";

   vspfunc("%d %f %s", i, f, str);
   printf("%s\n", buffer);
   
   return(0);
}

Compiliamo ed eseguiamo il programma sopra, questo produrrà il seguente risultato:

5 27.000000 tutoriaspoint.com