这一切都取决于编译器.
允许使用可变长度自动数组
ISO C99,作为扩展,GCC在C90模式和C++中接受它们.这些数组的声明与任何其他自动数组一样,但其长度不是常量表达式.存储在声明点分配,并在退出支撑级别时释放.例如:
FILE *
concat_fopen (char *s1, char *s2, char *mode)
{
char str[strlen (s1) + strlen (s2) + 1];
strcpy (str, s1);
strcat (str, s2);
return fopen (str, mode);
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅此
一种方法是使用 VLA(C99 定义了所谓的“可变长度数组”)。
这是一个例子:
#include <stdio.h>
int use_a_vla (int n)
{
int vla[n]; /* Array length is derived from function argument. */
vla[0] = 10;
vla[n-1] = 10;
return 0;
}
int main (void)
{
int i;
scanf ("%d", &i); /* User input. */
use_a_vla (i);
}
Run Code Online (Sandbox Code Playgroud)