Udostępnij za pośrednictwem


_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_errlisti _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 NULLma 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