_gcvt_s

Konwertuje wartość zmiennoprzecinkową na ciąg. Ta funkcja jest wersją funkcji _gcvt z ulepszeniami zabezpieczeń, zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.

Składnia

errno_t _gcvt_s(
   char *buffer,
   size_t sizeInBytes,
   double value,
   int digits
);
template <size_t cchStr>
errno_t _gcvt_s(
   char (&buffer)[cchStr],
   double value,
   int digits
); // C++ only

Parametry

buffer
Bufor do przechowywania wyniku konwersji.

sizeInBytes
Rozmiar buforu.

value
Wartość do przekonwertowania.

digits
Liczba przechowywanych cyfr znaczących.

Wartość zwracana

Zero, jeśli się powiedzie. Jeśli wystąpi błąd z powodu nieprawidłowego parametru (zobacz poniższą tabelę dla nieprawidłowych wartości), wywoływana jest nieprawidłowa procedura obsługi parametrów zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, zostanie zwrócony kod błędu. Kody błędów są definiowane w pliku Errno.h. Aby uzyskać listę tych błędów, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Warunki błędu

buffer sizeInBytes value digits Zwrot Wartość w buffer
NULL dowolny dowolny dowolny EINVAL Niezmodyfikowane.
Nie NULL (wskazuje prawidłową pamięć) zero dowolny dowolny EINVAL Niezmodyfikowane.
Nie NULL (wskazuje prawidłową pamięć) dowolny dowolny >= sizeInBytes EINVAL Niezmodyfikowane.

Problemy dotyczące zabezpieczeń

_gcvt_s może wygenerować naruszenie dostępu, jeśli buffer nie wskazuje prawidłowej pamięci i nie NULLma wartości .

Uwagi

Funkcja _gcvt_s konwertuje zmiennoprzecinkowy value na ciąg znaków (zawierający punkt dziesiętny i możliwy bajt znaku) i przechowuje ciąg w pliku buffer. buffer powinna być wystarczająco duża, aby pomieścić przekonwertowaną wartość oraz znak null zakończenia, który jest dołączany automatycznie. Bufor długości _CVTBUFSIZE jest wystarczający dla dowolnej wartości zmiennoprzecinkowej. Jeśli jest używany rozmiar digits buforu + 1, funkcja nie zastąpi końca buforu, dlatego należy podać wystarczający bufor dla tej operacji. _gcvt_s próbuje utworzyć digits cyfry w formacie dziesiętny. Jeśli nie, tworzy digits cyfry w formacie wykładniczym. Końcowe zera można pominąć w konwersji.

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

Procedura Wymagany nagłówek Opcjonalny nagłówek
_gcvt_s <stdlib.h> <error.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// crt_gcvt_s.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main()
{
    char buf[_CVTBUFSIZE];
    int decimal;
    int sign;
    int err;

    err = _gcvt_s(buf, _CVTBUFSIZE, 1.2, 5);

    if (err != 0)
    {
        printf("_gcvt_s failed with error code %d\n", err);
        exit(1);
    }

    printf("Converted value: %s\n", buf);
}
Converted value: 1.2

Zobacz też

Konwersja danych
Obsługa obliczeń matematycznych i zmiennoprzecinkowych
atof, _atof_l, _wtof, _wtof_l
_ecvt_s
_fcvt_s
_gcvt