请考虑以下代码:
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]!='\0') cout << i <<endl;
}
}
这在我的系统上仅打印0、1和2,因此我希望将“ rest”初始化为“ \ 0”。而且据我所知char mySt[100000]=""
初始化了整个数组'\0'
,只是说它与任何其他字符串文字不同而感到尴尬。但是,如果我的讲师提出其他要求(他认为这是“未定义的”),则我需要用最新且具体的证据(如果有)来备份我的主张。
我在MinGW g ++ 8.2.0上编译。预先谢谢你。
为了澄清,
答案 0 :(得分:6)
在C ++ 17和the current C++20 draft中,[dcl.init.string]节都讨论了如何使用字符串文字来初始化字符数组。该部分的第3段内容如下:
如果初始化程序少于数组元素,则每个未显式初始化的元素都应进行零初始化。
所以,是的,除了文字中的字符初始化的数组元素外,所有其他数组元素都保证为零值。
答案 1 :(得分:0)
#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