2013-07-04 50 views
0

我有這樣的代碼:調用malloc後,我得到意想不到的大小

char* str = (char*)malloc(27); 
int num = strlen(str); 

我在debag模式運行這個程序,我已經看到,num是等於40.爲什麼呢?爲什麼不是27?

+0

在C++中,您應該使用new而不是malloc。另外我會建議使用std :: string或std :: vector 而不是動態數組。 – Borgleader

+3

對於原始標題真的很想動-1。每當一個圖書館功能表現奇怪,你的第一個想法應該是「我怎麼用它錯了?」不是「圖書館壞了」。 –

+0

如果你看過這兩個函數的文檔,答案會很明顯。 –

回答

7

因爲malloc()沒有初始化分配的內存(即使它沒有將它歸零,所以在這裏沒有幫助),並且strlen()取決於是否存在空終止字符。 strlen()將停止計數只有當它遇到一個空終止字符,在這種情況下,它是在分配的內存(讀取它不應該是的地方)後13個字節。 strlen()沒有獲得數組或(或任何其他動態分配函數)分配的字節數。例如:

char buf[32] = "hello"; /* Implicit null terminating character after 'o'. */ 
assert(5 == strlen(buf)); /* It does not equal 32. */ 
+0

請注意,如果他使用'calloc','strlen'的結果應該是0,這也不符合OP的預期。 – dmckee

+0

@dmckee,正確。希望這個答案很明顯。 – hmjd

相關問題