0

我的代码如下。我想声明一个 size 数组n

FILE *fp;
fp=fopen("myfile.b", "rb");
if(fp==NULL){ fputs("file error", stderr); exit(1); }
int* a;
fread(a, 0x1, 0x4, fp);
int n=*a;
int array[n];  // here is an error 

如何n在此代码中声明一个大小数组?

4

5 回答 5

4

这是一个可变长度数组的声明,它还没有在 C++ 中。

相反,我建议您std::vector改用:

std::vector<int> array(n);

您还有其他问题,例如声明指针但未初始化它,然后使用该指针。当您声明一个局部变量(如a)时,它的初始值是undefined,因此使用该指针(分配给它除外)会导致未定义的行为。在这种情况下,您的程序可能会崩溃。

于 2013-10-21T07:41:04.490 回答
0

Array 只接受 const 对象或表达式,值可以由编译器在编译时决定,c++ 中的vector 更适合这种情况,否则我们需要为其动态分配内存。

于 2013-10-21T08:37:10.230 回答
0
int *array = (int*)malloc( n * sizeof(int) );
//..
//your code
//..
//..
free(array);
于 2013-10-21T07:46:18.717 回答
0

你不能在 C++ 中声明一个可变大小的数组,但是一旦你知道你需要多少,你就可以分配内存:

int* a = 新的 int[n];

//对你的数组做一些事情...

//完成后:

删除[]一个;

于 2013-10-21T07:47:07.047 回答
0

由于您的代码看起来更像 C...

FILE *fp = fopen("myfile.b", "rb");

if(fp==NULL)
{ 
  fputs("file error", stderr); 
  exit(1); 
}

//fseek( fp, 0, SEEK_END ); // position at end
//long filesize = ftell(fp);// get size of file
//fseek( fp, 0, SEEK_SET ); // pos at start

int numberOfInts = 0;
fread(&numberOfInts, 1, 4, fp); // you read 4 bytes sizeof(int)=4?
int* array = malloc( numberOfInts*sizeof(int) );
于 2013-10-21T07:47:39.893 回答