C ++奇怪的数组由用户输入

c++ weird array by user input

本文关键字:用户 输入 数组      更新时间:2023-10-16

正如我在 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中运行它,它会出错。谁能解释为什么?

您是否有机会使用 GCC?这是一个 GCC 扩展,默认情况下处于启用状态。事实上,这是一个非常危险的选择,因为它很容易导致程序上的堆栈溢出。这与使用alloca()大致相同。

为了禁用它,您应该使用名为-Wpedantic的编译器标志。这将使编译器发出警告。(请参阅此演示(

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

正如我在 c++ 中所知道的,如果你想创建一个数组,你必须为其大小提供常量值。

正确。如果使用非常量值,则程序格式不正确。是的,您显示的程序格式不正确。

它以一种我无法理解的方式工作正常...谁能解释为什么?

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

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

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