Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error C2057: expected constant expression

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!

like image 558
Ava Avatar asked Sep 05 '11 03:09

Ava


2 Answers

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.
like image 148
Mahesh Avatar answered Nov 13 '22 13:11

Mahesh


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.

like image 28
hmakholm left over Monica Avatar answered Nov 13 '22 11:11

hmakholm left over Monica