_ecvt_s

Converte um número double em uma cadeia de caracteres. Essa função é uma versão do com aprimoramentos de segurança, conforme descrito em Recursos de _ecvt segurança na 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.

Retornar valor

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âmetros 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 Retornar valor Valor em buffer
NULL qualquer qualquer qualquer qualquer qualquer EINVAL Não modificado.
Não é NULL (aponta para a memória válida) <=0 qualquer qualquer qualquer qualquer EINVAL Não modificado.
qualquer qualquer qualquer qualquer NULL qualquer EINVAL Não modificado.
qualquer qualquer qualquer qualquer qualquer 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, consulte Estado global na 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 a matemática e ponto flutuante
atof, _atof_l, _wtof, _wtof_l
_ecvt
_fcvt_s
_gcvt_s