2016-04-08 14 views
-1

Öncelikle, burada C kodu:C içinde bir işlev içinde bir dizenin boyutunu nasıl bulunur? Açıklamaya önce

#include <stdio.h> 

void printSize(char* str); 

int main() 
{ 
    char a[100] = "StackOverflow"; 
    printSize(a); 
    return 0; 
} 

void printSize(char* str) 
{ 
    int n = sizeof(str)/sizeof(char); 
    printf("%d" ,n); 
} 

zaten 100 Ben tahsis etmişlerdir boyutu olduğu gibi, ben "100" değerini yazdırmak için benim işlevi almaya çalışıyorum görebileceğiniz gibi char dizilim a için. Ancak ben cevabım olarak 8 alıyorum. Şimdi neden 8 tane aldığımı biliyorum, çünkü işaretçinin boyutunu yazdırıyor. Bu yüzden benim soru şu ki, "100" değerini yazdırmak için bu yöntemi kullanamazsam o zaman fonksiyonun içinden a'a ayrılan belleği nasıl bulabilirim?

Teşekkür

+2

Kolay yöntemlerle bulamıyorsunuz. Genellikle ne yapılır, dizinin boyutunu size söyleyen işlevine "int size", başka bir parametre eklemektir. – atturri

+0

[C'deki Karakter Dizisinin uzunluğunu bulma] (http://stackoverflow.com/q/4180818/995714) –

+0

Temel olarak, C içinde bunu yapmanın bir yolu yok mu? Strlen() 'için – theprogrammer094

cevap

3

Eğer strlen işlevini kullanın bir dize uzunluğunu almak için. dizisinin dizininin boyutunu almak için bir argüman olarak iletmeniz gerekir.

İşaretçinin boyutunu elde ettiğinizde, gerçek işaretçisinin büyüklüğünü () alırsınız. Sizin durumunuzda, işaretçilerin 64 bit (8 bayt) olduğu 64 bitlik bir platformda görünüyorsunuz ve daha sonra sizeof(char) (her zaman 1 olarak tanımlanmıştır) bölü 8 değerini alırsınız.

+3

* #include '. – jdarthenay

+0

Evet, strlen'i ve neden 8'i çıkış olarak almamın nedenini biliyorum, ancak yine de bu işlevin fonksiyonuna üçüncü bir parametre eklemeden işe yaraması ve ayrıca depolamak için ayrılmış belleğime ekstra bir bayt eklememe boyut? – theprogrammer094

+0

@ rohitkrishna094 Hayır yolu yoktur. Bir dizi bir işaretçiye bozulduğunda, sahip olduğunuz tek şey işaretçidir ve derleyicinin dizi için sahip olabileceği tüm anlamsal bilgileri kaybetmiş olursunuz. –

İlgili konular