无法声明FilePointer数组

时间:2013-12-23 07:10:41

标签: c++ arrays visual-studio-2010 pointers

我正在尝试在VS2010中编译C ++程序。我正在使用下面的代码,但在编译时遇到错误。

int c=1;
FILE *f[c+2];

错误说我不能在那里使用c。它必须是恒定的价值,但我的要求是我不能在那里使用常数。请建议。

谢谢, Amit Agarwal

4 个答案:

答案 0 :(得分:4)

在C ++中,大小不是常量表达式的数组拼写为vector

int c=1;
vector<FILE*> f(c+2);

答案 1 :(得分:2)

使用动态分配:

int c=1;
FILE *f = new FILE[c+2];

但是,一定要在使用完毕后释放指针:

delete []f;

更好的是,您可以使用std::unique_ptr VS 2010支持它:

int c=1;
std::unique_ptr<FILE[]> fp(new FILE[c+2]);

请确保#include<memory>包含声明std::unique_ptr的地方。

优点是您不必使用delete []来释放指针。编译器负责内存管理。

答案 2 :(得分:0)

VS没有C99编译器,并且不支持可变长度数组。 因此,数组维度应该是常量。

int c=1;
FILE *f[3];

由于您需要动态分配,您可以使用

int c=5;
FILE *f = new FILE[c+2];

答案 3 :(得分:-1)

您可以通过以下方式实现此目的:

  

#define MAX_FILES

     

FILE * f [MAX_FILES + 1];

或者您使用'new'进行动态分配