C语言中数组的初始长度能不能由用户输入来决定? 在我学C语言时,老师通过VC6.0告诉我们不可以。但是现在我用gcc(ver. 5.4)却可以编译成功,而且gcc没有对数组越界进行报错。具体来说,如果定义数组int a[n],初始长度由用户输入的n来决定,那么越界部分既可以读取,也可以写入;如果定义数组int b[2],即初始长度固定为某个整数,那么可以读取越界值b[2]、b[3]等,但是无法写入(运行程序时,向越界部分写入时会报stack smashing的错误)。读取到的越界部分的值均是没有初始化过的、内存中的随机值。 #include <stdio.h> int main(int argc, char *argv[]) { int n; scanf("%d", &n); int a[n]; for (int i = 0; i < n*2; i++) { printf("a[%d] = %d\n", i, a[i]); } for (int i = 0; i < n*2; i++) { a[i] = -1; printf("a[%d] = %d\n", i, a[i]); } int b[2]; for (int i = 0; i < 4; i++) { printf("b[%d] = %d\n", i, b[i]); } // b[2] = 3; // stack smashing /*for (int i = 0; i < 4; i++) { // stack smashing b[i] = -2; printf("b[%d] = %d\n", i, b[i]); }*/ return 0; }