_fcvt_s
Kayan noktalı sayıyı dizeye dönüştürür. Bu işlev, CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmeleri içeren bir sürümüdür_fcvt
.
Sözdizimi
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
Parametreler
buffer
Dönüştürmenin sonucunu tutacak sağlanan arabellek.
sizeInBytes
Arabelleğin bayt cinsinden boyutu.
value
Dönüştürülecek sayı.
count
Ondalık ayırıcıdan sonraki basamak sayısı.
dec
Depolanan ondalık nokta konumuna işaret eden işaretçi.
sign
Depolanan işaret göstergesinin işaretçisi.
Dönüş değeri
Başarılı olursa sıfır. Bir hata varsa dönüş değeri bir hata kodudur. Hata kodları içinde errno.h
tanımlanır. Bu hataların listesi için bkz errno
. , _doserrno
, _sys_errlist
ve _sys_nerr
.
Aşağıdaki tabloda listelendiği gibi geçersiz bir parametre olduğunda, bu işlev Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisini çağırır. Yürütmenin devam etmesi için izin verilirse, bu işlev olarak EINVAL
ayarlanır errno
ve döndürürEINVAL
.
Hata koşulları
buffer |
sizeInBytes |
value |
count |
dec |
sign |
İade | içindeki değer buffer |
---|---|---|---|---|---|---|---|
NULL |
herhangi bir | herhangi bir | herhangi bir | herhangi bir | herhangi bir | EINVAL |
Değiştirilmedi. |
Değil NULL (geçerli belleğe işaret eden) |
<=0 | herhangi bir | herhangi bir | herhangi bir | herhangi bir | EINVAL |
Değiştirilmedi. |
herhangi bir | herhangi bir | herhangi bir | herhangi bir | NULL |
herhangi bir | EINVAL |
Değiştirilmedi. |
herhangi bir | herhangi bir | herhangi bir | herhangi bir | herhangi bir | NULL |
EINVAL |
Değiştirilmedi. |
Güvenlik Sorunları
_fcvt_s
geçerli belleğe işaret etmiyorsa buffer
ve NULL
değilse erişim ihlali oluşturabilir.
Açıklamalar
İşlev, _fcvt_s
kayan noktalı bir sayıyı null ile sonlandırılan karakter dizesine dönüştürür. value
parametresi dönüştürülecek kayan noktalı sayıdır. _fcvt_s
basamaklarını value
dize olarak depolar ve null karakter ekler ('\0'). parametresi ondalık count
ayırıcıdan sonra depolanacak basamak sayısını belirtir. Fazla basamaklar yerlere yuvarlanır count
. Duyarlık basamaklarından daha count
azsa, dize sıfırlarla doldurulur.
Dizede yalnızca basamaklar depolanır. Ondalık noktasının konumu ve işareti value
çağrıdan sonra ve sign
çağrıdan dec
sonra elde edilebilir. dec
parametresi bir tamsayı değerine işaret eder; bu tamsayı değeri, dizenin başlangıcına göre ondalık noktasının konumunu verir. Sıfır veya negatif tamsayı değeri, ondalık ayırıcının ilk basamuğun solunda olduğunu gösterir. parametresi sign
, işaretini value
gösteren bir tamsayıya işaret ediyor. Tamsayı pozitifse value
0 olarak ayarlanır ve negatifse value
sıfır olmayan bir sayıya ayarlanır.
Herhangi bir kayan nokta değeri için uzunluk _CVTBUFSIZE
arabellek yeterlidir.
ile _fcvt_s
arasındaki _ecvt_s
fark, parametresinin yorumlanmasındadırcount
. _ecvt_s
count
çıkış dizesindeki toplam basamak sayısı olarak yorumlar count
ve _fcvt_s
ondalık ayırıcıdan sonraki basamak sayısı olarak yorumlar.
C++'ta bu işlevin kullanılması şablon aşırı yüklemesi ile basitleştirilmiştir; aşırı yükleme arabellek uzunluğunu otomatik olarak çıkararak boyut bağımsız değişkeni belirtme gereksinimini ortadan kaldırır. Daha fazla bilgi için bkz . Güvenli şablon aşırı yüklemeleri.
Bu işlevin hata ayıklama sürümü önce arabelleği 0xFE ile doldurur. Bu davranışı devre dışı bırakmak için kullanın _CrtSetDebugFillThreshold
.
Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
Gereksinimler
İşlev | Gerekli başlık | İsteğe bağlı üst bilgi |
---|---|---|
_fcvt_s |
<stdlib.h> | <errno.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Kitaplıklar: C çalışma zamanı kitaplıklarının tüm sürümleri.
Örnek
// 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
Ayrıca bkz.
Veri dönüştürme
Matematik ve kayan nokta desteği
atof
, _atof_l
, _wtof
, _wtof_l
_ecvt_s
_gcvt_s
_fcvt