Инициализация динамического массива в c

По C99 стандартам мы можем это сделать

int n = 0;
scanf("%d",&n);
int arr[n];

это один из способов создания динамического массива в c. Теперь я хочу инициализировать этот массив до 0 вот так

int arr[n] = {0};

Здесь мой компилятор выдает ошибку. Я хочу знать, мы можем это сделать? Это по стандарту? Во время компиляции мы предоставляем достаточно памяти для массивов, но здесь это неизвестно во время компиляции. Как это происходит?


person someone    schedule 05.07.2013    source источник
comment
Если вы хотите иметь действительно динамический массив, который инициализируется при создании, используйте calloc. В моем компиляторе GCC ошибка variable-sized object may not be initialized хорошо описывает, разрешено это или нет.   -  person Nobilis    schedule 05.07.2013
comment
Явно запрещено инициализировать массив переменной длины в соответствии с ограничением 6.7.8/3. Тип инициализируемого объекта должен быть массивом неизвестного размера или типом объекта, который не является типом массива переменной длины< /б>.   -  person dyp    schedule 05.07.2013
comment
Всегда было бы полезно включить текст сообщения об ошибке, на который есть ссылка в вопросе.   -  person MikeW    schedule 12.07.2017
comment
Между прочим, массив C99 не является по-настоящему динамическим в том смысле, что его размер меняется во время выполнения — его размер /allocation/ определяется во время выполнения, но после выделения он не изменяется до тех пор, пока не выйдет за пределы области видимости.   -  person MikeW    schedule 12.07.2017


Ответы (2)


мы можем это сделать?

Нет. Но вы можете сделать это:

int arr[n];
memset(arr, 0, sizeof(arr));

Вы теряете синтаксический сахар для инициализации, но получаете функциональность.

person Community    schedule 05.07.2013

int n = 0;
scanf("%d",&n);
int arr[n];

Вы не можете сделать это. Если вы хотите выделить память для массива, используйте функции malloc или calloc.

person SANDEEP    schedule 05.07.2013
comment
V(ariable)L(ength)A(массив) поставлялись с C99. - person alk; 05.07.2013
comment
Ты говоришь со мной?‹tm› @H2CO3 - person alk; 05.07.2013