用户输入的C ++怪异数组

时间:2018-10-23 15:31:34

标签: c++ arrays dev-c++

正如我在c ++中所知道的,如果要创建数组,必须为其数组大小提供恒定的值。但是这里:

int main(){

    int a;
    cin >> a;
    int b[a] = {};

    for (int i = 0; i<a ; i++){
        b[i] = a;
        cout << b[i];
    }
    return 0;
}

如果我输入5

输出:

55555

它以某种我无法在dev c ++中理解的方式正常工作。如果我在Visual Studio 2017中运行此程序,则会出现错误。谁能解释为什么?

2 个答案:

答案 0 :(得分:0)

  

正如我在c ++中所知道的,如果要创建数组,必须为其数组大小提供恒定值。

正确。如果使用非恒定值,则程序格式错误。是的,您显示的程序格式错误。

  

它以我无法理解的方式运作良好……任何人都可以解释为什么吗?

C ++编译器可能允许编译格式错误的程序。这使编译器可以扩展语言。看来您在使用C ++的非标准扩展。

这是GCC编译器对您的程序的评价:

warning: ISO C++ forbids variable length array 'b' [-Wvla]
int b[a] = {};
       ^

答案 1 :(得分:0)

您是否有机会使用GCC?这是GCC扩展名,默认情况下启用。实际上,这是很危险的,因为它很容易在程序上引起堆栈溢出。大致与使用alloca()相同。

要禁用它,您应该使用名为-Wpedantic的编译器标志。这将使您的编译器发出警告。 (see this demonstration

  

ISO C ++禁止使用可变长度数组'b'[-Werror = vla]