Dizge Uzunluğu
Önceki V. Oylum - Diziler ve Dizgeler Sonraki
Dizge Uzunluğu
Bir dizgenin uzunluğunu strlen işlevini kullanarak alabilirsiniz. Bu işlev string.h başlık dosyasında bildirilmiştir.
size_t strlen
(const char *s)
işlev
strlen işlevi boş karakter sonlandırmalı s dizgesinin bayt cinsinden uzunluğu ile döner. (Başka bir deyişle dizi içindeki boş karakterin indisi ile döner.) Örneğin,
strlen ("hello, world")
    => 12
Bir karakter dizisine uygulandığında strlen işlevi burada saklanan dizgenin uzunluğu ile döner, dizi için ayrılan boyutla değil. Dizi için ayrılan boyutu sizeof işleci ile öğrenebilirsiniz:
char dizge[32] = "hello, world";
sizeof (dizge)
    => 32
strlen (dizge)
    => 12
Yalnız dikkatli olun, dizge bir karakter dizisi değil de bir gösterici ise bu çalışmaz. Örneğin,
char dizge[32] = "hello, world";
char *ptr = dizge;
sizeof (dizge)
    => 32
sizeof (ptr)
    => 4  /* (göstericilerin 4 bayt olduğu bir makine üzerinde) */
Dizge argüman alan işlevlerle çalışırken bu yanlışı yapmak çok kolaydır; çünkü bu işlevlerin argümanları daima göstericidir, dizi değildir.
Ayrıca belirtmek gerekir ki, çokbaytlı kodlanmış dizgeler için dönen değer dizgedeki karakterlerin sayısı değildir. Bu değeri almak isterseniz dizge önce geniş karakterli bir dizgeye dönüştürülmeli ve wcslen işlevi kullanılmalı ya da aşağıdakine benzer bir kod kullanılmalıdır:
/* Girdi string içinde.
   Uzunluk ise n karakter umuluyor.  */
{
  mbstate_t t;
  char *scopy = string;
  /* dahili durum.  */
  memset (&t, '\0', sizeof (t));
  /* Karakter sayısını alalım.  */
  n = mbsrtowcs (NULL, &scopy, strlen (scopy), &t);
}
Bunun böyle yapılması kullanışsızdır. Karakter sayısına (bayt sayısı değil) ihtiyacınız varsa geniş karakterleri kullanmak en iyisidir.
İşlevin geniş karakterli eşdeğeri wchar.h başlık dosyasında bildirilmiştir.
size_t wcslen
(const wchar_t *ws)
işlev
wcslen işlevi, strlen işlevinin geniş karakterli eşdeğeridir. Dönen değer, ws ile gösterilen geniş karakter dizgesinin geniş karakter sayısıdır. (Bu değer aynı zamanda boş geniş karakter sonlandırmalı ws dizisinin boş geniş karakteri içeren elemanının indisidir.)
Bir karakteri oluşturmak için çoklu geniş karakter sıraları olmadığından dönen değer sadece dizideki bir indis değil, ayrıca geniş karakterlerin de sayısıdır.
Bu işlev ISO C99 standardının 1. düzeltmesinde tanımlıdır.
size_t strnlen
(const char *s,
 size_t      enbüyük-uzunluk)
işlev
strnlen işlevi, s dizgesinin uzunluğu enbüyük-uzunluk bayttan kısa ise bayt cinsinden uzunluğu ile döner. Aksi takdirde enbüyük-uzunluk ile döner. Diğer taraftan bu işlev aşağıdaki ifadeye eşdeğerdir:
(strlen (s) < n ? strlen (s) : enbüyük-uzunluk)
Bu daha etkilidir ve s dizgesi boş karakter sonlandırmalı değilse bile çalışır.
char dizge[32] = "hello, world";
strnlen (dizge, 32)
    => 12
strnlen (dizge, 5)
    => 5
Bu işlev bir GNU oluşumudur ve string.h başlık dosyasında bildirilmiştir.
size_t wcsnlen
(const wchar_t *ws,
 size_t         enbüyük-uzunluk)
işlev
wcsnlen işlevi, strnlen işlevinin geniş karakterli eşdeğeridir. enbüyük-uzunluk parametresi dizgenin içerebileceği en çok geniş karakterler sayısıdır.
Bu işlev bir GNU oluşumudur ve wchar.h başlık dosyasında bildirilmiştir.
Önceki Üst Ana Başlık Sonraki
Dizi ve Dizge Teamülleri Başlangıç Kopyalama ve Birleştirme
Bir Linux Kitaplığı Sayfası