Bu bölümde printf için çeşitli dönüşümlerden bahsedilmiştir.
%c dönüşümü tek bir karakter basar. l değiştiricisinin olmadığı durumda int türündeki argüman önce unsigned char türüne dönüştürülür. Bundan sonra, bir geniş yönlenimli akım işlevi kullanılmışsa karakter karşı düşen geniş karaktere dönüştürülür. - imi kullanılmış, başka bir im tanımlanmamış, tür ve hassasiyet belirtilmemişse karakter alanda sola yanaştırılır. Örneğin:
printf ("%c%c%c%c%c", 'h', 'e', 'l', 'l', 'o');
deyimi hello basar.
Bir l değiştiricisi varsa argümanın wint_t türünde olacağı umulur. Bir çokbaytlı işlev içinde kullanılmışsa geniş karakter çıktıya eklenmeden önce bir çok baytlı karaktere dönüştürülür. Bu durumda birden fazla bayt içeren çıktı üretilebilir.
%s dönüşümü bir dizge basar. Bir l değiştiricisi yoksa karşı düşen argüman char * (ya da const char *) türünde olmalıdır. Bir geniş yönlenimli akım işlevi kullanılmışsa, dizge bir geniş karakter dizgesine dönüştürülür. Yazılacak karakterlerin sayısı hassasiyet parametresi ile belirtilebilir; aksi takdirde, sonlandıran boş karaktere kadar boş karakter hariç dizge akıma çıktılanır. - imi kullanılmış ama başka bir im tanımlanmamış, tür ve hassasiyet belirtilmemişse dizge alanda sola yanaştırılır. Örneğin:
printf ("%3s%-6s", "no", "where");
deyimi nowhere basar.
Bir l değiştiricisi varsa argümanın wchar_t (ya da const wchar_t *) türünde olacağı umulur.
%s dönüşümüne istemeyerek argüman olarak bir boş gösterici aktarırsanız, GNU kütüphanesi onu (null) olarak basar. Bunun çökmekten daha iyi olduğunu düşünüyoruz. Ancak bir boş göstericiyi bile bile aktarmak iyi bir uygulama olmayacaktır.
%m dönüşümü
errno hata kodunun karşılığı olan dizgeyi basar. Bkz.
Hata İletileri. Burada:
fprintf (stderr, "`%s' açılamıyor: %m\n", filename);
deyimi ile
fprintf (stderr, "`%s' açılamıyor: %s\n", filename, strerror (errno));
deyimi eşdeğerdir. %m dönüşümü bir GNU oluşumudur.
%p dönüşümü bir gösterici değeri basar. Karşı düşen argüman void * türünde olmalıdır. Uygulamada herhangi bir türden gösterici kullanabilirsiniz.
GNU sisteminde boş olmayan göstericiler bir %#x dönüşümü kullanılmış gibi işaretsiz tamsayılar olarak basılır. Boş göstericiler (nil) olarak basılır. (Diğer sistemlerde göstericiler farklı basılabilir.) Örneğin:
printf ("%p", "testing");
deyimi 0x’ten sonra "testing" dizge sabitinin adresini bir onaltılık sayı olarak basar; testing sözcüğünü basmaz.
- imi kullanılmış ama başka bir im tanımlanmamış, tür ve hassasiyet belirtilmemişse gösterici değeri alanda sola yanaştırılır.
%n belirteci diğer dönüşüm belirteçlerine benzemez. Bir int türüne gösterici olan bir argüman kullanır, ama birşey çıktılamaz, onun yerine o çağrı ile çıktılanan karakterlerin sayısını kaydeder. h ve l tür değiştiricileri kullanılarak (birim, hassasiyet veya alan genişliği belirtilemez) argümanın türü int * yerine short int * veya long int * türünde belirtilebilir. Örneğin:
int nchar;
printf ("%d %s%n\n", 3, "bears", &nchar);
kod parçası
basar ve nchar'a 7 değerini atar, çünkü basılan karakterlerin sayısı 7'dir.
%% belirteci bir % işareti basar. Bu belirteç bir argüman kullanmaz ve im, alan genişliği, hassasiyet veya tür değiştirici belirtilemez.