Başlıktan da anlaşılacağı gibi, sorum C
de bir stringin boyutunu nasıl elde edeceğim. Eğer onu (stringi) içinde malloc
olmayan bir fonksiyonda bildirdiysem sizeof
kullanmak iyi midir? Ya da, eğer onu bir işaretçi olarak bildirdiysem? Ya onu malloc
ile başlattıysam? Kapsamlı bir yanıt almak istiyorum.
strlen]1 kullanabilirsiniz. Boyut, sonlandırıcı boş karakter tarafından belirlenir, bu nedenle geçirilen dize geçerli olmalıdır.
Bellek tamponunun boyutunu almak istiyorsanız, dizenizi içerir ve ona işaretçiniz vardır:
sizeof
kullanabilirsiniz.Dinamik ve statik diziler arasındaki fark konusunda kafanız karıştıysa, this'ü kontrol edin.
Boş sonlandırılmış bir dizenin** uzunluğunu elde etmek için strlen
kullanın.
sizeofdizinin değil **dizinin** uzunluğunu döndürür. Eğer bir dizi (
char s[]) değil de bir işaretçi (
char *s) ise, işaretçinin boyutunu (32 bit sistemlerde genellikle 4 bayt) döndüreceğinden çalışmayacaktır. Sanırım bir dizi bir işaretçi olarak geçirilecek veya döndürülecektir, bu nedenle dizinin boyutunu kontrol etmek için
sizeof` kullanma yeteneğini kaybedersiniz.
Yani, yalnızca dizi tüm diziyi kapsıyorsa (örneğin char s[] = "stuff"
), statik olarak tanımlanmış bir dizi için sizeof
kullanmak istediğinizi döndürür (ve null-terminator'ı bulmak için döngü yapması gerekmeyeceğinden daha hızlı olur) (son karakter bir null-terminator ise, 1 çıkarmanız gerekir). Eğer dizinin tamamını kapsamazsa, istediğinizi döndürmeyecektir.
Tüm bunlara alternatif olarak dizenin boyutu da saklanabilir.
Ancak sizeof
bu özel dize türü için çalışır:
char str[] = "content";
int charcount = sizeof str - 1; // -1 to exclude terminating '\0'
Eğer str
bir işaretçi ise (sizeof
işaretçinin boyutunu döndürür, genellikle 4 veya 8) veya belirtilen uzunlukta bir dizi ise (sizeof
belirtilen uzunluk ile eşleşen bayt sayısını döndürür, char tipi için aynıdır) çalışmaz.
Sadece strlen()
kullanın.