我正在做作业,我声明了一个2D数组,但是它没有打印我想要的东西。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
char NOTE[7][3] = { {'D','O'} , {'R','E'} , {'M','I'} , {'F','A'} , {'S','O','L'} , {'L','A'} , {'S','I'} };
for (int i = 0; i <7 ; i++)
cout <<setw(10)<< NOTE[i] << "\n";
return 0;
}
我想得到:
DO
RE
MI
FA
SOL
LA
SI
DO
但是我得到了:
DO
RE
MI
FA
SOLLA
LA
SI
DO
答案 0 :(得分:2)
NOTE[i]
是一个字符数组。 << NOTE[i]
将此数组插入字符流。数组参数衰减为指向第一个字符的指针。
文档说行为是不确定的,除非指针操作数指向以null结尾的数组。数组{'S','O','L'}
的结尾不是null。因此,程序的行为是不确定的-尽管可以辩称应该很好地定义多维数组的边界子数组的迭代行为(程序中显示了行为),但是对标准的严格解释是就是UB。
因此,要获得所需的输出,您需要1.将每个子数组null终止(因此需要一个更大的数组),或者2.分别打印每个字符。