_fcvt_s
Konwertuje liczbę zmiennoprzecinkową na ciąg. Ta funkcja jest wersją z ulepszeniami zabezpieczeń _fcvt
zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.
Składnia
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
Parametry
buffer
Podany bufor, który będzie przechowywać wynik konwersji.
sizeInBytes
Rozmiar buforu w bajtach.
value
Liczba do przekonwertowania.
count
Liczba cyfr po przecinku dziesiętny.
dec
Wskaźnik do przechowywanej pozycji przecinka dziesiętnego.
sign
Wskaźnik do przechowywanego wskaźnika znaku.
Wartość zwracana
Zero, jeśli się powiedzie. Wartość zwracana jest kodem błędu, jeśli wystąpi błąd. Kody błędów są zdefiniowane w pliku errno.h
. Aby uzyskać listę tych błędów, zobacz errno
, _doserrno
, _sys_errlist
i _sys_nerr
.
Jeśli istnieje nieprawidłowy parametr, jak pokazano w poniższej tabeli, ta funkcja wywołuje nieprawidłową procedurę obsługi parametrów zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, ta funkcja ustawia errno
wartość EINVAL
i zwraca wartość EINVAL
.
Warunki błędu
buffer |
sizeInBytes |
value |
count |
dec |
sign |
Powrót | Wartość w buffer |
---|---|---|---|---|---|---|---|
NULL |
dowolny | dowolny | dowolny | dowolny | dowolny | EINVAL |
Niezmodyfikowane. |
Nie NULL (wskazuje prawidłową pamięć) |
<=0 | dowolny | dowolny | dowolny | dowolny | EINVAL |
Niezmodyfikowane. |
dowolny | dowolny | dowolny | dowolny | NULL |
dowolny | EINVAL |
Niezmodyfikowane. |
dowolny | dowolny | dowolny | dowolny | dowolny | NULL |
EINVAL |
Niezmodyfikowane. |
Problemy z zabezpieczeniami
_fcvt_s
może wygenerować naruszenie dostępu, jeśli buffer
nie wskazuje prawidłowej pamięci i nie NULL
ma wartości .
Uwagi
Funkcja _fcvt_s
konwertuje liczbę zmiennoprzecinkową na ciąg znaków zakończony o wartości null. Parametr value
jest liczbą zmiennoprzecinkową, która ma zostać przekonwertowana. _fcvt_s
przechowuje cyfry value
jako ciąg i dołącza znak o wartości null ('\0'). Parametr count
określa liczbę cyfr, które mają być przechowywane po przecinku dziesiętny. Nadmiarowe cyfry są zaokrąglane do count
miejsc. Jeśli jest mniej niż count
cyfry precyzji, ciąg jest wypełniony zerami.
Tylko cyfry są przechowywane w ciągu. Położenie punktu dziesiętnego i znaku value
można uzyskać od dec
i sign
po wywołaniu. Parametr dec
wskazuje wartość całkowitą. Ta wartość całkowita daje położenie punktu dziesiętnego względem początku ciągu. Wartość zero lub ujemna liczba całkowita wskazuje, że punkt dziesiętny znajduje się po lewej stronie pierwszej cyfry. Parametr sign
wskazuje liczbę całkowitą wskazującą znak value
. Liczba całkowita jest ustawiona na 0, jeśli value
jest dodatnia i jest ustawiona na liczbę niezerową, jeśli value
jest ujemna.
Bufor długości _CVTBUFSIZE
jest wystarczający dla dowolnej wartości zmiennoprzecinkowej.
Różnica między _ecvt_s
i _fcvt_s
jest w interpretacji parametru count
. _ecvt_s
interpretuje count
jako łączną liczbę cyfr w ciągu wyjściowym i _fcvt_s
interpretuje count
jako liczbę cyfr po przecinku dziesiętny.
W języku C++używanie tej funkcji jest uproszczone przez przeciążenie szablonu; przeciążenie może automatycznie wnioskować długość buforu, eliminując konieczność określenia argumentu rozmiaru. Aby uzyskać więcej informacji, zobacz Bezpieczne przeciążenia szablonów.
Wersja debugowania tej funkcji najpierw wypełnia bufor 0xFE. Aby wyłączyć to zachowanie, użyj polecenia _CrtSetDebugFillThreshold
.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Wymagania
Function | Wymagany nagłówek | Opcjonalny nagłówek |
---|---|---|
_fcvt_s |
<stdlib.h> | <errno.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Biblioteki: wszystkie wersje bibliotek środowiska uruchomieniowego języka C.
Przykład
// 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
Zobacz też
Konwersja danych
Obsługa obliczeń matematycznych i zmiennoprzecinkowych
atof
, , _atof_l
, , _wtof
_wtof_l
_ecvt_s
_gcvt_s
_fcvt