_ecvt_s
Konwertuje double numer na ciąg.Jest to wersja z _ecvt z rozszerzeń zabezpieczeń opisane w Funkcje zabezpieczeń w CRT.
errno_t _ecvt_s(
char * _Buffer,
size_t _SizeInBytes,
double _Value,
int _Count,
int *_Dec,
int *_Sign
);
template <size_t size>
errno_t _ecvt_s(
char (&_Buffer)[size],
double _Value,
int _Count,
int *_Dec,
int *_Sign
); // C++ only
Parametry
[out]_Buffer
Wypełniona wskaźnik, aby ciąg cyfr, wynik konwersji.[w]_SizeInBytes
Rozmiar buforu w bajtach.[w]_Value
Liczby są konwertowane.[w]_Count
Liczba cyfr przechowywane.[out]_Dec
Przechowywane położenie przecinka dziesiętnego.[out]_Sign
Znak liczby przekonwertowane.
Wartość zwracana
Zero, jeśli kończy się pomyślnie.Wartość zwracana jest kod błędu, jeśli wystąpi awaria.Kody błędów są zdefiniowane w errno.Aby uzyskać więcej informacji, zobacz errno, _doserrno, _sys_errlist, and _sys_nerr.
W odniesieniu do nieprawidłowy parametr, jak wymieniono w poniższej tabeli ta funkcja wywołuje obsługi nieprawidłowy parametr zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie może kontynuować, ta funkcja ustawia errno do EINVAL i zwraca EINVAL.
Warunki błędów
_Buffer |
_SizeInBytes |
_Value |
_Count |
_Dec |
_Sign |
Zwracanie wartości |
Wartośćbuffer |
---|---|---|---|---|---|---|---|
NULL |
wszelkie |
wszelkie |
wszelkie |
wszelkie |
wszelkie |
EINVAL |
Nie jest modyfikowany. |
Nie NULL (wskazuje prawidłowy pamięci) |
< = 0 |
wszelkie |
wszelkie |
wszelkie |
wszelkie |
EINVAL |
Nie jest modyfikowany. |
wszelkie |
wszelkie |
wszelkie |
wszelkie |
NULL |
wszelkie |
EINVAL |
Nie jest modyfikowany. |
wszelkie |
wszelkie |
wszelkie |
wszelkie |
wszelkie |
NULL |
EINVAL |
Nie jest modyfikowany. |
Problemy dotyczące zabezpieczeń
_ecvt_smoże wygenerować naruszenie zasad dostępu, jeśli buffer nie wskazuje prawidłowy pamięci i nie jest NULL.
Uwagi
_ecvt_s Funkcja konwertuje liczbę zmiennoprzecinkową na ciąg znaków._Value Parametru jest liczba zmiennoprzecinkowa do konwersji.Funkcja ta przechowuje się do count cyfry _Value jako ciąg znaków i dołącza znak null (\0).Jeśli liczba cyfr w _Value przekracza _Count, siódmy cyfra jest zaokrąglana.Jeżeli jest mniej niż count ciąg cyfr jest uzupełniony zerami.
Tylko cyfry są przechowywane w ciągu.Położenie przecinka dziesiętnego i znak _Value , można otrzymać od _Dec i _Sign po wywołaniu._Dec Parametru wskazuje wartość całkowitą, podając położenie przecinka dziesiętnego, w odniesieniu do początku ciągu znaków.Wartość 0 lub ujemna liczba całkowita wskazuje, że leży przecinka dziesiętnego po lewej stronie pierwszej cyfry._Sign Parametru wskazuje całkowitą, która wskazuje na znak liczby przekonwertowane.Jeśli wartość całkowitą 0, liczba jest dodatnia.W przeciwnym razie liczba jest ujemna.
Bufor o długości _CVTBUFSIZE jest wystarczający dla wartości zmiennoprzecinkowe.
Różnica między _ecvt_s i _fcvt_s jest w interpretacji _Count parametru._ecvt_sinterpretuje _Count jako całkowita liczba cyfr w ciągu danych wyjściowych, dlatego _fcvt_s interpretuje _Count jako liczba cyfr po przecinku.
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
Funkcja |
Wymaganego nagłówka |
Opcjonalne nagłówka |
---|---|---|
_ecvt_s |
<stdlib.h> |
<errno.h> |
Informacji dotyczących zgodności, zobacz Zgodność we wprowadzeniu.
Przykład
// ecvt_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 = _ecvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);
if (err != 0)
{
printf("_ecvt_s failed with error code %d\n", err);
exit(1);
}
printf("Converted value: %s\n", buf);
}