使用错误数量的元素初始化的C++ char数组

Wat*_*ave 1 c++ visual-studio-2013

当我使用指针初始化cstring时,如下所示:

char* title = new char[endTitleChar - startTitleChar + 1];
Run Code Online (Sandbox Code Playgroud)

...它初始化为char [24],无论方括号中表达式的实际值如何,都是从12到1的任何值.

这里发生了什么事?

Luc*_*ore 7

我不信.

你得到了endTitleChar - startTitleChar + 1分配的字符,但它们具有不确定的价值.如果你这样做

char* title = new char[endTitleChar - startTitleChar + 1]();
//                                                    ---||---
Run Code Online (Sandbox Code Playgroud)

你会把它们初始化为0.

  • @Watercleave将一个非空终止的C字符串(如你的)提供给`cout`是未定义的行为.因此,该检查无效.事实上,它很危险. (3认同)
  • 使用`cout << title;`并计算控制台输出中的字符数. (2认同)