关于C++字符串的某个概念的疑惑

图片说明

好疑惑。。为什么A不可以呢(泪目

以及关于B选项,书上说这种方式是合法的,于是我编写了一个简单的代码如下:

#include<iostream>
#include<string.h>
using namespace std;
int main(){
    char str[5]={'L','u','c','k','y'};
    puts(str);
    return 0;
}

然后输出了“Lucky",毫无错误嘛

而且我又特地把str[5]里面的‘5’给删了来实验A选项,输出真的是一毛一样呜呜呜

小白真诚求各位大佬解答!!!(在线哭泣

图片说明

应该是C,首先A中字符数组没有‘\0’,B同理,D中str【5】只能放下5个字符,结束符‘\0’放不下,所以错

‘\0’是最后一个不可见字符,char[6]={'L','u','c','k','y'}才是正确的定义

char str[] = {'L','u','c','k','y','\0'}; //如果A选项是这样就没错,这题主要考查‘\0’