Função de biblioteca C - vsprintf ()

Descrição

A função da biblioteca C int vsprintf(char *str, const char *format, va_list arg) envia saída formatada para uma string usando uma lista de argumentos passada a ela.

Declaração

A seguir está a declaração para a função vsprintf ().

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

Parâmetros

  • str - Esta é a matriz de elementos char onde a string resultante deve ser armazenada.

  • format- Esta é a string C que contém o texto a ser escrito no str. Ele pode conter opcionalmente tags de formato incorporadas que são substituídas pelos valores especificados em argumentos adicionais subsequentes e são formatadas conforme solicitado. Protótipo de tags de formato -%[flags][width][.precision][length]specifier, conforme explicado abaixo -

Sr. Não. Especificador e saída
1

c

Personagem

2

d or i

Inteiro decimal assinado

3

e

Notação científica (mantissa / expoente) usando o caractere e

4

E

Notação científica (mantissa / expoente) usando o caractere E

5

f

Ponto flutuante decimal

6

g

Usa o menor de% e ou% f.

7

G

Usa o menor de% E ou% f

8

o

Octal assinado

9

s

Seqüência de caracteres

10

u

Inteiro decimal sem sinal

11

x

Inteiro hexadecimal sem sinal

12

X

Inteiro hexadecimal sem sinal (letras maiúsculas)

13

p

Endereço do ponteiro

14

n

Nada impresso

15

%

Personagem

Sr. Não. Sinalizadores e descrição
1

-

Justificar à esquerda dentro da largura de campo fornecida; A justificação à direita é o padrão (consulte o subespecificador de largura).

2

+

Força a preceder o resultado com um sinal de mais ou menos (+ ou -), mesmo para números positivos. Por padrão, apenas números negativos são precedidos por um sinal -ve.

3

(space)

Se nenhum sinal for escrito, um espaço em branco é inserido antes do valor.

4

#

Usado com especificadores o, x ou X, o valor é precedido por 0, 0x ou 0X respectivamente para valores diferentes de zero. Usado com e, E e f, força a saída escrita a conter um ponto decimal, mesmo que nenhum dígito se siga. Por padrão, se nenhum dígito seguir, nenhum ponto decimal é escrito. Usado com g ou G, o resultado é o mesmo que com e ou E, mas os zeros finais não são removidos.

5

0

Insere o número à esquerda com zeros (0) em vez de espaços, onde o preenchimento é especificado (consulte o subespecificador de largura).

Sr. Não. Largura e Descrição
1

(number)

Número mínimo de caracteres a serem impressos. Se o valor a ser impresso for menor que esse número, o resultado será preenchido com espaços em branco. O valor não é truncado, mesmo se o resultado for maior.

2

*

A largura não é especificada na string de formato, mas como um argumento de valor inteiro adicional precedendo o argumento que deve ser formatado.

Sr. Não. .precisão e descrição
1

.number

Para especificadores de inteiros (d, i, o, u, x, X) - a precisão especifica o número mínimo de dígitos a serem escritos. Se o valor a ser escrito for menor que este número, o resultado será preenchido com zeros à esquerda. O valor não é truncado, mesmo se o resultado for mais longo. Uma precisão de 0 significa que nenhum caractere é escrito para o valor 0. Para especificadores e, E e f - este é o número de dígitos a serem impressos após o ponto decimal. Para especificadores ge G - Este é o número máximo de dígitos significativos a serem impressos. Para s - este é o número máximo de caracteres a serem impressos. Por padrão, todos os caracteres são impressos até que o caractere nulo final seja encontrado. Para tipo c - não tem efeito. Quando nenhuma precisão é especificada, o padrão é 1. Se o período for especificado sem um valor explícito de precisão, 0 será assumido.

2

.*

A precisão não é especificada na string de formato, mas como um argumento de valor inteiro adicional precedendo o argumento que deve ser formatado.

Sr. Não. Comprimento e descrição
1

h

O argumento é interpretado como um int curto ou int curto sem sinal (aplica-se apenas a especificadores de inteiros - i, d, o, u, x e X).

2

l

O argumento é interpretado como um int longo ou um int longo sem sinal para especificadores de inteiro (i, d, o, u, x e X) e como um caractere largo ou string de caracteres largos para os especificadores c e s.

3

L

O argumento é interpretado como um duplo longo (aplica-se apenas a especificadores de ponto flutuante - e, E, f, ge G).

  • arg- Um objeto que representa a lista de argumentos de variáveis. Isso deve ser inicializado pela macro va_start definida em <stdarg>.

Valor de retorno

Se for bem-sucedido, o número total de caracteres escritos é retornado, caso contrário, um número negativo é retornado.

Exemplo

O exemplo a seguir mostra o uso da função 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);
}

Vamos compilar e executar o programa acima, isso produzirá o seguinte resultado -

5 27.000000 tutoriaspoint.com