Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 |
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 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