_fcvt_s
Converte um número de ponto flutuante em uma seqüência de caracteres.Esta é uma versão do _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
[out]buffer
O buffer fornecido que irá armazenar o resultado da conversão.[in]sizeInBytes
O tamanho do buffer em bytes.[in]value
Número a ser convertido.[in]count
Número de dígitos após o ponto decimal.[out]dec
Ponteiro para a posição do ponto decimal armazenado.[out]sign
Ponteiro para o indicador de sinal armazenado.
Valor de retorno
Zero se for bem sucedida.O valor de retorno é um código de erro, se houver uma falha.Códigos de erro são definidos no errno. h.Para obter uma lista desses erros, consulte errno, _doserrno, _sys_errlist e _sys_nerr.
No caso de um parâmetro inválido, conforme listado na tabela a seguir, essa função chama o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro.Se a execução terá permissão para continuar, essa função define errno para EINVAL e retorna EINVAL.
Condições de erro
buffer |
sizeInBytes |
Valor |
Contagem |
dez |
sinal |
Return |
O valorbuffer |
---|---|---|---|---|---|---|---|
NULL |
any |
any |
any |
any |
any |
EINVAL |
Não modificado. |
Não NULL (aponta para memória válido) |
< = 0 |
any |
any |
any |
any |
EINVAL |
Não modificado. |
any |
any |
any |
any |
NULL |
any |
EINVAL |
Não modificado. |
any |
any |
any |
any |
any |
NULL |
EINVAL |
Não modificado. |
Problemas de segurança
_fcvt_spode gerar uma violação de acesso se buffer não aponta para memória válido e não é NULL.
Comentários
O _fcvt_s função converte um número de ponto flutuante em uma seqüência terminada por caractere nulo.O value parâmetro é o número de ponto flutuante a ser convertido._fcvt_sarmazena os dígitos do value como uma seqüência de caracteres e o acrescenta um caractere nulo ('\0').O count parâmetro especifica o número de dígitos a serem armazenados após a vírgula decimal.Dígitos em excesso são arredondados count coloca.Se houver menos que count dígitos de precisão, a seqüência de caracteres é preenchido com zeros.
Somente dígitos são armazenados na seqüência de caracteres.A posição do ponto decimal e o sinal de value pode ser obtido em dec e sign após a chamada.O dec parâmetro aponta para um valor inteiro; Este valor de inteiro oferece a posição do ponto decimal com relação ao início da seqüência de caracteres.Um zero ou valor inteiro negativo indica que o ponto decimal está à esquerda do primeiro dígito.O parâmetro sign aponta para um número inteiro indicando o sinal de value.O número inteiro é definido como 0 se value é positiva e é definido como um número se diferente de zero value for negativo.
Um buffer de tamanho _CVTBUFSIZE é suficiente para flutuantes qualquer valor de ponto.
A diferença entre _ecvt_s e _fcvt_s está sendo a interpretação do count parâmetro._ecvt_sinterpreta count como o número total de dígitos na cadeia de saída, e _fcvt_s interpreta count como o número de dígitos após o ponto decimal.
No C++, usar esta função é simplificado por uma sobrecarga de modelo; a sobrecarga pode inferir comprimento do buffer automaticamente, eliminando a necessidade de especificar um argumento de tamanho.Para obter mais informações, consulte Proteger Overloads de modelo.
A versão de depuração dessa função primeiro preenche o buffer com 0xFD.Para desativar 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 de compatibilidade, consulte Compatibilidade na introdução.
Bibliotecas: todas as versões da 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);
}