Compartilhar via


_fcvt_s

Converte um número de ponto flutuante em uma cadeia de caracteres. Essa função é uma versão do com aprimoramentos de _fcvt segurança, conforme descrito em Recursos de segurança no CRT.

Sintaxe

errno_t _fcvt_s(
   char* buffer,
   size_t sizeInBytes,
   double value,
   int count,
   int *dec,
   int *sign
);
template <size_t size>
errno_t _fcvt_s(
   char (&buffer)[size],
   double value,
   int count,
   int *dec,
   int *sign
); // C++ only

Parâmetros

buffer
O buffer fornecido que conterá o resultado da conversão.

sizeInBytes
O tamanho do buffer em bytes.

value
Número a ser convertido.

count
O número de dígitos após o ponto decimal.

dec
Ponteiro para a posição do ponto decimal armazenada.

sign
Ponteiro para o indicador de logon armazenado.

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 no errno.h. Para obter uma lista desses erros, consulte errno, _doserrno, _sys_errliste _sys_nerr.

Quando há um parâmetro inválido, conforme listado na tabela a seguir, essa função invoca o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro. Se a execução puder continuar, essa função definirá errno para EINVAL e retornará EINVAL.

Condições de erro

buffer sizeInBytes value count dec sign Return 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.

Problemas de segurança

_fcvt_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 _fcvt_s converte um número de ponto flutuante em uma cadeia de caracteres com terminação nula. O parâmetro value é o número de ponto flutuante a ser convertido. _fcvt_s armazena os dígitos de value como uma cadeia de caracteres e acrescenta um caractere nulo ('\0'). O parâmetro count especifica o número de dígitos a serem armazenados após o ponto decimal. Dígitos em excesso são arredondados para count casas. Se houver menos de count dígitos de precisão, 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 zero ou negativo indica que o ponto decimal se encontra à esquerda do primeiro dígito. O parâmetro sign aponta para um número inteiro indicando o sinal de value. O inteiro é definido como 0 se value for positivo e é definido como um número diferente de zero se value 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 do parâmetro count. _ecvt_s Interpreta count como o número total de dígitos na cadeia de caracteres de saída e _fcvt_s interpreta count como o número de dígitos após a vírgula 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
_fcvt_s <stdlib.h> <errno.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Bibliotecas: todas as versões das bibliotecas de runtime C.

Exemplo

// fcvt_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 = _fcvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);

    if (err != 0)
    {
        printf("_fcvt_s failed with error code %d\n", err);
        exit(1);
    }

    printf("Converted value: %s\n", buf);
}
Converted value: 120000

Confira também

Conversão de dados
Suporte matemático e de ponto flutuante
atof, _atof_l, _wtof, _wtof_l
_ecvt_s
_gcvt_s
_fcvt