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);
希望能帮助到你!