Вы почти наверняка используете компилятор (или режим компилятора), который не поддерживает массивы переменной длины.
Возможность объявить массивы переменной длины (VLA) была добавлена в C99, поэтому, если ваш компилятор нене соответствует стандарту, или вы компилируете что-то вроде gcc -std=c89
, оно не будет работать.
Например:
pax$ cat qq.c
#include <stdio.h>
#include <string.h>
int main (void) {
int i = 7;
char x[i];
strcpy (x, "xyz");
printf ("%s\n", x);
return 0;
}
pax$ gcc -std=c99 -pedantic -Wall -o qq qq.c ; ./qq
xyz
pax$ gcc -std=c89 -pedantic -Wall -o qq qq.c
qq.c: In function ‘main’:
qq.c:5: warning: ISO C90 forbids variable length array ‘x’