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

C ++ 'daki snprintf () işlevi, karakter dizisi arabelleğine biçimlendirilmiş bir dize yazmak için kullanılır.

Sprintf () 'den farklı olarak, tampona yazılabilecek maksimum karakter sayısı içinde belirtilir snprintf().

snprintf () prototipi

 int snprintf (char * buffer, size_t buf_size, const char * format,…);

snprintf()Fonksiyon biçimi tampon tarafından işaret dize yazar. Yazılabilecek maksimum karakter sayısı (buf_size-1).

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.

Başlık dosyasında tanımlanmıştır.

snprintf () Parametreler

  • buffer: Sonucu yazmak için dizge tamponunun işaretçisi.
  • buf_size: Buf_size-1 olan arabelleğe yazılacak maksimum karakter sayısını belirtin.
  • 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

  • …: Yazdırılacak verileri belirten diğer ek bağımsız değişkenler. Biçim tanımlayıcısına göre bir sırayla oluşurlar.

snprintf () Dönüş değeri

Başarılı olursa, snprintf()işlev, sonlandırıcı boş karakter hariç, yeterince büyük arabellek için yazılmış olan karakter sayısını döndürür. Başarısızlık durumunda negatif bir değer döndürür.

Yalnızca ve ancak döndürülen değer negatif değilse ve buf_size değerinden küçükse çıktının tamamen yazılmış olduğu kabul edilir.

Örnek: snprintf () işlevi nasıl çalışır?

 #include #include using namespace std; int main() ( char buffer(100); int retVal, buf_size = 100; char name() = "Max"; int age = 23; retVal = snprintf(buffer, buf_size, "Hi, I am %s and I am %d years old", name, age); if (retVal> 0 && retVal < buf_size) ( cout << buffer << endl; cout << "Number of characters written = " << retVal << endl; ) else cout << "Error writing to buffer" << endl; return 0; )

Programı çalıştırdığınızda, çıktı:

 Merhaba, ben Max ve 23 yaşındayım Yazılan karakter sayısı = 34

Ilginç makaleler...