对不起,不好意思。 我已经将以下数组列表初始化为大小1.但是我可以执行scanf并循环遍历list [0]到list [4]而不会在visual studio 2010中出现任何问题。
这里是不是应该有错误?
void main()
{
int i=0,menu_choice=0;
int size;
int list[1]; //array initialized with size 1
do{
printMenu();
printf("Enter Your Choice: ");
scanf("%d",&menu_choice);
switch(menu_choice){
case 1:
printf("\n");
printf("Enter array size: ");
scanf("%d",&size);
printf("Enter %d numbers: ",size);
for(i=0;i<size;i++)
{
scanf("%d",&list[i]);
}
for(i=0;i<size;i++)
{
printf("%d",list[i]);
}
break;
default :
printf("Please select the right choice \n");
break;
}
}
while(menu_choice!=8);
}
答案 0 :(得分:4)
C不像你友好的邻居Java那样进行隐式数组边界检查。
当程序员不小心时,C很乐意让程序在数组(或任何已分配的内存)的末尾运行。这会导致未定义的行为(通常是内存分段或违规错误),并且是黑客(buffer overflow)的常见攻击媒介。C ++也是如此。