Compartilhar via


_gcvt_s

Converte um valor de ponto flutuante em uma cadeia de caracteres. Essa função é uma versão do com aprimoramentos de _gcvt segurança, conforme descrito em Recursos de segurança no CRT.

Sintaxe

errno_t _gcvt_s(
   char *buffer,
   size_t sizeInBytes,
   double value,
   int digits
);
template <size_t cchStr>
errno_t _gcvt_s(
   char (&buffer)[cchStr],
   double value,
   int digits
); // C++ only

Parâmetros

buffer
Buffer para armazenar o resultado da conversão.

sizeInBytes
O tamanho do buffer .

value
Valor a ser convertido.

digits
Número de dígitos significativos armazenados.

Valor retornado

Zero se for bem-sucedido. Se ocorrer uma falha devido a um parâmetro inválido (consulte a tabela a seguir para valores inválidos), o manipulador de parâmetro inválido será invocado conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, um código de erro será retornado. Códigos de erro são definidos em Errno.h. Para obter uma lista desses erros, consulte errno, _doserrno, _sys_errliste _sys_nerr.

Condições de erro

buffer sizeInBytes value digits Return Valor em buffer
NULL any qualquer any EINVAL Não modificado.
Não é NULL (aponta para a memória válida) zero any any EINVAL Não modificado.
Não é NULL (aponta para a memória válida) any any >= sizeInBytes EINVAL Não modificado.

Assuntos de segurança

_gcvt_s pode gerar uma violação de acesso se buffer não apontar para memória válida e não NULLfor .

Comentários

A função _gcvt_s converte um value de ponto flutuante em uma cadeia de caracteres (que inclui um ponto decimal e um possível byte de sinal) e armazena a cadeia de caracteres em buffer. buffer deve ser grande o suficiente para acomodar o valor convertido e um caractere nulo de terminação, que é acrescentado automaticamente. Um buffer de tamanho _CVTBUFSIZE é suficiente para qualquer valor de ponto flutuante. Se um tamanho de buffer de digits + 1 for usado, a função não substituirá o final do buffer, portanto, certifique-se de fornecer um buffer suficiente para essa operação. _gcvt_s tenta gerar dígitos digits no formato decimal. Se não puder, ele produz digits dígitos em formato exponencial. Zeros à direita podem ser suprimidos na conversão.

No C++, o uso dessa função é simplificado por uma sobrecarga de modelo. A sobrecarga pode inferir o tamanho do buffer automaticamente, eliminando a necessidade de especificar um argumento de tamanho. Para obter mais informações, consulte Sobrecargas de modelo seguras.

A versão de depuração dessa função primeiro preenche o buffer com 0xFE. Para desabilitar esse comportamento, use _CrtSetDebugFillThreshold.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.

Requisitos

Rotina Cabeçalho necessário Cabeçalho opcional
_gcvt_s <stdlib.h> <error.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

// crt_gcvt_s.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main()
{
    char buf[_CVTBUFSIZE];
    int decimal;
    int sign;
    int err;

    err = _gcvt_s(buf, _CVTBUFSIZE, 1.2, 5);

    if (err != 0)
    {
        printf("_gcvt_s failed with error code %d\n", err);
        exit(1);
    }

    printf("Converted value: %s\n", buf);
}
Converted value: 1.2

Confira também

Conversão de dados
Suporte matemático e de ponto flutuante
atof, _atof_l, _wtof, _wtof_l
_ecvt_s
_fcvt_s
_gcvt