_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
Lihat juga
Konversi data
Dukungan matematika dan titik mengambang
atof
, , _atof_l
_wtof
,_wtof_l
_ecvt_s
_fcvt_s
_gcvt