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

azg*_*zgt 2 c arrays c99 c11 visual-studio-2013

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

    int b=4;
    char a[b];
Run Code Online (Sandbox Code Playgroud)

但是当我把这段代码放到vs2013中时,它告诉我"表达式必须有一个常量值".

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

Bas*_*tch 7

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

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

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

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