char[](c-string) 的初始化标准

initialization Standard for char[](c-string)

考虑以下代码:

int main(){
    char hi[5] = "Hi!";
    printf("%d", hi[4]);    
}

将打印什么?更重要的是,最新的C++中,标准中是否提到了将要打印的内容标准?如果有提及,它在哪里?

由于某种原因,很难找到关于此的最新信息,而且各种来源的信息相互矛盾。我试过en.cppreference.com和cplusplus.com,前者没有任何信息,后者声称值未确定。然而,

using namespace std;
int main(){
    char mySt[1000000] = "Hi!";
    for(int i=0;i<1000000;++i){
        if(mySt[i]!='[=11=]') cout << i <<endl;
    }
}

这在我的系统上只打印 0、1 和 2,因此我希望 "rest" 被初始化为“\0”。另外据我所知 char mySt[100000]="" 初始化整个数组 '[=13=]',说它与任何其他字符串文字不同感觉很尴尬。但是我的导师另有说法(他声称是"undefined"),如果有的话,我需要用最近的具体证据来支持我的说法。

我在 MinGW g++ 8.2.0 上编译。提前谢谢你。

澄清一下,

在 C++17 和 the current C++20 draft 中,[dcl.init.string] 部分讨论了使用字符串文字初始化字符数组。该节第 3 段内容如下:

If there are fewer initializers than there are array elements, each element not explicitly initialized shall be zero-initialized.

所以是的,除了由文字中的字符初始化的数组元素之外的所有数组元素都保证为零值。

#include <stdio.h>
int main()
{
    char mystr[5] = "Hi!";
    for ( int i = 0; i < sizeof (mystr); i++)
        printf("%d\n", mystr[i]);   
}

======输出======

./a.out 
72
105
33
0
0