【问题标题】:Strlen returns undefined behaviour with C++ [duplicate]Strlen 使用 C++ 返回未定义的行为 [重复]
【发布时间】:2014-11-21 08:33:56
【问题描述】:
int main ()
{
     char* tab=new char[14] ;
     cout << " lenght with sizeof: "<<sizeof(tab)<<endl;
     cout << " length with strlen: "<<strlen(tab)<<endl;
     
     system(" pause");
     return 0;
}

我得到了输出:

sizeof 的长度:4

strlen 长度:30

我期待sizeof 的结果,但不是strlen 的返回结果!

对于那些急于发表的人来说,这是一个重复的问题。 我想说,这根本不是机会。因为我知道编译时间和运行时间以及许多其他关于strlensizeof 的事情,但是我找不到这个结果的解释。

提前感谢您的帮助。

【问题讨论】:

  • sizeof(tab) 为您提供char* 指针的大小,而不是分配的空间大小,或存储在其中的以空结尾的 c 字符串的大小。
  • 您的char 数组未初始化,因此strlen 的结果未定义,因为它将计算所有字符,直到找到空字符为止。
  • 这么多重复...
  • @SADOK 看看 @geoffroy 的评论,这就是为什么。
  • @SADOK 读到:'顺便说一句,重复有什么问题?'

标签: c++ visual-c++ c++11 strlen


【解决方案1】:

由于您正在分配一个 char 数组但没有对其进行初始化,strlen() 将从 tab 指针的开头开始计数,指向第一个 NUL 字符。所以结果取决于你的程序堆的内容。

【讨论】:

  • 应该提到这是未定义的行为。
  • 按原样,这是一个错误的答案。
  • 欢迎解释它的坏处,或提供更好的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 2021-05-14
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多