我有以下代码
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。 有人可以解释原因吗?
答案 0 :(得分:5)
strlen()从您传递的地址开始返回第一个空字节('\ 0')的索引。 C中的字符串通常以此字符结尾,以标记字符串的结尾。
strlen()不返回实际内存块的长度。
在你的例子中,内存是未初始化的,并且strlen()正在读取你的内存块的末尾并进入程序堆的其他部分,直到它找到一个空字节。