2010-12-09 2 views
3

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

char name[cpfs_params(cfdata->cpfs)->namemax + 1] = {'\0'}; 

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

src/mount.cpfs/cpfsfuse.c:179: error: variable-sized object may not be initialized

src/mount.cpfs/cpfsfuse.c:179: warning: excess elements in array initializer

src/mount.cpfs/cpfsfuse.c:179: warning: (near initialization for ‘name’)

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

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

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

ответ

4

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

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

  1. The type of the entity to be initialized shall be an array of unknown size or an object type that is not a variable length array type.
+0

Почему я не могу сделать это в одной строке? – 2010-12-10 17:00:05