_ecvt_s
Konwertuje double
liczbę na ciąg. Ta funkcja jest wersją z ulepszeniami zabezpieczeń _ecvt
zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.
Składnia
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
buffer
Wypełniony wskaźnikiem do ciągu cyfr, wynik konwersji.
sizeInBytes
Rozmiar buforu w bajtach.
value
Liczba do przekonwertowania.
count
Liczba przechowywanych cyfr.
dec
Zapisano położenie przecinka dziesiętnego.
sign
Znak przekonwertowanego numeru.
Wartość zwracana
Zero, jeśli się powiedzie. Wartość zwracana jest kodem błędu, jeśli wystąpi błąd. Kody błędów są definiowane w pliku Errno.h. Aby uzyskać więcej informacji, zobacz errno
, _doserrno
, _sys_errlist
i _sys_nerr
.
Jeśli istnieje nieprawidłowy parametr, jak pokazano w poniższej tabeli, ta funkcja wywołuje nieprawidłową procedurę obsługi parametrów zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, ta funkcja ustawia wartość errno
EINVAL
na , i zwraca wartość EINVAL
.
Warunki błędu
buffer |
sizeInBytes |
value |
count |
dec |
sign |
Wartość zwracana | Wartość w buffer |
---|---|---|---|---|---|---|---|
NULL |
dowolny | dowolny | dowolny | dowolny | dowolny | EINVAL |
Niezmodyfikowane. |
Nie NULL (wskazuje prawidłową pamięć) |
<=0 | dowolny | dowolny | dowolny | dowolny | EINVAL |
Niezmodyfikowane. |
dowolny | dowolny | dowolny | dowolny | NULL |
dowolny | EINVAL |
Niezmodyfikowane. |
dowolny | dowolny | dowolny | dowolny | dowolny | NULL |
EINVAL |
Niezmodyfikowane. |
Problemy z zabezpieczeniami
_ecvt_s
może wygenerować naruszenie dostępu, jeśli buffer
nie wskazuje prawidłowej pamięci i nie NULL
ma wartości .
Uwagi
Funkcja _ecvt_s
konwertuje liczbę zmiennoprzecinkową na ciąg znaków. Parametr value
jest liczbą zmiennoprzecinkową, która ma zostać przekonwertowana. Ta funkcja przechowuje maksymalnie count
cyfry value
jako ciąg i dołącza znak null ('\0'). Jeśli liczba cyfr w value
obiekcie przekracza count
wartość , cyfra o niskiej kolejności jest zaokrąglona. Jeśli liczba cyfr jest mniejsza niż count
, ciąg jest wypełniony zerami.
Tylko cyfry są przechowywane w ciągu. Położenie punktu dziesiętnego i znaku value
można uzyskać od dec
i sign
po wywołaniu. Parametr dec
wskazuje wartość całkowitą dającą położenie punktu dziesiętnego względem początku ciągu. Wartość 0 lub ujemna liczba całkowita wskazuje, że punkt dziesiętny znajduje się po lewej stronie pierwszej cyfry. Parametr sign
wskazuje liczbę całkowitą, która wskazuje znak przekonwertowanej liczby. Jeśli wartość całkowita to 0, liczba jest dodatnia. W przeciwnym razie liczba jest ujemna.
Bufor długości _CVTBUFSIZE
jest wystarczający dla dowolnej wartości zmiennoprzecinkowej.
Różnica między _ecvt_s
i _fcvt_s
jest w interpretacji parametru count
. _ecvt_s
interpretuje count
jako łączną liczbę cyfr w ciągu wyjściowym, natomiast _fcvt_s
interpretuje count
jako liczbę cyfr po przecinku dziesiętnego.
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
Function | Wymagany nagłówek | Opcjonalny nagłówek |
---|---|---|
_ecvt_s |
<stdlib.h> | <errno.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
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);
}
Converted value: 12000
Zobacz też
Konwersja danych
Obsługa obliczeń matematycznych i zmiennoprzecinkowych
atof
, , _atof_l
, , _wtof
_wtof_l
_ecvt
_fcvt_s
_gcvt_s