Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 EINVALe 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 NULLfor .
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