A função snprintf () em C ++ é usada para gravar uma string formatada no buffer da string de caracteres.
Ao contrário de sprintf (), o número máximo de caracteres que podem ser gravados no buffer é especificado em snprintf()
.
protótipo snprintf ()
int snprintf (char * buffer, size_t buf_size, const char * format,…);
A snprintf()
função escreve a string apontada por format no buffer. O número máximo de caracteres que podem ser escritos é (buf_size-1)
.
Depois que os caracteres são escritos, um caractere nulo de terminação é adicionado. Se buf_size for igual a zero, nada é escrito e buffer pode ser um ponteiro nulo.
É definido no arquivo de cabeçalho.
Parâmetros snprintf ()
- buffer: Ponteiro para o buffer da string para escrever o resultado.
- buf_size: Especifique o número máximo de caracteres a serem gravados no buffer, que é buf_size-1.
- formato: Ponteiro para uma string terminada em nulo que é gravada no fluxo de arquivos. Consiste em caracteres junto com especificadores de formato opcionais começando com%.
Os especificadores de formato são substituídos pelos valores das respectivas variáveis que seguem a string de formato.
O especificador de formato tem as seguintes partes:
- Um sinal% principal
- Sinalizadores: um ou mais sinalizadores opcionais que modificam o comportamento de conversão.
- -: Justificar à esquerda o resultado dentro do campo. Por padrão, é justificado à direita.
- +: O sinal do resultado é anexado ao início do valor, mesmo para resultados positivos.
- Espaço: Se não houver sinal, um espaço é anexado ao início do resultado.
- #: Uma forma alternativa de conversão é executada.
- 0: é usado para números inteiros e em ponto flutuante. Os zeros à esquerda são usados para preencher os números em vez de espaço.
- Largura: Um valor opcional * ou inteiro usado para especificar o campo de largura mínima.
- Precisão: um campo opcional que consiste em a. seguido por * ou inteiro ou nada para especificar a precisão.
- Comprimento: um modificador de comprimento opcional que especifica o tamanho do argumento.
- Especificador: um especificador de formato de conversão. Os especificadores de formato disponíveis são os seguintes:
Especificador de formato Descrição % Imprime% c Escreve um único personagem s Escreve uma string de caracteres d ou i Converte um inteiro com sinal em representação decimal o Converte um inteiro sem sinal em representação octal X ou x Converte um inteiro sem sinal em representação hexadecimal você Converte um inteiro sem sinal em representação decimal F ou F Converte o número de ponto flutuante em representação decimal E ou e Converte o número de ponto flutuante em notação de expoente decimal A ou a Converte o número de ponto flutuante em expoente hexadecimal G ou g Converte o número de ponto flutuante em notação de expoente decimal ou decimal n Retorna o número de caracteres escritos até agora por esta chamada para a função. O resultado é escrito no valor apontado pelo argumento p Grava uma sequência de caracteres definida pela implementação definindo um ponteiro. Portanto, o formato geral do especificador de formato é:
%(flags)(width)(.precision)(length)specifier
- …: Outros argumentos adicionais especificando os dados a serem impressos. Eles ocorrem em uma sequência de acordo com o especificador de formato.
snprintf () Valor de retorno
Se for bem-sucedida, a snprintf()
função retorna o número de caracteres que teriam sido gravados para um buffer suficientemente grande, excluindo o caractere nulo final. Em caso de falha, ele retorna um valor negativo.
A saída é considerada escrita completamente se, e somente se, o valor retornado for não negativo e menor que buf_size.
Exemplo: como funciona a função 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 você executa o programa, a saída será:
Olá, sou Max e tenho 23 anos. Número de caracteres escritos = 34