【问题标题】:c++ weird array by user input [duplicate]c ++用户输入的奇怪数组[重复]
【发布时间】:2019-03-27 21:55:39
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

您是否有机会使用 GCC?这是一个 GCC 扩展,默认启用。事实上,这是一个非常危险的问题,因为它很容易在您的程序上造成堆栈溢出。与使用alloca()大致相同。

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

ISO C++ 禁止变长数组‘b’ [-Werror=vla]

【讨论】:

    【解决方案2】:

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

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

    它以我无法理解的方式运行良好......有人可以解释为什么吗?

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

    这是 GCC 编译器对您的程序的描述:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多