_gcvt_s
Konwertuje wartości zmiennoprzecinkowych na ciąg.Jest to wersja z _gcvt z rozszerzeń zabezpieczeń opisane w Funkcje zabezpieczeń w CRT.
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
[out]buffer
Bufor do przechowywania wyników konwersji.[w]sizeInBytes
Rozmiar buforu.[w]value
Wartości są konwertowane.[w]digits
Liczba cyfr znaczących przechowywane.
Wartość zwracana
Zero, jeśli kończy się pomyślnie.Jeśli wystąpi awaria, ze względu na nieprawidłowy parametr (patrz poniższa tabela zawiera nieprawidłowe wartości), wywoływana jest funkcja obsługi nieprawidłowy parametr, jak opisano w Sprawdzanie poprawności parametru.Jeśli wykonanie może kontynuować, zwracany jest kod błędu.Kody błędów są zdefiniowane w errno.Aby uzyskać listę tych błędów, zobacz errno, _doserrno, _sys_errlist, and _sys_nerr.
Warunki błędów
buffer |
sizeInBytes |
value |
digits |
Zwrot |
Wartośćbuffer |
---|---|---|---|---|---|
NULL |
wszelkie |
wszelkie |
wszelkie |
EINVAL |
Nie jest modyfikowany. |
Nie NULL (wskazuje prawidłowy pamięci) |
zero |
wszelkie |
wszelkie |
EINVAL |
Nie jest modyfikowany. |
Nie NULL (wskazuje prawidłowy pamięci) |
wszelkie |
wszelkie |
> =sizeInBytes |
EINVAL |
Nie jest modyfikowany. |
Problemy dotyczące zabezpieczeń
_gcvt_smożna wygenerować naruszenie zasad dostępu, jeśli buffer nie wskazuje prawidłowy pamięci i nie jest NULL.
Uwagi
_gcvt_s Funkcja konwertuje zmiennoprzecinkowych value do ciągu znaków (która obejmuje z punktem dziesiętnym i bajt możliwe znak) i przechowuje ciąg w buffer.bufferpowinna być wystarczająco duża, aby pomieścić konwertowaną wartość plus kończącego znaku null, który jest dołączany automatycznie.Bufor o długości _CVTBUFSIZE jest wystarczający dla żadnych przestawnych wartości.Jeśli rozmiar buforu digits + 1 jest używany, funkcja nie zastąpi koniec buforu, więc należy dostarczyć dostatecznego bufora dla tej operacji._gcvt_spróbuje do produkcji digits cyfr w formacie dziesiętnym.Jeśli nie, wytwarza digits cyfr w formacie wykładniczy.Końcowe zera można pominąć w wyniku konwersji.
W języku C++ za pomocą tej funkcji jest uproszczona poprzez przeciążenie szablonu; przeciążenia mogą wywnioskować strony długość buforu automatycznie, eliminując konieczność należy określić argument rozmiar.Aby uzyskać więcej informacji, zobacz Przeciążenia bezpiecznych szablonów.
Wersja programu debug tej funkcji po raz pierwszy wypełnia bufor 0xFD.Aby wyłączyć to zachowanie, należy użyć _CrtSetDebugFillThreshold.
Wymagania
Rozpoczęto wykonywanie procedury |
Wymaganego nagłówka |
Opcjonalne nagłówka |
---|---|---|
_gcvt_s |
<stdlib.h> |
<error.h> |
Informacji dotyczących zgodności, zobacz Zgodność we wprowadzeniu.
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);
}