Инициализация динамически изменяемого массива переменной длины (VLA) в 0 - PullRequest
5 голосов
/ 09 декабря 2010

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

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

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

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

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

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

Вместо

1 Ответ

5 голосов
/ 09 декабря 2010

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

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

  1. Тип инициализируемого объекта должен быть массивом неизвестного размера или типом объекта, который не является массивом переменной длины.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...