c++ - 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
问题描述
我试图像这种语法一样用 NULL 初始化 char 数组。
char str[5] = NULL;
但它返回错误..如何在 C++ 中用 NULL 或 0 初始化 char 数组?
具体来说,我想在这个示例代码中打印“Hello”。
#include <iostream>
int main()
{
char str[5] = NULL;
if(!str)
std::cout << "Hello" << std::endl;
return 0;
}
由于初始化不正确,此代码将返回错误。那么,我应该用什么初始化句子替换句子?
解决方案
数组不能为空。Null 是指针的状态,数组不是指针。
在表达式!str
中,数组将衰减到第一个元素的地址。这个衰减地址的类型是指针,但不能修改衰减指针。由于数组永远不会存储在地址 0 中(除了可能在嵌入式系统上的某些特殊情况下,数组实际上可能存储在该内存位置),!str
永远不会是真的。
您可以做的是将数组的所有子对象初始化为零。这可以使用值初始化语法来实现:
char str[5]{};
正如我之前解释的那样,!str
仍然没有意义,并且总是错误的。您可能会做的一件明智的事情是检查数组是否包含空字符串。一个空字符串除了终止符之外什么都不包含(数组可以在终止符之后有元素,但这些不是字符串的一部分)。
检查字符串是否为空的最简单方法是检查第一个字符是否为终止符(值初始化的字符将是终止符,因此值初始化的字符数组确实包含空字符串):
if (!str[0]) // true if the string is empty
推荐阅读
- javascript - 如何使用 javascript 从 Web 中的 Firebase 检索数据?
- javascript - 重新布线不导入本地目录
- flutter - 如何在 Flutter 上优雅地在我自己的类中实现 Shared_preferences?
- apache2 - Apache2:如何记录被拒绝的连接和客户端超时
- amazon-web-services - 查找最新的 AWS API 版本以锁定版本
- c - #包括
导致错误 - javascript - 使用循环构建对象数组
- unity3d - 有什么方法可以改变 Unity 中自定义 Sprite 的 FilterMode?
- typescript - 可以选择在打字稿中扩展一种类型的道具?
- javascript - 根据另一个数组获取一个数组中元素的索引