c++ - Strlen 返回不合理的数字

标签 c++ strlen

如果我写:

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/

相关文章:

c++ - QMetaObject::invokeMethod 不接受非常量参数

java - 使用c++模板生成JNI函数

c++ - 使用 strlen 时出错

C程序在插入后查找数组中元素的数量并且在插入时不计数

c - 如何仅使用 1 个数组查找长度 >5 的单词?

c++ - 结果得到-858993460 c++

c++ - 基于多个字段搜索大数据集的有效方法

c++ - std::vector 的高性能替代品

c++ - 为 unsigned char * 获取 strlen 的正确方法是什么?

c - 使用 malloc 分配内存并找到 strlen()