Bu bölümde dizge ve karakterlerin okunması için %s, %S, %[, %c ve %C girdi dönüşüm belirteçleri açıklanmıştır.
Bu dönüşümlerden girdilerin alınması için iki seçeneğiniz vardır:
%c dönüşümü en basitidir: Daima sabit sayıda karakterle eşleşir. En büyük alan genişliği kaç karakter okunacağını söyler; en büyük alan genişliğini belirtmezseniz öntanımlı olarak 1 değeri kullanılır. Bu dönüşüm okuduğu metnin sonuna bir sonlandırıcı boş karakter eklemez. Ayrıca metnin içindeki boşluk karakterlerini atlar. Özellikle sonraki n karakteri okur, bu kadar karakter bulamazsa başarısız olur. %c dönüşümü daima sabit uzunlukta okuma yaptığından taşmadan kaçınmak için tamponu yeterli uzunlukta yapmalısınız.
%lc veya %C dönüşümleri akımın, harici bayt akımından açıldığı sırada saptanan dönüşüm kullanılarak çevrilen geniş karakterlerin saklanmasını sağlar. Ortamdan okunan baytların sayısı MB_CUR_LEN * n ile sınırlıdır ve çıktı dizgesinde saklanan en çok n geniş karakter alınır.
%s dönüşümü boşluk karakterleri olmayan karakterlerden oluşan bir dizge ile eşleşir. Dahili boşlukları atlar ve iptal eder, fakat biraz okuma yaptıktan sonra çok fazla boşluk karakterine rastlarsa durur. Okuduğu metnin sonuna bir boş karakter ekler.
Örneğin, okunacak girdi,
ise, %10c dönüşümü " hello, wo" üretir. Aynı girdi için %10s dönüşümü kullanılırsa, "hello," üretilir.
| Uyarı |
---|
%s için bir alan genişliği belirtirseniz, okunan karakter sayısı boşluk karakterine rastlanan yer ile sınırlıdır. Bu hemen hemen kaçınılmaz olarak geçersiz bir girdinin yazılımınızın çökmesine sebep olacağı anlamına gelir ki bu bir yazılım hatasıdır. |
%ls ve %S dönüşümleri %s gibi kotarılır, bir farkla, dış bayt dizisi, kendi karakter kodlaması ile geniş karakterlere akım ile ilişkili dönüşüm kullanılarak çevrilir. Belirteç ile birlikte genişlik belirtilirse, bunlar geniş karakterleri öçtüğünden, akımdan kaç bayt okunacağı doğrudan doğruya saptanmaz. Fakat bir üst sınır, genişlik değeri ile MB_CUR_MAX çarpılarak hesaplanabilir.
Belli kriterlere göre sizin seçiminize bağlı olarak karakterlerin okunmasını sağlamak isterseniz %[ dönüşümünü kullanın. [ ve ] ayraçlarının arasını düzenli ifadelerdeki sözdizimini kullanarak yazabilirsiniz. Özel durumlar olarak:
] karakteri ifadenin ilk karakteri olarak belirtilebilir.
Bir gömülü - karakteri (ifadenin ilk veya son karakteri olamaz) bir karakter aralığını belirtmek için kullanılabilir.
Bir ^ karakteri [ ayracından sonra kullanılırsa, girdi karakterleri burada listelenen karakterlerin dışındakilerdir.
%[ dönüşümü dahili boşluk karakterlerini atlamaz.
Aşağıda bazı %[ dönüşüm örnekleri ve anlamları vardır:
- %25[1234567890]
25 haneye kadar bir sayı ile eşleşir.
- %25[][]
25 köşeli ayraca kadar bir dizge ile eşleşir.
- %25[^ \f\n\r\t\v]
Hiçbir boşluk karakteri içermeyen 25 karaktere kadar bir dizge ile eşleşir. Bu %s’den tamamen farklıdır, çünkü girdi, boşluk karakterlerinden biri ile başlarsa bu %[ dönüşümü bir eşleşme hatası bildirir ama %s dönüşümü onu basitçe iptal eder.
- %25[a-z]
25 karaktere kadar küçük harflerle eşleşir.
%c ve %s gibi %[ belirteci de l tür değiştiricisi varsa geniş karakterleri üretebilir. Yukarıda bu konu ile ilgili bahsedilen herşey %l[ için de geçerlidir.
| Bir hatırlatma daha |
---|
Bir en büyük genişlik belirtmezseniz ya da a imini kullanmazsanız %s ve %[ belirteçleri tehlikelidir, çünkü girdi çok uzun olursa tampon taşar. Tamponun ne kadar uzunlukta olduğunun önemi yoktur, bir kullanıcı onu da taşıracak bir girdi yapabilir. İyi geliştirilmiş bir yazılım geçersiz bir girdiyi kapsamlı bir hata iletisi ile bildirir, çökerek değil. |