Инициализация массива переменной длины с динамическим размером (VLA) равным 0
-
10-10-2019 - |
Вопрос
Следующая строка кода, которая создает массив переменной длины в стеке:
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).:
- Типом объекта, подлежащего инициализации, должен быть массив неизвестного размера или тип объекта, который не является типом массива переменной длины.
Не связан с StackOverflow