|
int printf | (const char *şablon, …) |
int wprintf | (const wchar_t *şablon, …) |
int fprintf | (FILE *akım, const char *şablon, …) |
int fwprintf | (FILE *akım, const wchar_t *şablon, …) |
int sprintf | (char *s, const char *şablon, …) |
Uyarı | |
---|---|
sprintf işlevi tehlikeli olabilir. Potansiyel olarak s dizgesi için ayrılan yer biçim dizgesinin ürettiği dizge için yetersiz olabilir. Alan genişliği parametresinin en küçük alan genişliğini belirttiğini ve kimi zaman bu genişliğin aşılabildiğini hatırlayın. Bu sorundan kaçımak için aşağıda açıklanacak olan snprintf veya asprintf işlevlerini kullanabilirsiniz. |
int swprintf | (wchar_t *s, size_t boyut, const wchar_t *şablon, …) |
Not | |
---|---|
Benzeri olan dar yönlenimli akım işlevleri daha az parametre alır. swprintf işlevi aslında snprintf işlevinin karşılığıdır. sprintf işlevi tehlikeli olabildiğinden, ISO C komitesi aynı yanlışı tekrar yapmaktan kaçınmalı ve sprintf işlevinin tam karşılığı olan bir işlevi tanımlamama kararı almalıdır. |
int snprintf | (char *s, size_t boyut, const char *şablon, …) |
/* isim isminde ve deger değerinde bir değişkenin değerini açıklayan bir ileti oluşturalım. */ char * ileti_yap (char *isim, char *deger) { /* Nasılsa 100 karakterlikten daha fazla yere ihtiyaç olmaz. */ int boyut = 100; char *tampon = (char *) xmalloc (boyut); int nkar; if (tampon == NULL) return NULL; /* Ayrılan alana iletiyi yazmaya çalışalım. */ nkar = snprintf (tampon, boyut, "%s değişkeninin değeri %s'dir", isim, deger); if (nkar >= boyut) { /* Artık ne kadar yere ihtiyaç olduğunu bildiğimize göre tamponu yeniden ayıralım. */ tampon = (char *) xrealloc (tampon, nkar + 1); boyut = nkar + 1; buffer = (char *) xrealloc (tampon, boyut); if (tampon != NULL) /* Tekrar deniyoruz. */ snprintf (tampon, boyut, "%s değişkeninin değeri %s'dir", isim, deger); } /* Son çağrı çalıştığından dizge ile dönüyoruz. */ return tampon; }
Dikkat | |
---|---|
GNU C kütüphanesinin 2.1 öncesi sürümlerinde dönüş değeri sonlandırıcı boş karakter hariç saklanan karakterlerin sayısıydı. s dizisinde yeterli yer yoksa -1 dönüyordu. Bu, ISO C99 standardına uyum sırasında değiştirildi.
|
|