C:如何使数组的大小动态化?

我从书中读到:«C Primer Plus»告诉我C99标准,可以使用如下的语法:

int b=4; char a[b]; 

但是当我把这段代码放入vs2013时,它告诉我“表达式必须有一个常量值”。

这本书错了吗? 或者有一些我不知道的关于vs2013的新function?

这称为可变长度数组 ,我猜你的VS2013编译器不支持它们。

我建议你切换到另一个编译器。 最新版本的GCC或Clang / LLVM支持VLA,它们支持C99甚至大多数C11 。

实际上我甚至建议将您的开发工作和系统切换到Linux 。 开发工具通常是免费软件 ,作为整个系统。

否则,使用指针,例如从malloc(3) (或calloc )获得; 但是,你应该测试失败的分配,然后free调用。 避免内存泄漏 (如果可用,请使用valgrind之类的工具)。 也许您的编译器支持非标准但广泛可用的alloca(3) 。 考虑也许还使用程序范围的垃圾收集器,如Boehm的收敛GC :然后你将使用GC_malloc而不是malloc但你不需要调用GC_free

VS2013不支持变长声明。

声明数组时,不能在括号之间输入非常量值:

 char a[b]; 

由于您从用户那里获得了大小,编译器无法提前知道char array a需要多少内存。 这里最简单的事情(特别是练习)是选择一个相对较大的值并使其成为常量分配,如:

char a [1024];

然后,如果你想小心(你应该),你可以检查是否(b> 1024)并且如果用户希望b超出预先分配的界限则打印错误。

如果你想得到想象,你可以定义没有预设大小的char a[] ,比如char *a; 然后你稍后用malloc分配它:

 a = (char *)malloc(sizeof(char) * b); 

然后,当你完成它之后,你还必须char a[]以后释放char a[]

 free(a); 

希望能帮助到你!