C ++ vsnprintf () - C ++ Standart Kitaplığı

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 

Ilginç makaleler...