所以我有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?
j9per5c41#
除了a在第一次使用时未初始化(这意味着它将包含垃圾字节-编译器应该告诉你是否启用警告)之外,不,你不能在MSVC(Visual Studio附带的编译器)中真正做到这一点。如果你必须在Windows上这样做,你可以尝试使用MinGW作为替代,或者如果你必须使用Visual Studio,你唯一的选择是使用malloc来动态分配必要的内存。如果你不能这样做,希望你的老师能理解。
a
malloc
68de4m5k2#
数组可以在C中提供和后定义的长度吗?为什么它在VS社区不起作用是的,在运行时确定长度的数组可以在定义a之后定义。int array[a];是variable length array(VLA)。它首先在C99中是一个标准功能,在以后的版本中是 * 可选 *。VS社区从未完全支持C99。支持C11及更高版本的VS版本不实现此可选功能。出了什么问题?
int array[a];
2条答案
按热度按时间j9per5c41#
除了
a
在第一次使用时未初始化(这意味着它将包含垃圾字节-编译器应该告诉你是否启用警告)之外,不,你不能在MSVC(Visual Studio附带的编译器)中真正做到这一点。如果你必须在Windows上这样做,你可以尝试使用MinGW作为替代,或者如果你必须使用Visual Studio,你唯一的选择是使用
malloc
来动态分配必要的内存。如果你不能这样做,希望你的老师能理解。68de4m5k2#
数组可以在C中提供和后定义的长度吗?为什么它在VS社区不起作用
是的,在运行时确定长度的数组可以在定义
a
之后定义。int array[a];
是variable length array(VLA)。它首先在C99中是一个标准功能,在以后的版本中是 * 可选 *。
VS社区从未完全支持C99。
支持C11及更高版本的VS版本不实现此可选功能。
出了什么问题?
int array[a];
之前分配a
。