Error C2057: expected constant expression

2019-02-21 14:52发布

问题:

if(stat("seek.pc.db", &files) ==0 )
     sizes=files.st_size;

sizes=sizes/sizeof(int);
int s[sizes];

I am compiling this in Visual Studio 2008 and I am getting the following error: error C2057: expected constant expression error C2466: cannot allocate an array of constant size 0.

I tried using vector s[sizes] but of no avail. What am I doing wrong?

Thanks!

回答1:

The sizes of array variables in C must be known at compile time. If you know it only at run time you will have to malloc some memory yourself instead.



回答2:

Size of an array must be a compile time constant. However, C99 supports variable length arrays. So instead for your code to work on your environment, if the size of the array is known at run-time then -

int *s = malloc(sizes);
// ....
free s;

Regarding the error message:

int a[5];
   // ^ 5 is a constant expression

int b = 10;
int aa[b];
    // ^   b is a variable. So, it's value can differ at some other point.

const int size = 5;
int aaa[size];  // size is constant.