_gcvt_s
Kayan nokta değerini 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_gcvt
.
Sözdizimi
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
Parametreler
buffer
Dönüştürmenin sonucunu depolamak için arabellek.
sizeInBytes
Arabelleğin boyutu.
value
Dönüştürülecek değer.
digits
Depolanan önemli basamak sayısı.
Dönüş değeri
Başarılı olursa sıfır. Geçersiz bir parametreden dolayı bir hata oluşursa (geçersiz değerler için aşağıdaki tabloya bakın), parametre doğrulamasında açıklandığı gibi geçersiz parametre işleyicisi çağrılır. Yürütmenin devam etmesi için izin verilirse bir hata kodu döndürülür. Hata kodları Errno.h içinde tanımlanır. Bu hataların listesi için bkz errno
. , _doserrno
, _sys_errlist
ve _sys_nerr
.
Hata koşulları
buffer |
sizeInBytes |
value |
digits |
İade | içindeki değer buffer |
---|---|---|---|---|---|
NULL |
herhangi bir | herhangi bir | herhangi bir | EINVAL |
Değiştirilmedi. |
Değil NULL (geçerli belleğe işaret eden) |
sıfır | herhangi bir | herhangi bir | EINVAL |
Değiştirilmedi. |
Değil NULL (geçerli belleğe işaret eden) |
herhangi bir | herhangi bir | >= sizeInBytes |
EINVAL |
Değiştirilmedi. |
Güvenlik Sorunları
_gcvt_s
geçerli belleğe işaret etmiyorsa buffer
ve NULL
değilse erişim ihlali oluşturabilir.
Açıklamalar
İşlev, _gcvt_s
kayan noktayı value
bir karakter dizesine (ondalık nokta ve olası bir işaret baytını içeren) dönüştürür ve dizeyi içinde buffer
depolar. buffer
dönüştürülen değerin yanı sıra otomatik olarak eklenen sonlandırıcı null karaktere uyum sağlamak için yeterince büyük olmalıdır. Herhangi bir kayan nokta değeri için uzunluk _CVTBUFSIZE
arabellek yeterlidir. + 1 arabellek boyutu digits
kullanılırsa, işlev arabelleğin sonunun üzerine yazmaz, bu nedenle bu işlem için yeterli bir arabellek sağladığından emin olun. _gcvt_s
ondalık biçimde basamak üretmeye digits
çalışır. Yapamazsa, basamakları üstel biçimde üretir digits
. Sondaki sıfırlar dönüştürmede gizlenebilir.
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
Yordam | Gerekli başlık | İsteğe bağlı üst bilgi |
---|---|---|
_gcvt_s |
<stdlib.h> | <error.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// 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
Ayrıca bkz.
Veri dönüştürme
Matematik ve kayan nokta desteği
atof
, _atof_l
, _wtof
, _wtof_l
_ecvt_s
_fcvt_s
_gcvt