_ecvt_s
Converte um número double
em uma cadeia de caracteres. Essa função é uma versão do com aprimoramentos de _ecvt
segurança, conforme descrito em Recursos de segurança no CRT.
Sintaxe
errno_t _ecvt_s(
char * buffer,
size_t sizeInBytes,
double value,
int count,
int *dec,
int *sign
);
template <size_t size>
errno_t _ecvt_s(
char (&buffer)[size],
double value,
int count,
int *dec,
int *sign
); // C++ only
Parâmetros
buffer
Preenchido com o ponteiro para a cadeia de caracteres de dígitos, o resultado da conversão.
sizeInBytes
O tamanho do buffer em bytes.
value
Número a ser convertido.
count
Número de dígitos armazenados.
dec
Posição do ponto decimal armazenada.
sign
Sinal do número convertido.
Valor retornado
Zero se for bem-sucedido. Se houver uma falha, o valor retornado será um código de erro. Códigos de erro são definidos em Errno.h. Para obter mais informações, consulte errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Se houver um parâmetro inválido, conforme listado na tabela a seguir, essa função invocará o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, essa função será definida errno
como EINVAL
e retornará EINVAL
.
Condições de erro
buffer |
sizeInBytes |
value |
count |
dec |
sign |
Valor retornado | Valor em buffer |
---|---|---|---|---|---|---|---|
NULL |
any | qualquer | qualquer | qualquer | any | EINVAL |
Não modificado. |
Não é NULL (aponta para a memória válida) |
<=0 | any | qualquer | qualquer | any | EINVAL |
Não modificado. |
any | qualquer | qualquer | qualquer | NULL |
any | EINVAL |
Não modificado. |
any | qualquer | qualquer | qualquer | any | NULL |
EINVAL |
Não modificado. |
Questões de segurança
_ecvt_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 _ecvt_s
converte um número de ponto flutuante em uma cadeia de caracteres. O parâmetro value
é o número de ponto flutuante a ser convertido. Essa função armazena até count
dígitos do value
como uma cadeia de caracteres e acrescenta um caractere nulo ('\0'). Se o número de dígitos em value
exceder count
, os dígitos de ordem inferior serão arredondados. Se houver menos de count
dígitos, a cadeia de caracteres será preenchida com zeros.
Somente dígitos são armazenados na cadeia de caracteres. A posição do ponto decimal e o sinal de value
podem ser obtidos de dec
e sign
após a chamada. O parâmetro dec
aponta para um valor inteiro dando a posição do ponto decimal em relação ao início da cadeia de caracteres. Um valor inteiro de 0 ou negativo indica que o ponto decimal se encontra à esquerda do primeiro dígito. O parâmetro sign
aponta para um número inteiro que indica o sinal do número convertido. Se o valor inteiro for 0, o número será positivo. Caso contrário, o resultado será negativo.
Um buffer de tamanho _CVTBUFSIZE
é suficiente para qualquer valor de ponto flutuante.
A diferença entre _ecvt_s
e _fcvt_s
está na interpretação do parâmetro count
. _ecvt_s
interpreta count
como o número total de dígitos na cadeia de saída, enquanto _fcvt_s
interpreta count
como o número de dígitos após o ponto decimal.
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
Função | Cabeçalho necessário | Cabeçalho opcional |
---|---|---|
_ecvt_s |
<stdlib.h> | <errno.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
// ecvt_s.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main( )
{
char * buf = 0;
int decimal;
int sign;
int err;
buf = (char*) malloc(_CVTBUFSIZE);
err = _ecvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);
if (err != 0)
{
printf("_ecvt_s failed with error code %d\n", err);
exit(1);
}
printf("Converted value: %s\n", buf);
}
Converted value: 12000
Confira também
Conversão de dados
Suporte matemático e de ponto flutuante
atof
, _atof_l
, _wtof
, _wtof_l
_ecvt
_fcvt_s
_gcvt_s