数组可以在C中提供和后定义的长度吗?为什么它在VS社区不起作用

v2g6jxz6  于 2023-03-22  发布在  其他
关注(0)|答案(2)|浏览(119)

所以我有C编程作业,我想做的是从用户那里得到一个输入,并将输入长度变成一个数组。我基本上认为这是可行的:

int main()
{
    int a, b;
    int array[a];
    scanf("%d", &a);
    
    array[0] = 0;
    printf("%d", array[0]);
    return 0;
}

它在一个在线编译器上工作,但在我的Visual Studio社区IDE上不工作。
问题出在哪里?是我的代码还是IDE?

j9per5c4

j9per5c41#

除了a在第一次使用时未初始化(这意味着它将包含垃圾字节-编译器应该告诉你是否启用警告)之外,不,你不能在MSVC(Visual Studio附带的编译器)中真正做到这一点。
如果你必须在Windows上这样做,你可以尝试使用MinGW作为替代,或者如果你必须使用Visual Studio,你唯一的选择是使用malloc来动态分配必要的内存。如果你不能这样做,希望你的老师能理解。

68de4m5k

68de4m5k2#

数组可以在C中提供和后定义的长度吗?为什么它在VS社区不起作用
是的,在运行时确定长度的数组可以在定义a之后定义。
int array[a];variable length array(VLA)。
它首先在C99中是一个标准功能,在以后的版本中是 * 可选 *。
VS社区从未完全支持C99。
支持C11及更高版本的VS版本不实现此可选功能。
出了什么问题?

  • 假设VLA始终可用。
  • 代码应在int array[a];之前分配a

相关问题