Выделение памяти в языке Си - основа всего. Для выполнения этой задачи есть 2 функции calloc и malloc В чем разница? Calloc гарантировано выделяет память под объект нужного типа, чаще используется при работе со строковыми массивами. Malloc выделяет память, но чаще используется для работы с объектами типа int, float. Рассмотрим пример // Создадим указатель на массив и переменную N char **massiv; int N; char buffer[100]; // Спросим у пользователя сколько нужно выделить памяти под массив printf("Введите количество элементов массива N: "); scanf("%d", &N); // Выделяем память под строковый массив massiv = (char**)calloc(N, sizeof(char*)); Код // Создадим указатель на массив и переменную N char **massiv; int N; char buffer[100]; // Спросим у пользователя сколько нужно выделить памяти под массив printf("Введите количество элементов массива N: "); scanf("%d", &N); // Выделяем память под строковый массив massiv = (char**)calloc(N, sizeof(char*)); Теперь, когда мы заполняем элемент чем-то, то должны выделить память под него. Рассмотрим на примере ввода имени в первый элемент массива printf("\nВведите свое имя: "); // Помещаем имя во временную переменную буфер (строку) scanf("%s", buffer); // Выделяем память massiv[0] = (char*)calloc(strlen(buffer)+1, sizeof(char)); // Копируем буфер в массив[0] strcpy(massiv[0], buffer); Код printf("\nВведите свое имя: "); // Помещаем имя во временную переменную буфер (строку) scanf("%s", buffer); // Выделяем память massiv[0] = (char*)calloc(strlen(buffer)+1, sizeof(char)); // Копируем буфер в массив[0] strcpy(massiv[0], buffer); P.S. Для работы со строковыми функциями (например, strcpy, strcompare) используйте библиотеку #include <string.h>