C ++ 'daki vsnprintf () işlevi, biçimlendirilmiş bir dizeyi bir dizge arabelleğine yazmak için kullanılır.
Vsprintf () 'den farklı olarak, arabelleğe yazılabilecek maksimum karakter sayısı içinde belirtilir vsnprintf()
.
vsnprintf () prototipi
int vsnprintf (char * buffer, size_t buf_size, const char * format, va_list vlist);
vsnprintf()
İşlev bir karakter dizesi tamponuna biçimine göre işaret dize yazar. Yazılabilecek maksimum karakter sayısı buf_size'dir. Karakterler yazıldıktan sonra, sonlandırıcı bir boş karakter eklenir. Buf_size sıfıra eşitse hiçbir şey yazılmaz ve tampon boş gösterici olabilir.
Dize biçimi,% ile başlayan ve bir liste vlist olarak iletilen değişkenlerin değerleriyle değiştirilen biçim belirleyicileri içerebilir.
Başlık dosyasında tanımlanmıştır.
vsnprintf () Parametreler
- buffer: Sonucu yazmak için bir karakter dizesine işaretçi.
- buf_size: Yazılacak maksimum karakter sayısı.
- format: Dosya akışına yazılan boş sonlandırılmış bir dizeye işaretçi. % İle başlayan isteğe bağlı biçim belirleyicileriyle birlikte karakterlerden oluşur.
Biçim belirteçleri, biçim dizesini izleyen ilgili değişkenlerin değerleriyle değiştirilir.
Biçim belirticisi aşağıdaki bölümlerden oluşur:
- Önde gelen% işareti
- Bayraklar: Dönüştürme davranışını değiştiren isteğe bağlı bir veya daha fazla bayrak.
- -: Sonucu alan içinde sola yaslayın. Varsayılan olarak doğru şekilde yaslanmıştır.
- +: Olumlu sonuçlar için bile sonucun işareti değerin başına eklenir.
- Boşluk: İşaret yoksa sonucun başına bir boşluk eklenir.
- #: Dönüşümün alternatif bir biçimi gerçekleştirilir.
- 0: Tam sayı ve kayan nokta sayısı için kullanılır. Sayıları boşluk yerine doldurmak için baştaki sıfırlar kullanılır.
- Genişlik: Minimum genişlik alanını belirtmek için kullanılan isteğe bağlı bir * veya tamsayı değeri.
- Kesinlik: a. ardından * veya tamsayı veya hassasiyeti belirtmek için hiçbir şey gelmez.
- Uzunluk: Bağımsız değişkenin boyutunu belirten isteğe bağlı bir uzunluk değiştirici.
- Specifier: Bir dönüşüm formatı belirleyicisi. Kullanılabilir biçim belirleyicileri aşağıdaki gibidir:
Biçim Tanımlayıcısı Açıklama % Baskılar% c Tek bir karakter yazar s Bir karakter dizisi yazar d veya ben İşaretli bir tamsayıyı ondalık gösterime dönüştürür Ö İşaretsiz bir tamsayıyı sekizlik gösterime dönüştürür X veya x İşaretsiz bir tamsayıyı onaltılık gösterime dönüştürür sen İşaretsiz bir tamsayıyı ondalık gösterime dönüştürür F veya f Kayan nokta sayısını ondalık gösterime dönüştürür E veya e Kayan nokta sayısını ondalık üslü gösterime dönüştürür A veya a Kayan nokta sayısını onaltılı üsse dönüştürür G veya g Kayan noktalı sayıyı ondalık veya ondalık üslü gösterime dönüştürür n Bu çağrı tarafından o ana kadar yazılan karakter sayısını işleve döndürür. Sonuç, bağımsız değişken tarafından gösterilen değere yazılır p Bir işaretçi tanımlayan bir uygulama tanımlı karakter dizisi yazar. Dolayısıyla, biçim belirticisinin genel biçimi şöyledir:
%(flags)(width)(.precision)(length)specifier
- vlist: Yazılacak verileri içeren bağımsız değişkenlerin listesi.
vsnprintf () Dönüş değeri
- Başarılı olursa,
vsnprintf()
işlev yazılan karakter sayısını döndürür. - Başarısızlık durumunda negatif bir değer döndürür.
- Biçimlendirilmiş dizgenin uzunluğu buf_size'dan büyük olduğunda, kısaltılması gerekir. Bu gibi durumlarda
vsnprintf()
işlev, buf_size sınırı uygulanmamışsa yazılacak olan sonlandırıcı boş karakter hariç toplam karakter sayısını döndürür.
Örnek: vsnprintf () işlevi nasıl çalışır?
#include #include void write(char* buf, int buf_size, const char *fmt,… ) ( va_list args; va_start(args, fmt); vsnprintf(buf, buf_size, fmt, args); va_end(args); ) int main () ( char buffer(100); char fname(20) = "Bjarne"; char lname(20) = "Stroustrup"; char lang(5) = "C++"; write(buffer, 27, "%s was created by %s %s", lang, fname, lname); printf("%s", buffer); return 0; )
Programı çalıştırdığınızda, çıktı:
C ++ Bjarne tarafından oluşturulmuştur