【发布时间】:2021-08-07 17:12:49
【问题描述】:
还有为什么当我提供 m > 我的列值时它不打印垃圾,就像在第二种情况下一样?有什么具体原因吗?
#include <iostream>
using namespace std;
int main()
{
char a[2][5] = {{'a', 'b', 'c', 'd', 's'}, {'e', 'f', 'g', 'h', 'q'}};
cout << a[0] << endl; // abcdsefghq!V
cout << a[1] << endl; // efghq!V
char a1[][6] = {{'a', 'b', 'c', 'd', 's'}, {'e', 'f', 'g', 'h', 'q'}};
cout << a1[0] << endl; // abcds
cout << a1[1] << endl; // efghq
return 0;
}
【问题讨论】:
-
如果你给出一个明确的数组大小但没有在初始化器中指定所有元素,剩余的元素将被初始化为零。
char[]转换为char*,因此零初始化元素的作用类似于 c 字符串中的空终止符。 -
问题终止于零!
-
当你的代码有 ub 时,危险不是得到“垃圾”,而是得到看起来合理的输出。我不知道这个“垃圾”故事从何而来,恕我直言,这只是误导,并没有帮助。 “我期待垃圾,但输出很好,为什么?”错过了未定义行为的重点。
标签: c++ arrays multidimensional-array char