【发布时间】:2015-03-01 16:39:34
【问题描述】:
我遇到了这两个代码块:
#include <stdio.h>
int main() {
int a[10], i;
for (i = 1; i <= 10; i++) {
scanf("%d", &a[i]);
printf("%d\n", a[i]);
}
return 0
}
当我运行第一段代码时,代码运行良好,但有时会被覆盖,我没有得到预期的结果。
但是,当我运行第二段代码时,程序运行得非常好,没有错误。
#include <stdio.h>
int main() {
int size;
scanf("%d", &size);
int a[size], i;
for (i = 1; i <= size; i++) {
scanf("%d", &a[i]);
printf("%d\n", a[i]);
}
return 0
}
为什么程序在第二种情况下运行完美?即使在第二种情况下,下标也会超过声明的数组大小。
【问题讨论】:
-
您使用的是哪个编译器/操作系统?
-
顺便说一句,你的程序不应该编译,因为“return 0”错过了一个分号...
-
未定义的行为是未定义的不良行为。你不能指望崩溃。