_ecvt_s

double Mengonversi angka menjadi string. Fungsi ini adalah versi _ecvt dengan peningkatan keamanan seperti yang dijelaskan dalam Fitur keamanan di CRT.

Sintaks

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

Parameter

buffer
Diisi dengan penunjuk ke string digit, hasil konversi.

sizeInBytes
Ukuran buffer dalam byte.

value
Angka yang akan dikonversi.

count
Jumlah digit yang disimpan.

dec
Posisi titik desimal tersimpan.

sign
Tanda angka yang dikonversi.

Nilai hasil

Nol jika berhasil. Nilai yang dikembalikan adalah kode kesalahan jika ada kegagalan. Kode kesalahan didefinisikan dalam Errno.h. Untuk informasi selengkapnya, lihat errno, _doserrno, _sys_errlist, dan _sys_nerr.

Jika ada parameter yang tidak valid, seperti yang tercantum dalam tabel berikut, fungsi ini memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi ini diatur errno ke EINVAL, dan mengembalikan EINVAL.

Kondisi kesalahan

buffer sizeInBytes value count dec sign Nilai hasil Nilai dalam buffer
NULL any any any any any EINVAL Tidak dimodifikasi.
Bukan NULL (menunjuk ke memori yang valid) <=0 any any any any EINVAL Tidak dimodifikasi.
any any any any NULL any EINVAL Tidak dimodifikasi.
any any any any any NULL EINVAL Tidak dimodifikasi.

Masalah keamanan

_ecvt_s mungkin menghasilkan pelanggaran akses jika buffer tidak menunjuk ke memori yang valid dan bukan NULL.

Keterangan

Fungsi ini _ecvt_s mengonversi angka floating-point menjadi string karakter. Parameter value adalah angka floating-point yang akan dikonversi. Fungsi ini menyimpan hingga count digit value sebagai string dan menambahkan karakter null ('\0'). Jika jumlah digit melebihi valuecount, digit urutan rendah dibulatkan. Jika ada kurang dari count digit, string diisi dengan nol.

Hanya digit yang disimpan dalam string. Posisi titik desimal dan tanda value dapat diperoleh dari dec dan sign setelah panggilan. Parameter dec menunjuk ke nilai bilangan bulat yang memberikan posisi titik desimal sehubungan dengan awal string. Nilai bilangan bulat 0 atau negatif menunjukkan bahwa titik desimal terletak di sebelah kiri digit pertama. Parameter sign menunjuk ke bilangan bulat yang menunjukkan tanda angka yang dikonversi. Jika nilai bilangan bulat adalah 0, angkanya positif. Jika tidak, angkanya negatif.

Buffer panjang _CVTBUFSIZE cukup untuk nilai floating-point apa pun.

Perbedaan antara _ecvt_s dan _fcvt_s berada dalam interpretasi count parameter. _ecvt_scount menafsirkan sebagai jumlah total digit dalam string output, sedangkan _fcvt_s menafsirkan count sebagai jumlah digit setelah titik desimal.

Di C++, menggunakan fungsi ini disederhanakan oleh kelebihan beban templat; kelebihan beban dapat menyimpulkan panjang buffer secara otomatis, menghilangkan kebutuhan untuk menentukan argumen ukuran. Untuk informasi selengkapnya, lihat Mengamankan kelebihan beban templat.

Versi debug fungsi ini terlebih dahulu mengisi buffer dengan 0xFE. Untuk menonaktifkan perilaku ini, gunakan _CrtSetDebugFillThreshold.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Persyaratan

Function Header yang diperlukan Header opsional
_ecvt_s <stdlib.h> <errno.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// 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

Baca juga

Konversi data
Dukungan matematika dan titik mengambang
atof, _atof_l, _wtof, _wtof_l
_ecvt
_fcvt_s
_gcvt_s