_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_errlist
e _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 NULL
for .
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