C 将数组大小定义为用户输入的变量是否合法?

C 将数组大小定义为用户输入的变量是否合法?,c,arrays,C,Arrays,我认为数组的大小应该是恒定的。我在VS2019中编写代码,甚至当我这样做时: const int size = 5; int number[size]; 我将收到此错误表达式必须有一个常量值,直接使用整数作为数组大小的唯一替代方法是使用宏定义,否则我将收到错误 但在一些IDE中,比如dev,甚至可以将数组的大小作为用户的输入 这就是我的问题: 这样做对吗?用户定义的数组大小是否存在风险和问题?可变长度数组(VLA)存在风险和问题,尽管一些编译器(如GCC)也允许它们在旧版本中作

我认为数组的大小应该是恒定的。我在VS2019中编写代码,甚至当我这样做时:

    const int size = 5;
    int number[size];
我将收到此错误
表达式必须有一个常量值
,直接使用整数作为数组大小的唯一替代方法是使用
宏定义
,否则我将收到错误

但在一些IDE中,比如
dev
,甚至可以将数组的大小作为用户的输入

这就是我的问题:

这样做对吗?用户定义的数组大小是否存在风险和问题?

可变长度数组(VLA)存在风险和问题,尽管一些编译器(如GCC)也允许它们在旧版本中作为扩展。从C11开始,编译器不再需要支持VLA,如果不支持它,将把
\u STDC\u no\u VLA\u
定义为
1

VLA本身就有风险:要么事先知道数据的最大大小,在这种情况下可以分配一个固定长度的数组,要么不知道,在这种情况下可能导致堆栈溢出


值得注意的是,在C++中,可变长度数组从来都不是标准的一部分。

< P> <代码> const 比“常数”更具有“只读”的含义。 您可以使用enumertaion。成员被视为常量

enum { size = 5 };
int number[size];

这应该行。

@Thomas我不确定,因为我检查了一些类似的问题,但是因为它们是关于
c++
的,所以答案也是关于
c++
的。对不起,之前没有注意到
c
标记。搜索VLA,可变长度数组。虽然最近的修订使其成为可选(=可能不受支持),但它们在C中是允许的。我很确定这个信息已经被一个问题覆盖了,但我现在无法找到它。@RobertoCaboni搜索不好都是我的错,但是,由于我在这个主题中发现的大多数问题都是
c++
,所以我决定自己问。由于受到从未实现过VLA的MS的影响,在C11Perhaps中VLA变成了可选的。@WeatherVane你怎么知道的?@ArdentCode,因为MSVC编译器拒绝
int n=42;char-arr[n]。或者小道消息;)@那么MSVC是唯一这样的编译器吗?你在没有证据的情况下指控微软,等我在那里找到工作,我会报告你的,哈哈