如果我写:
char lili [3];
cout<<strlen(lili)<<endl;
然后打印出来的是:11
但是如果我写:
char lili [3];
lili [3]='\0';
cout<<strlen(lili)<<endl;
然后我得到 3。
我不明白为什么它在第一部分返回 11?
strlen 不应该返回 3,因为我为 lili
分配了 3 个字符吗?
最佳答案
这是因为 strlen
使用“C 风格”空终止字符串。如果您像在第一个示例中那样给它一个普通指针或未初始化的缓冲区,它将继续遍历内存直到它 a) 找到 \0
,此时它将返回该长度“字符串”,或 b) 直到它到达 protected 内存位置并生成错误。
鉴于您已标记此 C++,也许您应该考虑使用 std::array
或更好的 std::string
。两者都提供长度返回函数 (size()
),并且都有一些额外的范围检查逻辑,这将有助于防止您的代码像您在这里所做的那样漫游到未初始化的内存区域。
关于c++ - Strlen 返回不合理的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11222613/