2012-04-13 57 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()正在读取你的内存块的末尾以及你的程序堆的其他部分,直到它找到一个空字节。