char * malloc的strlen

时间:2012-04-13 18:51:15

标签: malloc strlen

我有以下代码

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 个答案:

答案 0 :(得分:5)

strlen()从您传递的地址开始返回第一个空字节('\ 0')的索引。 C中的字符串通常以此字符结尾,以标记字符串的结尾。

strlen()不返回实际内存块的长度。

在你的例子中,内存是未初始化的,并且strlen()正在读取你的内存块的末尾并进入程序堆的其他部分,直到它找到一个空字节。