_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_errlist
e _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 NULL
for .
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