strfmon işlevi strftime işlevine benzer. İşlev bir tampon, tampon boyu ve biçim dizgesi alır ve çıktı biçim dizgesi ile belirtildiği gibi biçimlenerek metin olarak tampona yazılır. İşlev, strftime gibi tampona yazılan baytların sayısı ile döner.
İki fark vardır: strfmon birden fazla argüman alır ve şüphesiz biçim belirtimi farklıdır. strftime'a benzer olarak, biçim dizgesi çıktıda olduğu gibi normal metindir ve biçim belirteçleri % işareti ile belirtilir. printf işlevinde olduğu gibi, % işaretinin ardından, biçim karakterinden önce isteğe bağlı olarak çeşitli seçenekler ve biçimleme bilgileri belirtilebilir:
Belirtimin sonraki parçası isteğe bağlı olan alan genişliğidir. Bir genişlik belirtilmemişse 0 verilmiş kabul edilir. Çıktılama sırasında, işlev önce ne kadar alan gerektiğini saptar. Eğer gerektiği kadar genişlik belirtilmişse çıktı bu alanı kullanır. Aksi takdirde, belirtilen genişlik dolgu karakteri ile doldurularak çıktılama yapılır. - iminin varlığına vaya yokluğuna bağlı olarak işaretin bulunduğu tarafın boşluğu saptanır. Varsa, çıktı sola yanaşık yapılarak boşluk sağa eklenir ya da tersi yapılır.
Şimdiye kadar printf ve strftime biçimlerine benzerliğinden dolayı biçim oldukça bildik göründü. Ancak sonraki iki alan biraz yeni. İlki # karakteri ile başlayan bir ondalık sayı dizgesidir. Bu dizge ondalık ayracın solunda kalan rakam (karakter sayısını değil) sayısını belirtir. Bu miktara gruplama karakterleri dahil değildir. Basılacak sayının rakamları bu genişliği dolduramazsa, boş kalan alan = imi ile belirtilmişse o karakterle aksi takdirde boşluk karakteri ile doldurulur. Örneğin alan genişliği 6 ve dolgu karakteri * olarak verilmişse, 123 sayısı, ***123 olarak biçimlenecektir.
İsteğe bağlı ikinci alan ise
. karakteri ile başlayan bir ondalık sayı dizgesidir. Bu dizge ondalık ayracın sağındaki rakam sayısını belirtir. Öntanımlı değer yerelin
frac_digits ve
int_frac_digits değerleridir (bkz.
Soysal Sayısal Biçimleme Parametreleri). Eğer belirtilen genişlik bütün haneleri göstermek için yeterli değilse, yuvarlama yapılır. Alan genişliği sıfır olarak belirtilmişse ondalık ayraç basılmaz.
Bir GNU oluşumu olarak GNU C kütüphanesindeki strfmon gerçeklemesi bu seçeneklerden sonra isteğe bağlı L biçim belirtecini kabul eder. Eğer bu belirteç varsa, belirtilen argüman bir double değer değil long double değer kabul edilir.
Son eleman bir biçim belirtecidir. Üç belirteç belirtilebilir:
- i
Bir uluslararası parasal değerin biçimlenmesi için yerelin kuralları kullanılır.
- n
Bir ulusal parasal değerin biçimlenmesi için yerelin kuralları kullanılır.
- %
Çıktıya % işareti basılır. Sadece %% belirtilebilir, bir im, seçenek ya da belirteç belirtilmesine izin verilmemiştir.
printf işlevinin yaptığı gibi, işlev biçim dizgesini soldan sağa okur ve biçim dizgesinden sonra verilmiş olan değerleri bu dizgeye göre biçimlendirir. Değerler L belirteci varsa long double, aksi takdirde double türünde kabul edilir. Sonuç, tampon ile gösterilen tamponda en fazla azamiboyut karakterlik saklanır.
İşlevin dönüş değeri tampon'da saklanan boş karakter sonlandırmalı dizgenin karakter sayısıdır. Eğer tampon içinde saklanacak karakterlerin sayısı azamiboyut'tan büyükse tamponun yetersiz kaldığını belirtmek için işlev -1 ile döner. Bu durumda errno değişkenine E2BIG değeri atanır.