如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
how to initialize static char array with NULL(or 0) in c++
我试图像这样语法一样用 NULL 初始化 char 数组。
char str[5] = NULL;
但它返回错误.. 如何在C++中用 NULL 或 0 初始化字符数组?
具体来说,我想在此示例代码中打印"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
//...
char str[5] = {' '};
if (str[0] != ' ')
//...
如果你现在把一些字符放到 str 中,它会打印 str 直到最后一个 '\0'。 每个字符串文本都以"\0"结尾,必须确保数组也以"\0"结尾,否则,数据将被读取到数组之外(直到遇到"\0"(,并且可能超出应用程序的内存空间,在这种情况下,应用程序将崩溃。
你应该使用 std::string 或 QString,但是如果你需要一个字符串。
你不能用NULL
初始化 char 数组,数组永远不能NULL
。您似乎混淆了指针和数组。指针可以用NULL
初始化。
你可以用 0 初始化数组的字符,那就是
char str[5] = {0};
但我不认为这就是你要问的。
#include <stdio.h>
using namespace std;
int main() {
char str[5];
for(int i=0;i<5;i++){
str[i]=NULL;
}
printf("success");
return 0;
}
希望这有帮助。
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- "local scope"中的 C++ 初始化静态变量
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 未调用的初始化静态thread_local结构的构造函数和析构函数
- 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
- 如何从静态类函数初始化静态类对象
- C++:用IIFE线程初始化静态局部变量安全吗
- 如何在 c++ 中初始化静态类对象?
- 使用 lambda 初始化静态数组
- 使用 lambda 函数初始化静态数据成员
- 如何从 std::integer_sequence 初始化静态数组?
- 在构造函数中初始化静态函数指针
- C - 初始化静态成员的方法
- 大括号使用枚举类初始化静态常量unordered_map
- C++ main 函数中初始化静态变量
- 在定义(.cpp文件)中初始化静态浮点 constexpr 成员是可能的
- 错误 C2864:'element::next':只能在类 (STRUCT) 中初始化静态常量整数数据成员
- 我应该使用类内发起器初始化静态常量数据成员还是在其类外的定义中初始化静态常量数据成员
- 如何在运行时使用静态成员函数初始化静态成员变量
- 与其他静态const成员初始化静态常量成员