如果我写:

char  lili [3];
cout<<strlen(lili)<<endl;

那么打印的是:11

但是如果我写:
char  lili [3];
lili [3]='\0';
cout<<strlen(lili)<<endl;

然后我得到3。

我不明白为什么它在第一部分返回11?
由于我为lili分配了3个字符,因此strlen不应该返回3吗?

最佳答案

这是因为strlen使用“C样式”的以null终止的字符串。如果像在第一个示例中一样,给它一个普通的指针或未初始化的缓冲区,它将一直在内存中前进,直到a)找到一个\0,此时它将返回该“字符串”的长度,或者b)直到它到达 protected 内存位置并生成错误。

鉴于已经标记了此C++,也许您应该考虑使用std::array或更好的std::string。两者都提供了返回长度的函数(size()),并且都具有一些附加的范围检查逻辑,这些逻辑将有助于防止您的代码在您执行此处操作时进入未初始化的内存区域。

09-25 20:57