_gcvt_s
Converte um valor de ponto flutuante como uma cadeia de caracteres. Essa é uma versão de _gcvt com aprimoramentos de segurança conforme descrito em Recursos de segurança no CRT.
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
[saída] buffer
Buffer para armazenar o resultado da conversão.[entrada] sizeInBytes
O tamanho do buffer.[entrada] value
Valor a ser convertido.[entrada] digits
Número de dígitos significativos armazenados.
Valor de retorno
Nulo se com êxito. Se ocorrer uma falha devido a um parâmetro inválido (consulte a tabela a seguir para valores inválidos), o manipulador inválido do parâmetro será invocado como descrito em Validação do parâmetro. Se a execução for permitida continuar, um código de erro será retornado. Os códigos de erro são definidos em Errno.h. Para uma lista desses erros, consulte errno, _doserrno, _sys_errlist e _sys_nerr.
Condições de erro
buffer |
sizeInBytes |
value |
digits |
Return |
Valor em buffer |
---|---|---|---|---|---|
NULL |
any |
any |
any |
EINVAL |
Não modificados. |
Não NULL (pontos para a memória válido) |
zero |
any |
any |
EINVAL |
Não modificados. |
Não NULL (pontos para a memória válido) |
any |
any |
>= sizeInBytes |
EINVAL |
Não modificados. |
Problemas de segurança
_gcvt_s pode gerar uma violação de acesso se buffer não aponta para a memória e não é válido NULL.
Comentários
A função de _gcvt_s converte value de ponto flutuante como uma cadeia de caracteres (que inclui um ponto decimal opcional e um byte que o sinal) e armazena a cadeia de caracteres em buffer. buffer deve ser grande o suficiente para acomodar o valor convertido mais um caractere terminador nulo, que é acrescentado automaticamente. Um buffer de comprimento _CVTBUFSIZE é suficiente para qualquer valor de ponto flutuante. Se um tamanho do buffer de digits + 1 for usado, a função não substituirá a extremidade do buffer portanto, certifique-se de fornecer um buffer suficiente para esta operação. _gcvt_s tenta gerar dígitos de digits em formato decimal. Se não puder, gerencia dígitos de digits no formato exponencialmente. Zeros à direita podem ser suprimidos na conversão.
Em C++, usar essa função é simplificada por uma sobrecarga de modelo; a sobrecarga poderá deduzir o comprimento 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 preenche o primeiro buffer com 0xFD. Para desabilitar esse comportamento, use _CrtSetDebugFillThreshold.
Requisitos
Rotina |
Cabeçalho necessário |
Cabeçalho opcional |
---|---|---|
_gcvt_s |
<stdlib.h> |
<error.h> |
Para obter mais informações sobre compatibilidade, consulte Compatibilidade na Introdução.
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);
}