Compartilhar via


_ecvt_s

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

  • [saída] _Buffer
    Preenchido com o ponteiro para a cadeia de caracteres dos dígitos, o resultado da conversão.

  • [entrada] _SizeInBytes
    Tamanho do buffer em bytes.

  • [entrada] _Value
    Número a ser convertido.

  • [entrada] _Count
    Número de dígitos armazenados.

  • [saída] _Dec
    Posição da vírgula decimal armazenada.

  • [saída] _Sign
    Sinal de número convertido.

Valor de retorno

Nulo se com êxito. O valor de retorno é um código de erro se houver uma falha. Os códigos de erro são definidos em Errno.h. Para obter mais informações, consulte errno, _doserrno, _sys_errlist e _sys_nerr.

No caso de um parâmetro inválido, como listados na tabela a seguir, essa função invoca o manipulador inválido do parâmetro, conforme descrito em Validação do parâmetro. Se a execução puder continuar, essa função definirá errno como EINVAL e retornará 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 modificados.

Não NULL (pontos para a memória válido)

<=0

any

any

any

any

EINVAL

Não modificados.

any

any

any

any

NULL

any

EINVAL

Não modificados.

any

any

any

any

any

NULL

EINVAL

Não modificados.

Problemas de segurança

_ecvt_s pode gerar uma violação de acesso se buffer não aponta para a memória e não é válido NULL.

Comentários

A função de _ecvt_s converte um número de ponto flutuante como uma cadeia de caracteres. O parâmetro de _Value é o número de ponto flutuante a ser convertido. Essa função armazena até count dígitos de _Value como uma cadeia de caracteres e anexará um caractere nulo (\ “0 "). Se o número de dígitos em _Value exceder _Count, o dígito de ordem mais inferior é arredondado. Se houver menos do que dígitos de count , a cadeia de caracteres é preenchida com zeros.

Somente os 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 de _Sign depois da chamada. O parâmetro de _Dec a um valor inteiro que fornece a posição do ponto decimal em relação ao início da cadeia de caracteres. Um 0 ou um valor inteiro negativo indica que o ponto decimal se encontra à esquerda do primeiro dígito. O parâmetro de _Sign para um inteiro que indica o sinal do número convertido. Se o valor inteiro é 0, o número for positivo. Caso contrário, o número for negativo.

Um buffer de comprimento _CVTBUFSIZE é suficiente para qualquer valor de ponto flutuante.

A diferença entre _ecvt_s e _fcvt_s está na interpretação de parâmetro de _Count . _ecvt_s interpreta _Count como o número total de dígitos na cadeia de caracteres de saída, enquanto que _fcvt_s interpreta _Count como o número de dígitos após o ponto decimal.

Em C++, usar essa função é simplificada por uma sobrecarga de modelo; a sobrecarga poderá deduzir o comprimento 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 preenche o primeiro 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 sobre compatibilidade, consulte Compatibilidade 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);  
  
}
  

Equivalência do .NET Framework

ToString

Consulte também

Referência

Conversão de dados

Suporte de ponto flutuante

atof, _atof_l, _wtof, _wtof_l

_ecvt

_fcvt_s

_gcvt_s