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.