_fcvt_s
Converte um número de ponto flutuante como uma cadeia de caracteres. Essa é uma versão de _fcvt com aprimoramentos de segurança conforme descrito em Recursos de segurança no CRT.
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
[saída] buffer
O buffer fornecido que conterá o resultado da conversão.[entrada] sizeInBytes
O tamanho do buffer em bytes.[entrada] value
Número a ser convertido.[entrada] count
Número de dígitos após o ponto decimal.[saída] dec
Ponteiro para a posição do ponto decimal armazenada.[saída] sign
Ponteiro para o indicador armazenado de sinal.
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 uma lista desses erros, 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 |
Valor |
count |
dec |
sinal |
Return |
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
_fcvt_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 _fcvt_s converte um número de ponto flutuante como uma cadeia de caracteres com terminação nula. O parâmetro de value é o número de ponto flutuante a ser convertido. _fcvt_s armazena os dígitos de value como uma cadeia de caracteres e anexará um caractere nulo (\ “0 "). O parâmetro de count especifica o número de dígitos a serem armazenados após o ponto decimal. Os dígitos adicionais são arredondados fora para locais de count . Se houver menos do que count de dígitos de precisão, 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; este valor inteiro da posição do ponto decimal em relação ao início da cadeia de caracteres. Um valor inteiro negativo ou zero indica que o ponto decimal se encontra à esquerda do primeiro dígito. Os pontos de sign de parâmetro para um inteiro que indica o sinal de value. O inteiro é definido como 0 se value é positivo e como um número diferente de zero se value é 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, e _fcvt_s interpretam 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 |
---|---|---|
_fcvt_s |
<stdlib.h> |
<errno.h> |
Para obter mais informações sobre compatibilidade, consulte Compatibilidade na Introdução.
Bibliotecas: Todas as versões das Recursos da biblioteca CRT.
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);
}