2

我有以下代码

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。有人可以解释为什么吗?

4

1 回答 1

5

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

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

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

于 2012-04-13T18:59:30.930 回答