Я использую MinGW для компиляции для С++ 11, и я узнал, что это не вызывает ошибку:
int S;
cin>>S;
char array[S];
Хотя это делает ("размер хранилища" массив "неизвестен"):
char array[];
Для меня размер также неизвестен в первом случае, так как он зависит от того, что пользователь вводит.
Насколько я знаю, автоматические массивы выделяются во время компиляции в стеке памяти. Так почему бы первый пример не сработал?