如何在c ++中使用NULL(或0)初始化静态字符数组

fav*_*dew 0 c++ arrays null initialization char

我试图像这种语法一样用 NULL 初始化 char 数组。

char str[5] = NULL;
Run Code Online (Sandbox Code Playgroud)

但它返回错误.. 如何在 C++ 中用 NULL 或 0 初始化字符数组?

具体来说,我想在这个示例代码中打印“Hello”。

#include <iostream>
int main()
{
 char str[5] = NULL;
 if(!str)
  std::cout << "Hello" << std::endl;
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

由于初始化不正确,此代码将返回错误。那么,我应该用什么初始化句子替换句子?

eer*_*ika 7

数组不能为空。Null 是指针的状态,数组不是指针。

在表达式中!str,数组将衰减到第一个元素的地址。这个衰减地址的类型是一个指针,但是你不能修改这个衰减的指针。由于数组永远不会存储在地址 0 中(除非在嵌入式系统上的某些特殊情况下,数组可能实际上存储在该内存位置),!str因此永远不会为真。

您可以做的是将数组的所有子对象初始化为零。这可以使用值初始化语法来实现:

char str[5]{};
Run Code Online (Sandbox Code Playgroud)

正如我之前解释的,!str仍然没有意义,并且总是错误的。您可能会做的一件明智的事情是检查数组是否包含空字符串。空字符串除终止符外不包含任何内容(数组可以在终止符之后包含元素,但这些元素不是字符串的一部分)。

检查字符串是否为空的最简单方法是检查第一个字符是否为终止符(值初始化字符将是终止符,因此值初始化字符数组确实包含空字符串):

if (!str[0]) // true if the string is empty
Run Code Online (Sandbox Code Playgroud)