修复了C查询中的数组大小

时间:2015-03-10 03:58:47

标签: c

对不起,不好意思。 我已经将以下数组列表初始化为大小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);


}

1 个答案:

答案 0 :(得分:4)

C不像你友好的邻居Java那样进行隐式数组边界检查。

当程序员不小心时,C很乐意让程序在数组(或任何已分配的内存)的末尾运行。这会导致未定义的行为(通常是内存分段或违规错误),并且是黑客(buffer overflow)的常见攻击媒介。

C ++也是如此。