Инициализация массива переменной длины с динамическим размером (VLA) равным 0

StackOverflow https://stackoverflow.com/questions/4393779

Вопрос

Следующая строка кода, которая создает массив переменной длины в стеке:

char name[length] = {'\0'};

Генерирует следующую диагностику компилятора:

error: variable-sized object may not be initialized
warning: excess elements in array initializer
warning: (near initialization for ‘name’)

Какие варианты доступны мне для инициализации VLAS?Вынужден ли я использовать такую строку, как:

memset(name, 0, sizeof(name));

Вместо этого?

Это было полезно?

Решение

Да, вы должны написать код для инициализации VLAs (который может быть memset() как вы описали, или любым другим способом, который вам захочется).

Это просто ограничение в стандарте C (§6.7.8).:

  1. Типом объекта, подлежащего инициализации, должен быть массив неизвестного размера или тип объекта, который не является типом массива переменной длины.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top