Udostępnij za pośrednictwem


_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_errlisti _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 EINVALna , 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 NULLma 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 countwartość , 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