_ecvt_s
Converte um double número a uma seqüência de caracteres. Esta é uma versão de _ecvt com aprimoramentos de segurança conforme descrito em Aprimoramentos de segurança no CRT.
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
[out] _Buffer
Preenchido com o ponteiro para a seqüência de dígitos, o resultado da conversão.[in]_SizeInBytes
dimensionar do buffer em bytes.[in]_Value
Número a ser convertido.[in]_Count
Número de dígitos armazenados.[out] _Dec
Posição do ponto decimal armazenada.[out] _Sign
Sinal de número convertido.
Valor de retorno
Zero se for bem-sucedido.O valor retornado é um código de erro se houver uma falha.Códigos de erro estão definidos no errno.h.Para obter mais informações, consulte errno, _doserrno, _sys_errlist e _sys_nerr.
No caso de um parâmetro inválido, sistema autônomo listado na tabela a seguir, essa função chama o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro. Se a execução for permitida para continuar, essa função define errno para EINVAL e retornos EINVAL.
Condições de erro
_Buffer |
_SizeInBytes |
_Value |
_Count |
_Dec |
_Sign |
Valor de Retorno |
Valor em buffer |
---|---|---|---|---|---|---|---|
NULL |
any |
any |
any |
any |
any |
EINVAL |
Não modificado. |
Not NULL (pontos de memória válido) |
<=0 |
any |
any |
any |
any |
EINVAL |
Não modificado. |
any |
any |
any |
any |
NULL |
any |
EINVAL |
Não modificado. |
any |
any |
any |
any |
any |
NULL |
EINVAL |
Não modificado. |
Questões de segurança
_ecvt_s pode ser gerada uma violação de acesso se buffer não aponta para memória válido e não é NULL.
Comentários
The _ecvt_s função converte um número de ponto flutuante em uma seqüência de caractere. The _Value parâmetro é o número de ponto flutuante a ser convertido. Esta função armazena count dígitos de _Value sistema autônomo uma seqüência de caracteres e o acrescenta um caractere nulo ('\0'). Se o número de dígitos no _Value exceder _Count, é arredondado para o dígito de ordem inferior. Se houver menos de count dígitos, a seqüência de caracteres é preenchido com zeros.
Somente dígitos são armazenados na seqüência de caracteres.A posição do ponto decimal e o sinal de _Value pode ser obtido _Dec e _Sign Após a telefonar. The _Dec parâmetro aponta para um valor inteiro, dando a posição do ponto decimal ao início da string. Um valor inteiro de 0 ou negativo indica que o ponto decimal está à esquerda do primeiro dígito.The _Sign parâmetro aponta para um número inteiro indicando o sinal de número convertido. Se o valor inteiro for 0, o número é positivo.Caso contrário, o número for 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 das _Count parâmetro. _ecvt_s interpreta _Count sistema autônomo o número total de dígitos na cadeia de saída, enquanto _fcvt_s interpreta _Count sistema autônomo o número de dígitos depois do ponto decimal.
No C++, uso da função é simplificado pela sobrecarga de uma modelo; a sobrecarga pode inferir comprimento do buffer automaticamente, eliminando a necessidade de especificar um argumento de dimensionar.Para obter mais informações, consulte Proteger overloads de modelo.
A versão de depurar dessa função primeiro preencherá o buffer com 0xFD.Para desabilitar esse comportamento, use _CrtSetDebugFillThreshold.
Requisitos
Função |
Cabeçalho necessário |
Cabeçalho opcional |
---|---|---|
_ecvt_s |
<stdlib.h> |
<errno.h> |
Para obter mais informações de compatibilidade, consulte Compatibility na introdução.
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