Размер массива должен быть постоянной времени компиляции. Однако 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.