Хотя стандарт C допускает использование массивов переменной длины (VLA), компиляторы Visual Studio не полностью совместимы со стандартами (релевантно Q & A ).
Однако я бы не рекомендовал использовать VLA в этомситуации, даже если они были поддержаны, потому что достаточно большое значение albumsize
может привести к неопределенному поведению.
Лучшим подходом является динамическое выделение памяти, например:
struct Album *Alben = malloc(albumsize * sizeof(*Alben));
... // Use the allocated memory here. Once you are done, free it.
free(Alben);
Обратите внимание, что один важныйразница между Alben
-the-pointer и Alben
-the-array состоит в том, что вы получаете от sizeof
: массив сообщает о размере своих данных, а указатель сообщает о размере только одного указателя.По этой причине вам необходимо сохранить значение albumsize
, например, для итерации массива в цикле.