_gcvt_s

Mengonversi nilai floating-point menjadi string. Fungsi ini adalah versi _gcvt dengan peningkatan keamanan, seperti yang dijelaskan dalam Fitur keamanan di CRT.

Sintaks

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

Parameter

buffer
Buffer untuk menyimpan hasil konversi.

sizeInBytes
Ukuran buffer.

value
Nilai yang akan dikonversi.

digits
Jumlah digit signifikan yang disimpan.

Nilai hasil

Nol jika berhasil. Jika kegagalan terjadi karena parameter yang tidak valid (lihat tabel berikut untuk nilai yang tidak valid), handler parameter yang tidak valid dipanggil seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, kode kesalahan dikembalikan. Kode kesalahan didefinisikan dalam Errno.h. Untuk daftar kesalahan ini, lihat , , _sys_errlist_doserrno, dan_sys_nerr .errno

Kondisi kesalahan

buffer sizeInBytes value digits Tampilkan Nilai dalam buffer
NULL any any any EINVAL Tidak dimodifikasi.
Bukan NULL (menunjuk ke memori yang valid) zero any any EINVAL Tidak dimodifikasi.
Bukan NULL (menunjuk ke memori yang valid) any any >= sizeInBytes EINVAL Tidak dimodifikasi.

Masalah Keamanan

_gcvt_s dapat menghasilkan pelanggaran akses jika buffer tidak menunjuk ke memori yang valid dan bukan NULL.

Keterangan

Fungsi ini _gcvt_s mengonversi floating-point value menjadi string karakter (yang mencakup titik desimal dan byte tanda yang mungkin) dan menyimpan string di buffer. buffer harus cukup besar untuk mengakomodasi nilai yang dikonversi ditambah karakter null yang mengakhiri, yang ditambahkan secara otomatis. Buffer panjang _CVTBUFSIZE cukup untuk nilai titik floating apa pun. Jika ukuran buffer + digits 1 digunakan, fungsi tidak akan menimpa akhir buffer, jadi pastikan untuk menyediakan buffer yang cukup untuk operasi ini. _gcvt_s mencoba menghasilkan digits digit dalam format desimal. Jika tidak bisa, itu menghasilkan digits digit dalam format eksponensial. Nol berikutnya dapat ditekan dalam konversi.

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

Rutin Header yang diperlukan Header opsional
_gcvt_s <stdlib.h> <error.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// 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);
}
Converted value: 1.2

Baca juga

Konversi data
Dukungan matematika dan titik mengambang
atof, _atof_l, _wtof, _wtof_l
_ecvt_s
_fcvt_s
_gcvt