Ошибка C2057: ожидаемое постоянное выражение - PullRequest
9 голосов
/ 05 сентября 2011
if(stat("seek.pc.db", &files) ==0 )
     sizes=files.st_size;

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

Я компилирую это в Visual Studio 2008 и получаю следующую ошибку: ошибка C2057: ожидаемая ошибка константного выражения C2466: невозможно выделить массив постоянного размера 0.

Я пытался использовать векторs [размеры], но безрезультатно.Что я делаю не так?

Спасибо!

Ответы [ 2 ]

11 голосов
/ 05 сентября 2011

Размеры переменных массива в C должны быть известны во время компиляции.Если вы знаете это только во время выполнения, вам вместо этого придется malloc немного памяти.

5 голосов
/ 05 сентября 2011

Размер массива должен быть постоянной времени компиляции. Однако C99 поддерживает массивы переменной длины. Поэтому вместо того, чтобы ваш код работал в вашей среде, если размер массива известен во время выполнения, то -

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

По поводу сообщения об ошибке:

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...