Почему в visual studio не создаётся массив с желаемым кол-вом элементов

Хочу чтобы массив заполнялся полностью пользователем(размер , элементы) . Пытаюсь просто создать массив arr[n],а visual studio пишет что кол-во должно быть константой . Делал так в Kdevelop на линуксе , работало . Может надо подключить какие-то директивы?

int main(void)
{
int n;
printf("Введите кол-во элементов массива: ");
scanf("%d", &n);
float arr[n];



}

Ответы (2 шт):

Автор решения: tomato-magnet-regulato
int n;
printf("Введите кол-во элементов массива: ");
scanf("%d", &n);

int * a = (int*) malloc(n*sizeof(int)); // Массив с заданным кол-вом элементов
// Код...
// Код...
free(a); // чистим.
→ Ссылка
Автор решения: Artyomka

Иван, память под статический массив нужного размера, который ввел пользователь не может быть выделена во время выполнения программы. Если же вы хотите использовать массив, размер которого указал сам пользователь, то Вам необходимо динамическое выделение памяти т.е использовать динамический массив.

#include <stdio.h>
#include <stdlib.h>



int main()
{
    // Установка русской кодировки
    system("chcp 1251");
    system("cls");

    int* arr    = NULL;
    int sizeArr = 0;

    printf("Введите резмер массива: ");
    scanf_s("%d", &sizeArr);

    // Если введенный размер > 0, то запрашиваем нужное количество памяти
    if (sizeArr > 0)
    {
        arr = (int*)malloc(sizeArr * sizeof(int));
    }

    // Проверяем arr на наличие пустого (нулевого) указателя (NULL)
    if (arr != NULL)
    {
        printf("Заполните массив.\n");

        // Заполняем массив
        for (int i = 0; i < sizeArr; ++i)
        {
            printf("arr[%d] = ", i);
            scanf_s("%d", &arr[i]);
        }

        printf("Массив: ");

        // Вывод массива в консоль
        for (int i = 0; i < sizeArr; ++i)
        {
            printf("%d ", arr[i]);
        }

        printf("\n");

        // Очищаем ранее выделенную память
        free(arr);
        arr = NULL;
    }

    return 0;
}

Функция malloc выделяет необходимое количество байтов памяти и возвращает указатель на неё. malloc возвращает указатель типа void, поэтому его нужно самостоятельно приводить к нужному типу использовав явное приведение типов. Если же вам все же нужен статический массив, то воспользуйтесь директивой препроцессора #define [Текст] [Замена]. Более подробную информацию Вы найдете здесь

#include <stdio.h>
#include <stdlib.h>


#define MAX_SIZE 100


int main()
{
    // Установка русской кодировки
    system("chcp 1251");
    system("cls");

    int arr[MAX_SIZE];
    int sizeArr = 0;


    printf("Введите резмер массива: ");
    scanf_s("%d", &sizeArr);


    printf("Заполните массив.\n");

    for (int i = 0; i < sizeArr; ++i)
    {
        printf("arr[%d] = ", i);
        scanf_s("%d", &arr[i]);
    }

    printf("Массив: ");

    for (int i = 0; i < sizeArr; ++i)
    {
        printf("%d ", arr[i]);
    }

    printf("\n");

    return 0;
}
→ Ссылка