_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_errlist
i _sys_nerr
.
Warunki błędu
buffer |
sizeInBytes |
value |
digits |
Powrót | 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 NULL
ma 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