2013-08-27 25 views
2
char Str[][5]={"one","two","three","four","five"}; 
char Str1[][6]={"one","two","three","four","five","six"}; 

printf("Size of Str is %d",sizeof(Str)); 
printf("\nSize of Str1 is %d",sizeof(Str1)); 
//Compile on Cygwin 64 bit on windows 64bit machine 

當我檢查Str和Str1的大小時,我分別得到了25和36。 背後的原因是什麼?我聲明的字符串是如何存儲在內存中的?您使用的二維陣列,每個元件在C 64位機中字符串的大小

回答

1

第一殼體具有的陣列大小5.所以總size=(maximum size of array element)*(number of array elements)i,e) 5*5=25.

同樣第二情況下,也與每個元素的二維陣列具有6數組大小所以總size=(maximum size of array element)*(number of array elements)`I, e)6 * 6 = 3。

下面的部分代碼顯示了字符串的排列方式。不管初始數據的長度

for(i = 0; i<5; i++) 
    printf("%s\n", Str[i]); 
0

(假設你不超限數組的大小),你分配每串一個固定的量 - 所以這是你會得到什麼。

與第一個你有5串[5]字節:

"one__two__threefour_five_" 

,其中 「_」 是字符串之間未初始化字節。 5x5 = 25個字節。 (對於36字節數組也是如此)。

+0

只是'_'就在't'字符是單位字節之前,其餘'_'是'\ 0'字節 – Michy

+0

啊,這是真的 - 字符串將終止零零 - 這裏有空間給他們(在「一「,」二「,」四「和」五「)。謝謝 –

0

這些是字符的二維數組,而不是一個字符串數組。

我聲明的字符串是如何存儲在內存中的?

不好。例如,第一個陣列中的每個元素佔用5個字節。你認爲你會得到「三化」,如果你做

printf ("%s\n", Str[2]); 

但你得到「threefour」代替。

相關問題