_fcvt_s
Mengonversi angka floating-point menjadi string. Fungsi ini adalah versi _fcvt
dengan peningkatan keamanan seperti yang dijelaskan dalam Fitur keamanan di CRT.
Sintaks
errno_t _fcvt_s(
char* buffer,
size_t sizeInBytes,
double value,
int count,
int *dec,
int *sign
);
template <size_t size>
errno_t _fcvt_s(
char (&buffer)[size],
double value,
int count,
int *dec,
int *sign
); // C++ only
Parameter
buffer
Buffer yang disediakan yang akan menyimpan hasil konversi.
sizeInBytes
Ukuran buffer dalam byte.
value
Angka yang akan dikonversi.
count
Jumlah digit setelah titik desimal.
dec
Penunjuk ke posisi titik desimal tersimpan.
sign
Penunjuk ke indikator tanda tersimpan.
Nilai hasil
Nol jika berhasil. Nilai yang dikembalikan adalah kode kesalahan jika ada kegagalan. Kode kesalahan didefinisikan dalam errno.h
. Untuk daftar kesalahan ini, lihat , , _sys_errlist
_doserrno
, dan_sys_nerr
.errno
Ketika 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 |
Tampilkan | 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
_fcvt_s
mungkin menghasilkan pelanggaran akses jika buffer
tidak menunjuk ke memori yang valid dan bukan NULL
.
Keterangan
Fungsi ini _fcvt_s
mengonversi angka floating-point menjadi string karakter null-terminated. Parameter value
adalah angka floating-point yang akan dikonversi. _fcvt_s
menyimpan digit value
sebagai string dan menambahkan karakter null ('\0'). Parameter count
menentukan jumlah digit yang akan disimpan setelah titik desimal. Digit berlebih dibulatkan ke count
tempat-tempat. Jika ada kurang dari count
digit presisi, 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; nilai bilangan bulat ini memberikan posisi titik desimal sehubungan dengan awal string. Nilai bilangan bulat nol atau negatif menunjukkan bahwa titik desimal terletak di sebelah kiri digit pertama. Parameter sign
menunjuk ke bilangan bulat yang menunjukkan tanda value
. Bilangan bulat diatur ke 0 jika value
positif dan diatur ke angka bukan nol jika value
negatif.
Buffer panjang _CVTBUFSIZE
cukup untuk nilai titik floating apa pun.
Perbedaan antara _ecvt_s
dan _fcvt_s
berada dalam interpretasi count
parameter. _ecvt_s
count
menafsirkan sebagai jumlah total digit dalam string output, dan _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
Fungsi | Header yang diperlukan | Header opsional |
---|---|---|
_fcvt_s |
<stdlib.h> | <errno.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Pustaka: Semua versi pustaka runtime C.
Contoh
// fcvt_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 = _fcvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);
if (err != 0)
{
printf("_fcvt_s failed with error code %d\n", err);
exit(1);
}
printf("Converted value: %s\n", buf);
}
Converted value: 120000
Lihat juga
Konversi data
Dukungan matematika dan titik mengambang
atof
, , _atof_l
_wtof
,_wtof_l
_ecvt_s
_gcvt_s
_fcvt