2012-04-13 54 views
2

的,我有以下代碼的strlen的char * malloc的

char *new_str; 
int size_in_bytes; 
int length; 

size_in_bytes = 2*sizeof(char); 
new_str = (char *)malloc(size_in_bytes); 
length = strlen(new_str); 

期待長度爲2,實際上它是16 有人能解釋爲什麼嗎?

+1

此代碼正在讀取超出分配的內存並可能導致未定義的行爲 – 2012-04-13 19:01:41

+0

使用'calloc()',那麼您將得到正確的答案(應該是0)。沒有(可移植的)方式來確定分配塊的大小(除非最新標準中有新內容)。 – TMN 2012-04-13 19:26:51

回答

5

strlen()返回第一個空字節('\ 0')的索引,從傳遞它的地址開始。 C中的字符串通常總是以該字符結尾,以標記字符串的結尾。

strlen()不會返回實際內存塊的長度。

在你的例子中,內存是未初始化的,而strlen()正在讀取你的內存塊的末尾以及你的程序堆的其他部分,直到它找到一個空字節。