Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有以下代码
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。有人可以解释为什么吗?
strlen() 返回第一个空字节 ('\0') 的索引,从您传递的地址开始。C 中的字符串通常总是以这个字符结尾,以标记字符串的结尾。
strlen() 不返回实际内存块的长度。
在您的示例中,内存未初始化,并且 strlen() 正在读取内存块的末尾并进入程序堆的其他部分,直到找到一个空字节。